Use anotações do Spring Boot para criar um provedor e um consumidor de serviços Dubbo do zero, registrá-los no Nacos e implantá-los no SAE. Essa abordagem elimina a necessidade de configurações XML extensas e é um excelente ponto de partida para quem está começando com Maven ou com o framework Dubbo.
Pré-requisitos
Antes de começar, verifique se você tem:
O Maven instalado e as variáveis de ambiente configuradas
-
A versão mais recente do Nacos Server baixada e em execução no modo standalone:
Descompacte o pacote do Nacos Server.
Acesse o diretório
nacos/bin.-
Inicie o Nacos Server:
Linux, UNIX ou macOS: Execute
sh startup.sh -m standaloneWindows: Defina
set MODE="standalone"no arquivostartup.cmde execute-o
Projeto de demonstração
Siga as etapas deste tópico para criar o projeto do zero ou baixe diretamente o projeto de demonstração. Você também pode clonar o repositório:
git clone https://github.com/aliyun/alibabacloud-microservice-demo.git
O código de demonstração deste tópico está em alibabacloud-microservice-demo/microservice-doc-demo/dubbo-samples-spring-boot.
Crie um provedor de serviços
Etapa 1: Configure o projeto
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 do serviço
Todos os serviços Dubbo são expostos por meio de interfaces.
Em
src/main/java, crie um pacote chamadocom.alibaba.edas.boot.Nesse pacote, crie uma interface chamada
IHelloService:
package com.alibaba.edas.boot;
public interface IHelloService {
String sayHello(String str);
}
Etapa 3: Implemente o serviço
No pacote com.alibaba.edas.boot, crie uma classe chamada IHelloServiceImpl para implementar IHelloService:
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@Serviceusada aqui é acom.alibaba.dubbo.config.annotation.Servicefornecida pelo Dubbo, e não a anotação@Servicedo Spring.
Etapa 4: Configure o serviço Dubbo
Em src/main/resources, crie o arquivo application.properties (ou application.yaml) e adicione:
# Packages to scan for Dubbo annotations (@Service, @Reference)
dubbo.scan.basePackages=com.alibaba.edas.boot
dubbo.application.name=dubbo-provider-demo
dubbo.registry.address=nacos://127.0.0.1:8848
Os três itens de configuração são obrigatórios e nenhum tem valores padrão.
dubbo.scan.basePackages: define os pacotes que contêm as anotações@Servicee@Reference. Separe vários pacotes com vírgulas.
dubbo.registry.address: deve começar comnacos://, seguido do endereço IP e da porta do Nacos Server. Se você usar o registro gerenciado pelo SAE, o sistema substituirá automaticamente esse endereço em tempo de execução. Caso utilize uma instância Nacos autogerenciada, substitua127.0.0.1:8848pelo endereço IP e porta correspondentes.
Etapa 5: Inicie o provedor
Crie a classe principal do Spring Boot chamada DubboProvider e execute-a:
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);
}
}
Verifique o provedor
Acesse o console do Nacos em http://127.0.0.1:8848. No painel de navegação à esquerda, clique em Services. Confirme se com.alibaba.edas.boot.IHelloService aparece na lista de serviços, junto com o grupo de serviços e o endereço IP do provedor.
Crie um consumidor de serviços
Etapa 1: Configure o projeto
Crie um projeto Maven chamado spring-boot-dubbo-consumer e adicione as seguintes dependências ao arquivo pom.xml. Este exemplo também 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>
Se precisar usar o Spring Boot 1.x, utilize a versão 1.5.x com com.alibaba.boot:dubbo-spring-boot-starter:0.1.0 . O ciclo de vida do Spring Boot 1.x terminou em agosto de 2019, portanto, recomendamos fortemente o uso de uma versão mais recente.
Etapa 2: Referencie a interface do 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: Chame o serviço remoto
Crie um controlador que use a anotação @Reference para injetar o serviço remoto IHelloService e exponha-o via HTTP:
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@Referenceusada aqui é acom.alibaba.dubbo.config.annotation.Referencefornecida pelo Dubbo.
Etapa 4: Configure o consumidor
Em src/main/resources, adicione o seguinte conteúdo ao arquivo application.properties (ou application.yaml):
dubbo.application.name=dubbo-consumer-demo
dubbo.registry.address=nacos://127.0.0.1:8848
Ambos os itens de configuração são obrigatórios. Se o Nacos Server estiver em execução em um host diferente, substitua 127.0.0.1:8848 pelo endereço IP e porta reais.
Etapa 5: Inicie o consumidor
Crie a classe principal do Spring Boot chamada DubboConsumer e execute-a:
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);
}
}
Verifique o consumidor
Acesse o console do Nacos em http://127.0.0.1:8848. No painel de navegação à esquerda, clique em Services. Confirme se com.alibaba.edas.boot.IHelloService aparece na lista de serviços, junto com o grupo de serviços e o endereço IP do chamador.
Verifique a invocação do serviço
Depois de iniciar o provedor e o consumidor, envie uma solicitação de teste:
curl http://localhost:8080/sayHello/SAE
Saída esperada:
Hello, SAE (from Dubbo with Spring Boot)
Implante no SAE
O SAE substitui automaticamente o registro Nacos local pelo registro de serviços do SAE durante a execução, portanto, nenhuma alteração no código é necessária.
Antes de implantar via console, compile cada aplicação em um pacote JAR ou WAR executável:
-
Adicione o plugin de empacotamento do Maven ao arquivo
pom.xml. 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>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> Execute
mvn clean packagepara gerar o arquivo JAR.Implante o pacote no SAE. Para opções de implantação, consulte Implantação de aplicações.
Próximos passos
Hospede aplicações Dubbo no SAE — aprenda a desenvolver serviços Dubbo usando arquivos de configuração XML em vez de anotações
Implantação de aplicações — explore todos os métodos de implantação suportados pelo SAE