Dalam tutorial ini, Anda membuat registrasi layanan di Microservices Engine (MSE) untuk aplikasi Apache Dubbo dan menggunakannya untuk pendaftaran serta penemuan layanan. Di akhir tutorial, konsumen Dubbo yang berjalan di mesin lokal Anda memanggil penyedia yang ditemukannya melalui registri Nacos MSE.
Arsitektur
Aplikasi contoh merupakan aplikasi layanan mikro Dubbo yang terdiri dari penyedia dan konsumen. Kedua peran tersebut dikembangkan sebagai dua proyek Maven terpisah di mesin lokal Anda dan keduanya terhubung ke instans registri yang sama di MSE melalui titik akhir publiknya.
Proyek penyedia — Mengekspos antarmuka
com.alibaba.mse.IHelloServicesebagai layanan Dubbo pada Port 28082 dan mendaftarkan layanan tersebut ke instans registri di MSE.Proyek konsumen — Berlangganan ke
com.alibaba.mse.IHelloServicemelalui instans registri yang sama dan memanggil penyedia.Instans registri di MSE — Berperan sebagai registrasi layanan tempat penyedia mendaftar dan konsumen berlangganan.
Jenis registri
MSE dapat menghost registri layanan Nacos, ZooKeeper, atau Eureka untuk aplikasi Dubbo. Tutorial ini menggunakan MSE Nacos, dan setiap contoh konfigurasi dalam topik ini ditujukan untuk instans MSE Nacos.
Nacos (digunakan dalam tutorial ini) — Atur alamat registri Dubbo ke titik akhir publik instans MSE Nacos Anda. Tidak diperlukan konfigurasi khusus registri lainnya.
ZooKeeper — Jika Anda menggunakan MSE ZooKeeper sebagai registrasi layanan Anda, ganti kode registri pada Langkah 2 dengan kode yang sesuai untuk ZooKeeper. Untuk informasi lebih lanjut, lihat Catatan penggunaan.
Prasyarat
Unduh Maven dan atur variabel lingkungan.
IDE, seperti IntelliJ IDEA atau Eclipse, telah terinstal di mesin lokal Anda.
Instans MSE Nacos. Untuk petunjuknya, lihat Buat instans engine Nacos.
Buat namespace. Tutorial ini menggunakan namespace default,
Public.
Langkah 1: Buat proyek penyedia dan definisikan layanan
Pada langkah ini, Anda membuat proyek Maven untuk penyedia dan mendefinisikan layanan yang diekspos oleh penyedia. Di Dubbo, semua layanan disediakan sebagai antarmuka.
Di IDE Anda, buat proyek Maven untuk penyedia.
Tambahkan dependensi
dubbodannacos-clientke filepom.xml.<dependencies> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>2.7.9</version> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.4.2</version> </dependency> </dependencies>Di direktori
src/main/java, buat paket bernamacom.alibaba.mse.Di
com.alibaba.mse, buat antarmuka bernamaIHelloServiceyang berisi metodesayHello.package com.alibaba.mse; public interface IHelloService { String sayHello(String str); }Di
com.alibaba.mse, buat kelas bernamaIHelloServiceImplyang mengimplementasikan antarmuka tersebut.package com.alibaba.mse; public class IHelloServiceImpl implements IHelloService { public String sayHello(String str) { return "hello " + str; } }
Langkah 2: Konfigurasikan penyedia untuk menggunakan MSE Nacos sebagai registri
Pada langkah ini, Anda membuat file provider.xml, yang mengekspos IHelloService sebagai layanan Dubbo dan mengarahkan penyedia ke instans MSE Nacos. Pertama-tama, dapatkan titik akhir instans tersebut karena konfigurasi registri memerlukannya.
Masuk ke Konsol MSE dan lihat titik akhir publik instans Nacos yang telah Anda buat di MSE. Titik akhir publik ditampilkan di kolom Access Method pada daftar instans dan berformat
mse.XX.nacos.mse.aliyuncs.com.Di direktori
src/main/resourcesproyek penyedia, buat file bernamaprovider.xml.Tambahkan konfigurasi berikut ke
provider.xml. Gantimse.XX.nacos.mse.aliyuncs.comdengan titik akhir publik instans Nacos Anda.<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <dubbo:application name="demo-provider"/> <dubbo:protocol name="dubbo" port="28082"/> <dubbo:service interface="com.alibaba.mse.IHelloService" ref="helloService"/> <bean id="helloService" class="com.alibaba.mse.IHelloServiceImpl"/> <dubbo:registry address="nacos://mse.XX.nacos.mse.aliyuncs.com:8848" /> </beans>
Tabel berikut menjelaskan konfigurasi dalam provider.xml.
| Elemen | Deskripsi |
xmlns, xmlns:xsi, xmlns:dubbo, dan xsi:schemaLocation | Mendeklarasikan Spring XML Namespace (xmlns) dan XML Schema Instance (xmlns:xsi), serta Dubbo Namespace (xmlns:dubbo) dan Schema Instance (xsi:schemaLocation). |
dubbo:application | Nama aplikasi penyedia. Contoh ini menggunakan demo-provider. |
dubbo:protocol | Menerbitkan layanan melalui protokol dubbo pada Port 28082. |
dubbo:service dan bean | Mengekspos antarmuka IHelloService dan kelas implementasi IHelloServiceImpl sebagai layanan Dubbo. |
dubbo:registry | Menentukan instans Nacos yang Anda buat di MSE sebagai registrasi layanan. Alamatnya adalah titik akhir publik instans tersebut. |
Langkah 3: Izinkan penyedia mengakses instans MSE
Penyedia mengakses registri melalui titik akhir publik instans MSE, sehingga daftar putih instans tersebut harus mengizinkan lalu lintas tersebut. Selesaikan langkah ini sebelum menjalankan penyedia. Jika tidak, pendaftaran akan gagal.
Di Konsol MSE, pada panel navigasi kiri, pilih . Pada halaman Instances, klik instans MSE yang telah Anda buat.
Kosongkan daftar putih instans tersebut. Jika Anda tidak menentukan alamat IP atau mask apa pun, semua alamat dapat mengakses instans tersebut. Tutorial ini menggunakan daftar putih kosong sebagai contoh. Untuk informasi lebih lanjut, lihat Atur daftar putih.
Daftar putih kosong memungkinkan semua alamat mengakses instans MSE.
Langkah 4: Jalankan penyedia dan verifikasi pendaftaran
Pada langkah ini, Anda menjalankan penyedia dan mengonfirmasi di Konsol MSE bahwa layanan telah terdaftar di instans Nacos.
Di
com.alibaba.mse, buat kelas bernamaProvider. Gunakan kode berikut untuk memuat konteks Spring di metodemainProviderdan mengekspos layanan Dubbo yang telah Anda konfigurasikan.package com.alibaba.mse; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Provider { public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"provider.xml"}); context.start(); System.in.read(); } }Jalankan metode
mainProvideruntuk memulai layanan. Biarkan proses tetap berjalan hingga Anda menyelesaikan tutorial ini, karena konsumen akan memanggil proses ini.Di Konsol MSE, pada halaman detail instans MSE Anda, pilih pada panel navigasi kiri.
Verifikasi bahwa daftar layanan berisi
com.alibaba.mse.IHelloService, yaitu antarmuka yang diekspos oleh aplikasidemo-provider.
Jangan lanjutkan ke langkah berikutnya hingga antarmuka tersebut muncul di daftar layanan. Jika antarmuka tidak muncul, periksa konfigurasi berikut:
Daftar putih — Daftar putih instans MSE mengizinkan alamat mesin lokal Anda. Daftar putih kosong mengizinkan semua alamat.
Alamat registri — Alamat
dubbo:registrydiprovider.xmlmenggunakan titik akhir publik instans Anda, bukan placeholdermse.XX.nacos.mse.aliyuncs.com.Jenis registri — Alamat
dubbo:registrymenggunakan skema jenis instans yang Anda buat, sepertinacos://untuk instans MSE Nacos.
Langkah 5: Buat konsumen dan berlangganan ke layanan
Pada langkah ini, Anda membuat proyek Maven kedua untuk konsumen, berlangganan ke com.alibaba.mse.IHelloService melalui instans MSE Nacos yang sama, dan mengimplementasikan kelas yang memanggil penyedia.
Di IDE Anda, buat proyek Maven kedua untuk konsumen.
Tambahkan dependensi
dubbodannacos-clientke filepom.xmlproyek konsumen. Dependensinya identik dengan proyek penyedia pada Langkah 1.Di direktori
src/main/java, buat paketcom.alibaba.msedan tambahkan antarmukaIHelloServiceyang telah Anda definisikan di Langkah 1. Konsumen mereferensikan layanan melalui antarmukanya, sehingga antarmuka tersebut harus ada di classpath proyek konsumen.Di direktori
src/main/resourcesproyek konsumen, buat file bernamaconsumer.xml. Gantimse.XX.nacos.mse.aliyuncs.comdengan titik akhir publik instans Nacos Anda, yaitu titik akhir yang sama yang telah Anda konfigurasikan diprovider.xml.<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <dubbo:application name="demo-consumer"/> <dubbo:registry address="nacos://mse.XX.nacos.mse.aliyuncs.com:8848" /> <dubbo:reference id="helloService" interface="com.alibaba.mse.IHelloService"/> </beans>Elemen
dubbo:registrymengarahkan konsumen ke registri yang sama dengan penyedia, dan elemendubbo:referenceberlangganan ke antarmukacom.alibaba.mse.IHelloServiceyang diekspos oleh penyedia.Di
com.alibaba.mse, buat kelas bernamaConsumer. Gunakan kode berikut untuk memuat konteks Spring di metodemainConsumerdan memanggil metodesayHellodari layanan yang telah berlangganan.package com.alibaba.mse; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Consumer { public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"consumer.xml"}); context.start(); IHelloService helloService = (IHelloService) context.getBean("helloService"); System.out.println(helloService.sayHello("mse")); } }
Langkah 6: Verifikasi pemanggilan dari konsumen ke penyedia
Pada langkah ini, Anda mengonfirmasi bahwa konsumen menemukan penyedia melalui registri MSE Nacos dan menerima tanggapan dari metode sayHello. Konsumen meneruskan mse sebagai argumen, dan IHelloServiceImpl mengembalikan hello diikuti argumen tersebut.
Konfirmasi bahwa proses penyedia yang telah Anda jalankan di Langkah 4 masih berjalan.
Jalankan metode
mainConsumer.Periksa output konsol proyek konsumen. Output berikut menunjukkan bahwa konsumen berhasil memanggil penyedia:
hello mse
Jika pemanggilan gagal atau tidak ada output yang dikembalikan, periksa konfigurasi berikut:
Ketersediaan penyedia — Proses penyedia sedang berjalan, dan
com.alibaba.mse.IHelloServicemuncul di daftar layanan instans MSE.Alamat registri — Alamat
dubbo:registrydiconsumer.xmladalah titik akhir publik yang telah Anda konfigurasikan diprovider.xml.Nama antarmuka — Antarmuka dalam elemen
dubbo:referencepadaconsumer.xmlcocok dengancom.alibaba.mse.IHelloService, yaitu antarmuka dalam elemendubbo:servicepadaprovider.xml.Daftar putih — Daftar putih instans MSE mengizinkan alamat mesin lokal Anda.