Topik ini menjelaskan cara menggunakan SDK untuk mempercepat pengembangan aplikasi High-Speed Service Framework (HSF) dan mengimplementasikan pendaftaran serta penemuan layanan.
Prasyarat
Sebelum mengembangkan aplikasi, pastikan operasi berikut telah selesai:
Unduh proyek demo
Anda dapat mengikuti langkah-langkah dalam topik ini untuk membangun proyek, langsung mengunduh proyek contoh, atau mengunduhnya dengan menjalankan git clone https://github.com/aliyun/alibabacloud-microservice-demo.git.
Proyek ini mencakup beberapa proyek contoh. Proyek contoh dari topik ini terletak di alibabacloud-microservice-demo/microservice-doc-demo/hsf-ali-tomcat, termasuk direktori proyek Maven itemcenter-api, itemcenter, dan detail.
itemcenter-api: menyediakan definisi API.
itemcenter: berisi kode contoh penyedia layanan.
detail: berisi kode contoh konsumen layanan.
Gunakan Java Development Kit (JDK) 1.7 atau yang lebih baru.
Definisikan API layanan
Kerangka kerja layanan HSF memungkinkan komunikasi layanan melalui API. Setelah API didefinisikan, penyedia mengimplementasikan dan menerbitkan layanan spesifik menggunakan API tersebut, sementara konsumen berlangganan dan menggunakan layanan melalui API yang sama.
Dalam proyek demo itemcenter-api, definisikan API com.alibaba.edas.carshop.itemcenter.ItemService.
public interface ItemService {
public Item getItemById(long id);
public Item getItemByName(String name);
}API ini menyediakan metode getItemById dan getItemByName.
Mengembangkan penyedia layanan
Penyedia layanan mengimplementasikan API layanan untuk menyediakan layanan tertentu. Jika framework Spring digunakan, penyedia layanan juga perlu mengonfigurasi properti layanan dalam file XML.
Direktori itemcenter dalam proyek demo berisi kode contoh penyedia layanan.
Implementasikan API layanan.
Bangun API layanan berdasarkan kode contoh dalam file ItemServiceImpl.java.
public class ItemServiceImpl implements ItemService { @Override public Item getItemById( long id ) { Item car = new Item(); car.setItemId( 1l ); car.setItemName( "Mercedes Benz" ); return car; } @Override public Item getItemByName( String name ) { Item car = new Item(); car.setItemId( 1l ); car.setItemName( "Mercedes Benz" ); return car; } }Konfigurasikan penyedia layanan.
API layanan com.alibaba.edas.carshop.itemcenter.ItemService diimplementasikan di Implementasikan API layanan, dan objek Item dikembalikan dalam kedua metode. Setelah pengembangan kode selesai, konfigurasikan pengaturan yang diperlukan dan tambahkan dependensi Maven dalam file web.xml, lalu gunakan tag
<hsf />untuk mendaftarkan dan menerbitkan layanan dalam profil Spring.Tambahkan dependensi Maven ke file pom.xml.
<dependencies> <!-- Tambahkan dependensi Servlet. --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <!-- Tambahkan dependensi API layanan. --> <dependency> <groupId>com.alibaba.edas.carshop</groupId> <artifactId>itemcenter-api</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency> <!-- Tambahkan dependensi Spring. --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>2.5.6 (dan yang lebih baru)</version> </dependency> <!-- Tambahkan dependensi edas-sdk. --> <dependency> <groupId>com.alibaba.edas</groupId> <artifactId>edas-sdk</artifactId> <version>1.8.1</version> </dependency> </dependencies>Tambahkan konfigurasi Spring untuk layanan HSF ke file hsf-provider-beans.xml.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hsf="http://www.taobao.com/hsf" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.taobao.com/hsf http://www.taobao.com/hsf/hsf.xsd" default-autowire="byName"> <!-- Definisikan implementasi layanan. --> <bean id="itemService" class="com.alibaba.edas.carshop.itemcenter.ItemServiceImpl" /> <!-- Gunakan tag hsf:provider untuk mendefinisikan penyedia layanan. --> <hsf:provider id="itemServiceProvider" <!-- Gunakan properti interface untuk menunjukkan bahwa layanan merupakan implementasi dari kelas antarmuka. --> interface="com.alibaba.edas.carshop.itemcenter.ItemService" <!-- Objek Spring yang diimplementasikan oleh layanan. --> ref="itemService" <!-- Nomor versi layanan yang diterbitkan. Nomor versi ditentukan oleh pengguna dan nilai defaultnya adalah 1.0.0. --> version="1.0.0" </hsf:provider> </beans>Contoh di atas menunjukkan konfigurasi dasar. Anda dapat menambahkan properti lain sesuai kebutuhan bisnis. Untuk informasi lebih lanjut tentang properti, lihat tabel properti penyedia layanan berikut.
Properti
Deskripsi
interface
Wajib. API untuk menyediakan layanan. Tipe data adalah STRING.
version
Opsional. Versi layanan. Nilai default adalah 1.0.0. Tipe data adalah STRING.
clientTimeout
Properti ini berlaku untuk semua metode dalam API. Namun, jika konsumen menentukan periode timeout untuk metode menggunakan properti methodSpecials, periode timeout yang ditentukan akan mengambil alih nilai properti ini untuk metode tersebut. Metode lain tetap menggunakan periode timeout yang dikonfigurasi pada penyedia.
serializeType
Opsional. Jenis serialisasi. Jenis default adalah hessian. Tipe data adalah
String(hessian|java).corePoolSize
Ukuran thread pool inti yang dialokasikan dari thread pool publik untuk layanan ini.
maxPoolSize
Ukuran maksimum thread pool yang dialokasikan dari thread pool publik untuk layanan ini.
enableTXC
Properti ini mengaktifkan middleware transaksi terdistribusi GTS.
ref
Wajib. ID bean Spring yang ingin Anda terbitkan sebagai layanan HSF. Tipe data adalah ref.
methodSpecials
Opsional. Periode timeout (satuan: milidetik) untuk satu metode. Dengan cara ini, periode timeout yang berbeda dapat ditentukan untuk metode yang berbeda dalam API. Properti timeout ini mengambil alih clientTimeout tetapi mengalah pada methodSpecials di sisi konsumen.
Tabel berikut menjelaskan batasan pada pembuatan dan penerbitan layanan.
Parameter
Contoh
Ukuran maksimum
Dapat disesuaikan
{Nama Layanan}:{Nomor Versi}
com.alibaba.edas.testcase.api.TestCase:1.0.0
192 byte
Tidak
Nama Grup
HSF
32 byte
Tidak
Jumlah layanan yang diterbitkan oleh satu instance aplikasi Pandora
N/A
800
Ya. Di tab Informasi Dasar, Anda dapat mengklik Pengaturan di sebelah kanan Application Settings dan memilih JVM dari daftar drop-down. Dalam kotak dialog Application Settings, pilih dan masukkan
-DCC.pubCountMax=1200di bidang tersebut. Anda dapat mengubah nilai parameter Parameter Kustom berdasarkan jumlah layanan yang diterbitkan.Contoh konfigurasi properti penyedia layanan:
<bean id="impl" class="com.taobao.edas.service.impl.SimpleServiceImpl" /> <hsf:provider id="simpleService" interface="com.taobao.edas.service.SimpleService" ref="impl" version="1.0.1" clientTimeout="3000" enableTXC="true" serializeType="hessian"> <hsf:methodSpecials> <hsf:methodSpecial name="sum" timeout="2000" /> </hsf:methodSpecials> </hsf:provider>
Mengembangkan konsumen layanan
Langganan layanan untuk konsumen dilakukan dalam dua langkah:
Gunakan tag
<hsf:consumer/>dalam profil Spring untuk mendefinisikan bean.Ambil bean dari konteks Spring untuk menemukan layanan.
Direktori detail dalam proyek demo berisi kode contoh konsumen layanan.
Konfigurasi properti layanan untuk konsumen mencakup konfigurasi dependensi Maven dan konfigurasi Spring. Konfigurasi properti layanan untuk konsumen serupa dengan konfigurasi untuk penyedia.
Konfigurasikan properti layanan.
Tambahkan dependensi Maven ke file pom.xml.
<dependencies> <!-- Tambahkan dependensi servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <!-- Tambahkan dependensi Spring --> <dependency> <groupId>com.alibaba.edas.carshop</groupId> <artifactId>itemcenter-api</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency> <!-- Tambahkan dependensi antarmuka layanan --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>2.5.6(dan yang lebih baru)</version> </dependency> <!-- Tambahkan dependensi edas-sdk --> <dependency> <groupId>com.alibaba.edas</groupId> <artifactId>edas-sdk</artifactId> <version>1.8.1</version> </dependency> </dependencies>Tambahkan konfigurasi Spring untuk layanan HSF ke file hsf-consumer-beans.xml.
Tambahkan definisi konsumen dalam file konfigurasi Spring. Kemudian, kerangka kerja HSF berlangganan layanan yang ditentukan dari registri layanan menggunakan file konfigurasi.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hsf="http://www.taobao.com/hsf" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.taobao.com/hsf http://www.taobao.com/hsf/hsf.xsd" default-autowire="byName"> <! -- Contoh konsumsi layanan. --> <hsf:consumer <!-- ID bean yang digunakan untuk mengambil objek konsumen melalui injeksi kode. --> id="item" <!-- Nama layanan. Ini sesuai dengan nama layanan penyedia layanan. Konsumen HSF mencari dan berlangganan layanan berdasarkan nilai parameter interface dan version. --> interface="com.alibaba.edas.carshop.itemcenter.ItemService" <!-- Nomor versi yang sesuai dengan nomor versi penyedia layanan. Konsumen HSF mencari dan berlangganan layanan berdasarkan nilai parameter interface dan version. --> version="1.0.0"> </hsf:consumer> </beans>
Konfigurasikan konsumen layanan.
Untuk informasi lebih lanjut, lihat contoh dalam file StartListener.java.
public class StartListener implements ServletContextListener{ @Override public void contextInitialized( ServletContextEvent sce ) { ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext( sce.getServletContext() ); // Ambil layanan berlangganan berdasarkan ID bean "item" dalam konfigurasi Spring. final ItemService itemService = ( ItemService ) ctx.getBean( "item" ); …… // Panggil metode getItemById dari ItemService. System.out.println( itemService.getItemById( 1111 ) ); // Panggil metode getItemByName dari ItemService. System.out.println( itemService.getItemByName( "myname is le" ) ); …… } }Contoh di atas menunjukkan konfigurasi dasar. Anda dapat menambahkan properti lain sesuai kebutuhan bisnis. Untuk informasi lebih lanjut tentang properti, lihat tabel properti layanan berikut.
Properti
Deskripsi
interface
Wajib. API layanan yang akan dipanggil. Tipe data adalah STRING.
version
Opsional. Versi layanan yang akan dipanggil. Nilai default adalah 1.0.0. Tipe data adalah STRING.
methodSpecials
Opsional. Periode timeout untuk satu metode. Satuan: milidetik. Periode timeout yang berbeda dapat ditentukan untuk metode yang berbeda dalam API. Properti timeout ini mengambil alih properti penyedia layanan.
target
Properti ini digunakan dalam lingkungan uji unit dan lingkungan pengembangan untuk secara manual menentukan alamat penyedia layanan. Jika Anda perlu menentukan alamat penyedia berdasarkan alamat layanan yang diperlukan yang didorong oleh pusat konfigurasi, Anda dapat mengatur -Dhsf.run.mode ke 0 di sisi konsumen.
connectionNum
Opsional. Jumlah maksimum koneksi ke server. Nilai default: 1. Jika Anda perlu mentransmisikan sejumlah kecil data dengan latensi lebih pendek, atur properti ini ke nilai yang lebih besar untuk meningkatkan transaksi per detik (TPS).
clientTimeout
Periode timeout yang ditentukan oleh konsumen untuk semua metode dalam API. Satuan: milidetik. Pengaturan timeout diurutkan dalam urutan prioritas menurun berikut: consumer methodSpecials, consumer API level, provider methodSpecials, dan provider API level.
asyncallMethods
Opsional. Daftar metode untuk panggilan asinkron pada layanan. Nilai default adalah null. Ini menunjukkan bahwa semua metode digunakan untuk panggilan sinkron.
maxWaitTimeForCsAddress
Waktu selama thread diblokir untuk menunggu dorongan alamat saat layanan berlangganan. Jika tidak, alamat tidak dapat ditemukan karena alamat kosong saat layanan dipanggil. Jika alamat tidak didorong dalam waktu blokir, thread tidak menunggu dan melanjutkan inisialisasi. Perhatikan hal berikut: Parameter ini digunakan untuk memanggil hanya satu layanan saat aplikasi diinisialisasi. Kami sarankan Anda tidak menggunakan parameter ini ketika tidak ada layanan lain yang perlu dipanggil. Ini karena parameter ini memperpanjang waktu startup.
Contoh konfigurasi properti konsumen layanan:
<hsf:consumer id="service" interface="com.taobao.edas.service.SimpleService" version="1.1.0" clientTimeout="3000" target="10.1.6.57:12200?_TIMEOUT=1000" maxWaitTimeForCsAddress="5000"> <hsf:methodSpecials> <hsf:methodSpecial name="sum" timeout="2000" ></hsf:methodSpecial> </hsf:methodSpecials> </hsf:consumer>
Jalankan layanan di lingkungan lokal Anda
Setelah pengembangan kode dan API serta konfigurasi layanan selesai, Anda dapat menjalankan layanan menggunakan Ali-Tomcat di Eclipse atau IntelliJ IDEA. Untuk informasi lebih lanjut, lihat Instal Ali-Tomcat dan Pandora dan konfigurasikan lingkungan pengembangan.
Saat mengonfigurasi lingkungan pengembangan, Anda dapat menambahkan properti startup JVM berikut untuk mengubah perilaku HSF.
Properti | Deskripsi |
-Dhsf.server.port | Port yang terikat pada layanan startup HSF. Nilai default: 12200. |
-Dhsf.serializer | Metode serialisasi HSF. Nilai default: Hessian. |
-Dhsf.server.max.poolsize | Ukuran maksimum thread pool penyedia HSF. Nilai default: 720. |
-Dhsf.server.min.poolsize | Ukuran minimum thread pool penyedia HSF. Nilai default: 50. |
-DHSF_SERVER_PUB_HOST | Alamat IP untuk menyediakan layanan melalui Internet. Jika properti ini tidak ditentukan, nilai -Dhsf.server.ip digunakan. |
-DHSF_SERVER_PUB_PORT | Port untuk menyediakan layanan melalui Internet. Harus didengarkan di host lokal dan dapat diakses. Secara default, nilai -Dhsf.server.port digunakan. Jika -Dhsf.server.port tidak dikonfigurasi, nilai defaultnya adalah 12200. |
Kueri layanan HSF di lingkungan lokal Anda
Sebagai contoh, layanan Anda didaftarkan dan ditemukan menggunakan pusat konfigurasi ringan. Saat mengembangkan dan men-debug aplikasi, Anda dapat menanyakan layanan yang disediakan atau dipanggil oleh aplikasi di konsol EDAS.
Dalam contoh ini, Anda memulai pusat konfigurasi EDAS pada instance Elastic Compute Service (ECS) dengan alamat IP 192.168.XX.XX.
Akses
http://192.168.xx.xx:8080/.Di panel navigasi sebelah kiri, klik Services. Tentukan parameter Nama Layanan, Pengelompokan, atau IP untuk mencari penyedia layanan dan pemanggil.
CatatanSetelah pusat konfigurasi dimulai, alamat kartu antarmuka jaringan (NIC) pertama digunakan sebagai alamat penemuan layanan secara default. Jika instance ECS Anda memiliki beberapa NIC, konfigurasikan variabel SERVER_IP dalam skrip startup untuk mengikat alamat.
Kasus kueri umum
Tab Penyedia
Masukkan alamat IP di kotak pencarian dan klik ikon search untuk menanyakan layanan yang disediakan oleh host dari alamat IP tertentu.
Di kotak pencarian, masukkan nama layanan atau nama grup layanan untuk mencari alamat IP host yang menyediakan layanan.
Tab Pemanggil
Masukkan alamat IP di kotak pencarian dan klik ikon search untuk menanyakan layanan yang dipanggil oleh host dari alamat IP tertentu.
Di kotak pencarian, masukkan nama layanan atau nama grup layanan untuk mencari alamat IP host yang memanggil layanan.
Deploy aplikasi ke SAE
Aplikasi lokal yang menggunakan pusat konfigurasi ringan dapat langsung dideploy ke SAE. Registri secara otomatis diganti dengan registri SAE tanpa modifikasi.
Untuk membuat paket WAR yang dapat berjalan di EDAS Container, Anda harus menambahkan plugin pengemasan Maven berikut.
Tambahkan konfigurasi plugin pengemasan berikut ke file pom.xml:
<build> <finalName>itemcenter</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> </plugin> </plugins> </build>Jalankan perintah mvn clean package untuk mengemas program lokal Anda menjadi paket WAR.
Pilih EDAS Container sebagai lingkungan runtime aplikasi.
Untuk informasi lebih lanjut, lihat Deploy aplikasi ke SAE.