Bu öğreticide, hizmet kayıt defteri olarak Nacos ve Spring Boot açıklamalarını (annotation) kullanarak bir Dubbo hizmet sağlayıcısı ve tüketicisinin nasıl oluşturulacağı ve Enterprise Distributed Application Service (EDAS) üzerine nasıl dağıtılacağı gösterilmektedir. İş gereksinimlerinize göre bir kayıt defteri seçebilir ve yapılandırmaları yönetebilirsiniz.
Zaten Spring Boot tabanlı bir Dubbo uygulamanız varsa bu konuyu atlayıp uygulamayı doğrudan EDAS'e dağıtabilirsiniz.
Demo projesiyle hızlı başlangıç
Manuel kurulumu atlamak için önceden hazırlanmış demoyu klonlayın:
git clone https://github.com/aliyun/alibabacloud-microservice-demo.git
cd alibabacloud-microservice-demo/microservice-doc-demo/dubbo-samples-spring-boot
Alternatif olarak, ZIP arşivini indirin. Bu eğitimdeki demo, alibabacloud-microservice-demo/microservice-doc-demo/dubbo-samples-spring-boot dizininde bulunmaktadır.
Gerekli bağımlılıklar önceden yapılandırılmış yeni bir Spring Boot projesi iskelesi oluşturmak için Cloud Native App Initializer aracını kullanabilirsiniz.
Ön koşullar
Başlamadan önce şunlara sahip olduğunuzdan emin olun:
Ortam değişkenleri yapılandırılmış şekilde yüklenmiş Maven
-
En son Nacos Server indirilmiş ve tek düğümlü (standalone) modda başlatılmıştır:
İndirilen Nacos Server paketini çıkarın.
nacos/bindizinine gidin.-
Sunucuyu başlatın:
Linux, UNIX veya macOS:
sh startup.sh -m standalonekomutunu çalıştırın.Windows:
startup.cmddosyasındaset MODE="standalone"ayarını yapın ve ardından dosyayı çalıştırın.
(İsteğe bağlı) Yerel uygulamalar ile cloud uygulamaları arasında bağlantı yapılandırması
Hizmet sağlayıcı oluşturma
1. Adım: Maven projesini ayarlama
spring-boot-dubbo-provider adında bir Maven projesi oluşturun ve aşağıdaki bağımlılıkları pom.xml dosyasına ekleyin. Bu örnekte Spring Boot 2.0.6.RELEASE sürümü kullanılmaktadır.
<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</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>
2. Adım: Hizmet arayüzünü tanımlama
src/main/java dizininde com.alibaba.edas.boot paketini oluşturun ve IHelloService arayüzünü ekleyin:
package com.alibaba.edas.boot;
public interface IHelloService {
String sayHello(String str);
}
3. Adım: Hizmeti uygulama
Aynı pakette, arayüzü uygulamak için IHelloServiceImpl sınıfını oluşturun:
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)";
}
}
Buradaki @Service açıklaması, Apache Dubbo'dan gelen com.alibaba.dubbo.config.annotation.Service sınıfıdır; Spring Framework'ün @Service açıklaması değildir.
4. Adım: Uygulamayı yapılandırma
src/main/resources dizininde application.properties (veya application.yaml) dosyasını oluşturun:
# 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:8848
Aşağıdaki tabloda her bir özellik açıklanmaktadır.
| Özellik | Açıklama |
|---|---|
dubbo.scan.basePackages |
com.alibaba.dubbo.config.annotation.Service ve com.alibaba.dubbo.config.annotation.Reference bileşenlerinin taranacağı paketler. Birden fazla paketi virgül (,) ile ayırın. Zorunludur; varsayılan değer yoktur. |
dubbo.application.name |
Nacos'a kaydedilen uygulama adı. Zorunludur; varsayılan değer yoktur. |
dubbo.registry.address |
nacos:// ile başlamalı ve bunu Nacos Server IP adresi ile bağlantı noktası izlemelidir. Yerel geliştirme için 127.0.0.1:8848 kullanın. EDAS tarafından yönetilen bir kayıt defteri ile EDAS'e dağıtım yaptığınızda, EDAS bu adresi otomatik olarak değiştirir. Kendi kendinize yönettiğiniz bir Nacos kayıt defteri için bu değeri kendi kayıt defteri adresinizle değiştirin. Zorunludur; varsayılan değer yoktur. |
5. Adım: Uygulama giriş sınıfını oluşturma
package com.alibaba.edas.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DubboProvider {
public static void main(String[] args) {
SpringApplication.run(DubboProvider.class, args);
}
}
6. Adım: Sağlayıcıyı doğrulama
http://127.0.0.1:8848 adresinden Nacos konsolunu açın ve sol gezinme bölmesinde Services öğesini tıklayın. Hizmetler listesinde com.alibaba.edas.boot.IHelloService hizmetinin doğru hizmet grubu ve sağlayıcı IP adresiyle göründüğünü onaylayın.
Hizmet tüketicisi oluşturma
1. Adım: Maven projesini ayarlama
spring-boot-dubbo-consumer adında bir Maven projesi oluşturun ve aşağıdaki bağımlılıkları pom.xml dosyasına ekleyin. Bu örnekte Spring Boot 2.0.6.RELEASE sürümü kullanılmaktadır.
<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'in yaşam döngüsü Ağustos 2019'da sona ermiştir. Spring Boot 1.x kullanmanız gerekiyorsa, com.alibaba.boot:dubbo-spring-boot-starter sürüm 0.1.0 ile birlikte sürüm 1.5.x'i kullanın. Daha yeni bir sürüme yükseltmeniz önerilir.
2. Adım: Hizmet arayüzünü tanımlama
src/main/java dizininde com.alibaba.edas.boot paketini oluşturun ve sağlayıcıda kullanılan aynı IHelloService arayüzünü ekleyin:
package com.alibaba.edas.boot;
public interface IHelloService {
String sayHello(String str);
}
3. Adım: Hizmet çağrısını uygulama
Uzak Dubbo hizmetini çağıran bir REST denetleyicisi oluşturun:
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);
}
}
@Reference açıklaması, Apache Dubbo'dan gelen com.alibaba.dubbo.config.annotation.Reference sınıfıdır.
4. Adım: Uygulamayı yapılandırma
application.properties veya application.yaml dosyasına aşağıdaki özellikleri ekleyin:
dubbo.application.name=dubbo-consumer-demo
dubbo.registry.address=nacos://127.0.0.1:8848
| Özellik | Açıklama |
|---|---|
dubbo.application.name |
Nacos'a kaydedilen uygulama adı. Zorunludur; varsayılan değer yoktur. |
dubbo.registry.address |
nacos:// ile başlamalı ve bunu Nacos Server IP adresi ile bağlantı noktası izlemelidir. Nacos Server farklı bir makinede çalışıyorsa 127.0.0.1 adresini kendi Nacos Server adresinizle değiştirin. Zorunludur; varsayılan değer yoktur. |
5. Adım: Uygulama giriş sınıfını oluşturma
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);
}
}
6. Adım: Tüketiciyi doğrulama
http://127.0.0.1:8848 adresinden Nacos konsolunu açın ve sol gezinme bölmesinde Services öğesini tıklayın. Hizmetler listesinde com.alibaba.edas.boot.IHelloService hizmetinin doğru hizmet grubu ve arayan IP adresiyle göründüğünü onaylayın.
Yerel kurulumu test etme
Hem sağlayıcı hem de tüketici çalıştıktan sonra bir test isteği gönderin:
curl http://localhost:8080/sayHello/EDAS
Beklenen yanıt:
Hello, EDAS (from Dubbo with Spring Boot)
EDAS'e dağıtma
EDAS ile entegre olan Application Configuration Management (ACM), Nacos'un ticari bir sürümünü sağlar. EDAS'e dağıtım yaptığınızda, yerel Nacos Server adresini (127.0.0.1:8848) otomatik olarak yönetilen kayıt defteri adresiyle değiştirir.
EDAS, aşağıdaki küme türlerine dağıtımı destekler. Gereksinimlerinize göre bir küme türü ve dağıtım yöntemi seçin.
| Küme türü | Belgeleme |
|---|---|
| Elastic Compute Service (ECS) | ECS kümesine dağıtma |
| Container Service for Kubernetes (ACK) | Kubernetes kümesine dağıtma |
Konsol dağıtımı için uygulamayı paketleme
EDAS konsolu üzerinden dağıtım yapmak için pom.xml dosyasına Spring Boot Maven eklentisini ekleyin ve yüklemeden önce JAR paketini oluşturun.
**Sağlayıcı pom.xml dosyası:**
<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>
**Tüketici pom.xml dosyası:**
<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>
JAR paketini oluşturun:
mvn clean package
Geçiş notu
Dubbo uygulamalarını EDAS'e dağıtmak için edas-dubbo-extension kullanmaktan kaçının. Bu uzantı, Dubbo hizmet yönetimi gibi EDAS özelliklerini desteklemez. Bunun yerine Nacos'a geçiş yapın.