Este tutorial demonstra como criar um provedor e um consumidor de serviços Dubbo usando anotações do Spring Boot e o Nacos como registro de serviços para, em seguida, implantar no Enterprise Distributed Application Service (EDAS). Escolha o registro e gerencie as configurações conforme as necessidades do seu negócio.
Se você já tem uma aplicação Dubbo baseada em Spring Boot, ignore este tópico e implante a aplicação diretamente no EDAS.
Início rápido com o projeto de demonstração
Clone a demonstração pré-construída para evitar a configuração manual:
git clone https://github.com/aliyun/alibabacloud-microservice-demo.git
cd alibabacloud-microservice-demo/microservice-doc-demo/dubbo-samples-spring-boot
Alternativamente, baixe o arquivo ZIP. A demonstração deste tutorial está em alibabacloud-microservice-demo/microservice-doc-demo/dubbo-samples-spring-boot.
Para gerar um novo projeto Spring Boot com as dependências necessárias pré-configuradas, use o Cloud Native App Initializer.
Pré-requisitos
Antes de começar, verifique se você tem:
O Maven instalado e com as variáveis de ambiente configuradas
-
A versão mais recente do Nacos Server baixada e iniciada no modo standalone:
Extraia o pacote do Nacos Server baixado.
Acesse o diretório
nacos/bin.-
Inicie o servidor:
Linux, UNIX ou macOS: Execute
sh startup.sh -m standalone.Windows: No arquivo
startup.cmd, definaset MODE="standalone"e execute o arquivo.
(Opcional) Interconexão entre aplicações locais e na nuvem configurada
-
Opcional:
Use o Cloud-native App Scaffolding para criar um projeto Spring Boot. Para mais informações, consulte Detalhes.
Durante o desenvolvimento local, use o plug-in Alibaba Cloud Toolkit para permitir chamadas mútuas entre aplicações locais e aplicações implantadas no EDAS (interconexão ponta a nuvem). Assim, você evita configurar uma VPN e aumenta a eficiência do desenvolvimento. Para mais informações, consulte Visão geral da interconexão ponta a nuvem.
Crie um provedor de serviços
Etapa 1: Configure o projeto Maven
Crie um projeto Maven chamado spring-boot-dubbo-provider e adicione as seguintes dependências ao arquivo pom.xml. Este exemplo usa o 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</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>
Etapa 2: Defina a interface de serviço
Em src/main/java, crie o pacote com.alibaba.edas.boot e adicione a interface IHelloService:
package com.alibaba.edas.boot;
public interface IHelloService {
String sayHello(String str);
}
Etapa 3: Implemente o serviço
No mesmo pacote, crie a classe IHelloServiceImpl para implementar a interface:
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)";
}
}
A anotação @Service usada aqui é com.alibaba.dubbo.config.annotation.Service do Apache Dubbo, não a anotação @Service do Spring Framework.
Etapa 4: Configure a aplicação
Crie o arquivo application.properties (ou application.yaml) em 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:8848
A tabela a seguir descreve cada propriedade.
|
Propriedade |
Descrição |
|
|
Pacotes a serem verificados em busca de |
|
|
Nome da aplicação registrado no Nacos. Obrigatório; sem valor padrão. |
|
|
Deve começar com |
Etapa 5: Crie a classe de entrada da aplicação
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);
}
}
Etapa 6: Verifique o provedor
Abra o console do Nacos em http://127.0.0.1:8848 e clique em Services no painel de navegação à esquerda. Confirme se com.alibaba.edas.boot.IHelloService aparece na lista de serviços com o grupo de serviços e o endereço IP do provedor corretos.
Crie um consumidor de serviços
Etapa 1: Configure o projeto Maven
Crie um projeto Maven chamado spring-boot-dubbo-consumer e adicione as seguintes dependências ao arquivo pom.xml. Este exemplo usa o 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>
O Spring Boot 1.x atingiu o fim da vida útil em agosto de 2019. Se for necessário usar o Spring Boot 1.x, utilize a versão 1.5.x com com.alibaba.boot:dubbo-spring-boot-starter versão 0.1.0. Recomendamos atualizar para uma versão mais recente.
Etapa 2: Defina a interface de serviço
Em src/main/java, crie o pacote com.alibaba.edas.boot e adicione a mesma interface IHelloService usada no provedor:
package com.alibaba.edas.boot;
public interface IHelloService {
String sayHello(String str);
}
Etapa 3: Implemente a chamada de serviço
Crie um controlador REST que chame o serviço Dubbo remoto:
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);
}
}
A anotação @Reference é com.alibaba.dubbo.config.annotation.Reference do Apache Dubbo.
Etapa 4: Configure a aplicação
Adicione as seguintes propriedades ao arquivo application.properties ou application.yaml:
dubbo.application.name=dubbo-consumer-demo
dubbo.registry.address=nacos://127.0.0.1:8848
|
Propriedade |
Descrição |
|
|
Nome da aplicação registrado no Nacos. Obrigatório; sem valor padrão. |
|
|
Deve começar com |
Etapa 5: Crie a classe de entrada da aplicação
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);
}
}
Etapa 6: Verifique o consumidor
Abra o console do Nacos em http://127.0.0.1:8848 e clique em Services no painel de navegação à esquerda. Confirme se com.alibaba.edas.boot.IHelloService aparece na lista de serviços com o grupo de serviços e o endereço IP do chamador corretos.
Teste a configuração local
Depois que o provedor e o consumidor estiverem em execução, envie uma solicitação de teste:
curl http://localhost:8080/sayHello/EDAS
Resposta esperada:
Hello, EDAS (from Dubbo with Spring Boot)
Implante no EDAS
O Application Configuration Management (ACM), integrado ao EDAS, fornece uma versão comercial do Nacos. Ao implantar no EDAS, o sistema substitui automaticamente o endereço do Nacos Server local (127.0.0.1:8848) pelo endereço do registro gerenciado.
O EDAS oferece suporte à implantação nos seguintes tipos de cluster. Escolha o tipo de cluster e o método de implantação adequados às suas necessidades.
|
Tipo de cluster |
Documentação |
|
Elastic Compute Service (ECS) |
|
|
Container Service for Kubernetes (ACK) |
Empacote a aplicação para implantação via console
Para implantar pelo console do EDAS, adicione o plug-in Maven do Spring Boot ao arquivo pom.xml e gere o pacote JAR antes de fazer o upload.
**Arquivo pom.xml do Provedor:**
<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>
**Arquivo pom.xml do Consumidor:**
<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>
Gere o pacote JAR:
mvn clean package
Nota sobre migração
Evite usar edas-dubbo-extension para implantar aplicações Dubbo no EDAS. Essa extensão não oferece suporte a recursos do EDAS, como governança de serviços Dubbo. Migre para o Nacos.