Tutorial ini menjelaskan cara membuat penyedia (provider) dan konsumen (consumer) layanan Dubbo menggunakan anotasi Spring Boot serta Nacos sebagai service registry, lalu menerapkannya ke Enterprise Distributed Application Service (EDAS). Anda dapat memilih registry dan mengelola konfigurasi sesuai kebutuhan bisnis Anda.
Jika Anda sudah memiliki aplikasi Dubbo berbasis Spring Boot, lewati topik ini dan terapkan aplikasi tersebut langsung ke EDAS.
Memulai cepat dengan proyek demo
Klon repositori demo yang telah disiapkan untuk melewati pengaturan manual:
git clone https://github.com/aliyun/alibabacloud-microservice-demo.git
cd alibabacloud-microservice-demo/microservice-doc-demo/dubbo-samples-spring-bootAtau, unduh arsip ZIP. Demo untuk tutorial ini berada di alibabacloud-microservice-demo/microservice-doc-demo/dubbo-samples-spring-boot.
Untuk membuat kerangka proyek Spring Boot baru dengan dependensi yang telah dikonfigurasi sebelumnya, gunakan Cloud Native App Initializer.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Maven terinstal dengan variabel lingkungan yang dikonfigurasi
Nacos Server versi terbaru telah diunduh dan dijalankan dalam mode standalone:
Ekstrak paket Nacos Server yang telah diunduh.
Buka direktori
nacos/bin.Jalankan server:
Linux, UNIX, atau macOS: Jalankan
sh startup.sh -m standalone.Windows: Di
startup.cmd, aturset MODE="standalone", lalu jalankan file tersebut.
(Opsional) Interkoneksi antara aplikasi on-premises dan cloud telah dikonfigurasi
Buat penyedia layanan
Langkah 1: Siapkan proyek Maven
Buat proyek Maven bernama spring-boot-dubbo-provider dan tambahkan dependensi berikut ke pom.xml. Contoh ini menggunakan Spring Boot 2.0.6.RELEASE.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>Langkah 2: Definisikan antarmuka layanan
Di src/main/java, buat package com.alibaba.edas.boot dan tambahkan antarmuka IHelloService:
package com.alibaba.edas.boot;
public interface IHelloService {
String sayHello(String str);
}Langkah 3: Implementasikan layanan
Di package yang sama, buat IHelloServiceImpl untuk mengimplementasikan antarmuka tersebut:
package com.alibaba.edas.boot;
import com.alibaba.dubbo.config.annotation.Service;
@Service
public class IHelloServiceImpl implements IHelloService {
public String sayHello(String name) {
return "Hello, " + name + " (from Dubbo with Spring Boot)";
}
}Anotasi @Service di sini adalah com.alibaba.dubbo.config.annotation.Service dari Apache Dubbo, bukan anotasi @Service dari Spring Framework.
Langkah 4: Konfigurasi aplikasi
Buat application.properties (atau application.yaml) di src/main/resources:
# Base packages to scan Dubbo components (e.g., @Service, @Reference)
dubbo.scan.basePackages=com.alibaba.edas.boot
dubbo.application.name=dubbo-provider-demo
dubbo.registry.address=nacos://127.0.0.1:8848Tabel berikut menjelaskan setiap properti.
| Properti | Deskripsi |
|---|---|
dubbo.scan.basePackages | Package yang dipindai untuk mencari com.alibaba.dubbo.config.annotation.Service dan com.alibaba.dubbo.config.annotation.Reference. Pisahkan beberapa package dengan koma (,). Wajib diisi; tidak ada nilai default. |
dubbo.application.name | Nama aplikasi yang didaftarkan ke Nacos. Wajib diisi; tidak ada nilai default. |
dubbo.registry.address | Harus diawali dengan nacos://, diikuti alamat IP dan port Nacos Server. Untuk pengembangan lokal, gunakan 127.0.0.1:8848. Saat Anda menerapkan ke EDAS dengan registry yang dikelola EDAS, EDAS akan mengganti alamat ini secara otomatis. Untuk registry Nacos yang dikelola sendiri, ganti nilai ini dengan alamat registry Anda. Wajib diisi; tidak ada nilai default. |
Langkah 5: Buat kelas entri aplikasi
package com.alibaba.edas.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DubboConsumer {
public static void main(String[] args) {
SpringApplication.run(DubboConsumer.class, args);
}
}Langkah 6: Verifikasi penyedia layanan
Buka konsol Nacos di http://127.0.0.1:8848 dan klik Services pada panel navigasi kiri. Pastikan com.alibaba.edas.boot.IHelloService muncul dalam daftar layanan dengan grup layanan dan alamat IP penyedia yang benar.
Buat konsumen layanan
Langkah 1: Siapkan proyek Maven
Buat proyek Maven bernama spring-boot-dubbo-consumer dan tambahkan dependensi berikut ke pom.xml. Contoh ini menggunakan Spring Boot 2.0.6.RELEASE.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>Spring Boot 1.x telah mencapai akhir masa dukungan pada Agustus 2019. Jika Anda harus menggunakan Spring Boot 1.x, gunakan versi 1.5.x dengan com.alibaba.boot:dubbo-spring-boot-starter versi 0.1.0. Kami menyarankan untuk melakukan upgrade ke versi yang lebih baru.
Langkah 2: Definisikan antarmuka layanan
Di src/main/java, buat package com.alibaba.edas.boot dan tambahkan antarmuka IHelloService yang sama seperti pada penyedia layanan:
package com.alibaba.edas.boot;
public interface IHelloService {
String sayHello(String str);
}Langkah 3: Implementasikan pemanggilan layanan
Buat REST controller yang memanggil layanan Dubbo jarak jauh:
package com.alibaba.edas.boot;
import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoConsumerController {
@Reference
private IHelloService demoService;
@RequestMapping("/sayHello/{name}")
public String sayHello(@PathVariable String name) {
return demoService.sayHello(name);
}
}Anotasi @Reference adalah com.alibaba.dubbo.config.annotation.Reference dari Apache Dubbo.
Langkah 4: Konfigurasi aplikasi
Tambahkan properti berikut ke application.properties atau application.yaml:
dubbo.application.name=dubbo-consumer-demo
dubbo.registry.address=nacos://127.0.0.1:8848| Properti | Deskripsi |
|---|---|
dubbo.application.name | Nama aplikasi yang didaftarkan ke Nacos. Wajib diisi; tidak ada nilai default. |
dubbo.registry.address | Harus diawali dengan nacos://, diikuti alamat IP dan port Nacos Server. Ganti 127.0.0.1 dengan alamat Nacos Server Anda jika berjalan di mesin berbeda. Wajib diisi; tidak ada nilai default. |
Langkah 5: Buat kelas entri aplikasi
package com.alibaba.edas.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DubboConsumer {
public static void main(String[] args) {
SpringApplication.run(DubboConsumer.class, args);
}
}Langkah 6: Verifikasi konsumen layanan
Buka konsol Nacos di http://127.0.0.1:8848 dan klik Services pada panel navigasi kiri. Pastikan com.alibaba.edas.boot.IHelloService muncul dalam daftar layanan dengan grup layanan dan alamat IP pemanggil yang benar.
Uji pengaturan lokal
Setelah penyedia dan konsumen layanan berjalan, kirim permintaan uji:
Halo, EDAS (dari Dubbo dengan Spring Boot)Tanggapan yang diharapkan:
Hello, EDAS (from Dubbo with Spring Boot)Terapkan ke EDAS
Application Configuration Management (ACM), yang terintegrasi dalam EDAS, menyediakan versi komersial Nacos. Saat Anda menerapkan ke EDAS, alamat Nacos Server lokal (127.0.0.1:8848) akan diganti secara otomatis dengan alamat registry yang dikelola.
EDAS mendukung penerapan ke jenis kluster berikut. Pilih jenis kluster dan metode penerapan sesuai kebutuhan Anda.
| Jenis kluster | Dokumentasi |
|---|---|
| Elastic Compute Service (ECS) | Terapkan ke kluster ECS |
| Container Service for Kubernetes (ACK) | Terapkan ke kluster Kubernetes |
Paket aplikasi untuk penerapan melalui konsol
Untuk menerapkan melalui konsol EDAS, tambahkan plugin Spring Boot Maven ke pom.xml dan bangun paket JAR sebelum mengunggah.
Penyedia pom.xml:
<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.edas.boot.DubboProvider</mainClass>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>Consumer pom.xml:
<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.edas.boot.DubboConsumer</mainClass>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>Bangun paket JAR:
mvn clean packageCatatan migrasi
Hindari penggunaan edas-dubbo-extension untuk menerapkan aplikasi Dubbo ke EDAS. Ekstensi ini tidak mendukung fitur EDAS seperti tata kelola layanan Dubbo. Migrasikan ke Nacos sebagai gantinya.