Topik ini menjelaskan cara mengembangkan contoh aplikasi layanan mikro Dubbo secara lokal menggunakan konfigurasi XML, lalu menerapkannya ke Serverless App Engine (SAE). Contoh aplikasi ini mencakup penyedia layanan (Provider) dan konsumen layanan (Consumer).
Persiapan
Unduh Maven dan atur variabel lingkungan.
Mulai Server Nacos.
Unduh dan ekstrak paket Server Nacos.
Pergi ke direktori nacos/bin dan mulai Server Nacos.
Linux, Unix, atau macOS: Jalankan perintah
sudo sh startup.sh -m standalone.Windows: Jalankan perintah
startup.cmd -m standalone.
Catatanstandalonemenunjukkan bahwa file startup.cmd dijalankan dalam mode mandiri, bukan Mode kluster. Secara default, file startup.cmd dimulai dalam Mode kluster. Jika Anda mengklik dua kali file startup.cmd untuk menjalankan file tersebut di sistem Windows, startup gagal. Dalam kasus ini, Anda harus mengonfigurasiMODE="standalone"di file startup.cmd. Untuk informasi lebih lanjut, lihat Quick Start for Nacos.
Panduan versi
Siklus hidup Dubbo 2.7.x dan Dubbo 3.0.x berakhir pada Maret 2023. Kami merekomendasikan Anda menggunakan versi yang lebih baru untuk mengembangkan aplikasi Anda. Topik ini menggunakan Dubbo 3.2.15 sebagai contoh untuk menjelaskan cara meng-host aplikasi Dubbo di SAE.
Langkah 1: Buat penyedia
Buat proyek aplikasi penyedia di lingkungan lokal Anda, tambahkan dependensi, konfigurasikan pendaftaran dan penemuan layanan, serta tentukan Nacos sebagai registri layanan.
Buat proyek Maven dan tambahkan dependensi.
Gunakan IDE seperti IntelliJ IDEA atau Eclipse untuk membuat proyek Maven.
Tambahkan dependensi dubbo, dubbo-registry-nacos, dan nacos-client ke file
pom.xml.<dependencies> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>3.2.15</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-registry-nacos</artifactId> <version>3.2.15</version> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.1.1</version> </dependency> </dependencies>
Kembangkan penyedia layanan Dubbo.
Semua layanan Dubbo disediakan melalui antarmuka.
Di jalur src/main/java, buat paket
com.alibaba.edas.Di
com.alibaba.edas, buat antarmukaIHelloServiceyang berisi metodesayHello.package com.alibaba.edas; public interface IHelloService { String sayHello(String str); }Di
com.alibaba.edas, buat kelasIHelloServiceImplyang mengimplementasikan antarmuka ini.package com.alibaba.edas; public class IHelloServiceImpl implements IHelloService { public String sayHello(String str) { return "hello " + str; } }
Konfigurasikan layanan Dubbo.
Di jalur src/main/resources, buat dan buka file
provider.xml.Di file
provider.xml, tambahkan Namespace XML (xmlns) dan XML Schema Instance (xmlns:xsi) untuk Spring, serta Namespace (xmlns:dubbo) dan Schema Instance (xsi:schemaLocation) untuk Dubbo.<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">Di file
provider.xml, paparkan antarmuka dan kelas implementasi sebagai layanan Dubbo.<dubbo:application name="demo-provider"/> <dubbo:protocol name="dubbo" port="28082"/> <dubbo:service interface="com.alibaba.edas.IHelloService" ref="helloService"/> <bean id="helloService" class="com.alibaba.edas.IHelloServiceImpl"/>Di file
provider.xml, tentukan Server Nacos lokal sebagai registri layanan.<dubbo:registry address="nacos://127.0.0.1:8848" />127.0.0.1adalah alamat Server Nacos. Jika Server Nacos Anda diterapkan di server lain, ubah nilai ini menjadi alamat IP server tersebut. Setelah Anda menerapkan aplikasi ke SAE, Anda tidak perlu melakukan perubahan apa pun. Alamat registri layanan secara otomatis diganti dengan alamat registri layanan di SAE.8848adalah port untuk Server Nacos dan tidak dapat diubah.
Mulai layanan.
Di paket
com.alibaba.edas, buat kelas Provider. Di fungsi utamanya, gunakan kode berikut untuk memuat Konteks Spring dan mengekspos layanan Dubbo yang telah dikonfigurasi.package com.alibaba.edas; 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 fungsi utama Provider untuk memulai layanan.
Masuk ke konsol Nacos di
http://127.0.0.1:8848. Di panel navigasi di sebelah kiri, klik Service List untuk melihat daftar penyedia.Daftar penyedia layanan mencakup
com.alibaba.edas.IHelloService. Anda juga dapat menanyakan Service Group dan Provider IP dari layanan tersebut.
Langkah 2: Buat konsumen
Buat proyek aplikasi konsumen di lingkungan lokal Anda, tambahkan dependensi, dan konfigurasikan langganan layanan.
Buat proyek Maven dan tambahkan dependensi.
Gunakan IDE seperti IntelliJ IDEA atau Eclipse untuk membuat proyek Maven.
Tambahkan dependensi dubbo, dubbo-registry-nacos, dan nacos-client ke file
pom.xml.<dependencies> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>3.2.15</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-registry-nacos</artifactId> <version>3.2.15</version> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.1.1</version> </dependency> </dependencies>
Kembangkan konsumen layanan Dubbo.
Semua layanan Dubbo disediakan melalui antarmuka.
Di jalur src/main/java, buat paket bernama
com.alibaba.edas.Di paket
com.alibaba.edas, buat antarmukaIHelloServiceyang berisi metodesayHello.CatatanDalam kebanyakan kasus, antarmuka didefinisikan dalam modul independen. Penyedia dan konsumen kemudian merujuk ke modul yang sama menggunakan dependensi Maven. Dalam topik ini, dua antarmuka identik dibuat untuk penyedia dan konsumen. Namun, metode ini tidak direkomendasikan untuk skenario produksi.
package com.alibaba.edas; public interface IHelloService { String sayHello(String str); }
Konfigurasikan layanan Dubbo.
Di path src/main/resources, buat dan buka file
consumer.xml.Di file
consumer.xml, tambahkan Namespace XML (xmlns) dan XML Schema Instance (xmlns:xsi) untuk Spring, serta Namespace (xmlns:dubbo) dan lokasi skema (xsi:schemaLocation) untuk Dubbo.<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">Tambahkan konfigurasi berikut ke file
consumer.xmluntuk berlangganan layanan Dubbo.<dubbo:application name="demo-consumer"/> <dubbo:registry address="nacos://127.0.0.1:8848"/> <dubbo:reference id="helloService" interface="com.alibaba.edas.IHelloService"/>
Mulai dan verifikasi layanan.
Di paket
com.alibaba.edas, buat kelas `Consumer`. Di fungsi `main`, gunakan kode berikut untuk memuat Konteks Spring serta berlangganan dan mengonsumsi layanan Dubbo.package com.alibaba.edas; import org.springframework.context.support.ClassPathXmlApplicationContext; import java.util.concurrent.TimeUnit; public class Consumer { public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"consumer.xml"}); context.start(); while (true) { try { TimeUnit.SECONDS.sleep(5); IHelloService demoService = (IHelloService)context.getBean("helloService"); String result = demoService.sayHello("world"); System.out.println(result); } catch (Exception e) { e.printStackTrace(); } } } }Jalankan fungsi utama Consumer untuk memulai layanan.
Verifikasi hasilnya.
Setelah startup, konsol terus mencetak
hello world, menunjukkan bahwa layanan berhasil dikonsumsi.Masuk ke konsol Nacos di
http://127.0.0.1:8848dan klik Services di panel navigasi sebelah kiri. Di halaman Services, pilih Callers.Layanan
com.alibaba.edas.IHelloServiceakan ditampilkan. Anda juga dapat melihat Service Group dan Subscriber IP-nya.
Langkah 3: Terapkan ke SAE
Tambahkan konfigurasi berikut ke file pom.xml untuk penyedia dan konsumen. Kemudian, jalankan perintah mvn clean package untuk mengompilasi proyek lokal menjadi paket JAR yang dapat dieksekusi.
Penyedia:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> <configuration> <classifier>spring-boot</classifier> <mainClass>com.alibaba.sae.Provider</mainClass> </configuration> </execution> </executions> </plugin> </plugins> </build>Konsumen:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> <configuration> <classifier>spring-boot</classifier> <mainClass>com.alibaba.sae.Consumer</mainClass> </configuration> </execution> </executions> </plugin> </plugins> </build>
Terapkan paket aplikasi penyedia dan konsumen yang telah dikompilasi ke SAE. Untuk informasi lebih lanjut, lihat Terapkan aplikasi Java.