Este tópico orienta você na criação local de uma aplicação de exemplo de microsserviço Dubbo com configuração XML e na sua implantação no Serverless App Engine (SAE). A aplicação é composta por um provedor de serviço e um consumidor de serviço, ambos utilizando o Nacos como registro de serviço. Após a implantação, o SAE substitui automaticamente o endereço do registro Nacos local, sem necessidade de alterações na configuração.
Pré-requisitos
Antes de começar, certifique-se de ter:
Maven instalado e configurado nas variáveis de ambiente
Um Nacos Server local executando em modo standalone (veja as etapas abaixo)
Configure o Nacos Server
Baixe e descompacte o pacote do Nacos Server.
-
Acesse o diretório
nacos/bine inicie o Nacos Server:Linux, Unix ou macOS: ``
bash sudo sh startup.sh -m standalone``Windows: ``
bash startup.cmd -m standalone``
standaloneinicia o Nacos em modo standalone, em vez de modo cluster. Se clicar duas vezes nostartup.cmdno Windows falhar, abra o arquivo e definaMODE="standalone"manualmente. Para detalhes, consulte Quick Start for Nacos .
Nota sobre versão: O Dubbo 2.7.x e o Dubbo 3.0.x atingiram o fim da vida útil em março de 2023. Este tópico utiliza o Dubbo 3.2.15.
Etapa 1: Crie um provedor
Crie um projeto Maven localmente, defina a interface de serviço, configure o registro de serviço baseado em XML e inicie o provedor.
1,1 Crie um projeto Maven e adicionar dependências
Utilize uma IDE (como IntelliJ IDEA ou Eclipse) para criar um projeto Maven.
-
Adicione as seguintes dependências ao
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>
1,2 Definir a interface de serviço
Todos os serviços Dubbo são definidos por meio de interfaces.
Em
src/main/java, crie o pacotecom.alibaba.edas.-
Dentro de
com.alibaba.edas, crie a interfaceIHelloService:package com.alibaba.edas; public interface IHelloService { String sayHello(String str); } -
Ainda em
com.alibaba.edas, crie a classe de implementaçãoIHelloServiceImpl:package com.alibaba.edas; public class IHelloServiceImpl implements IHelloService { public String sayHello(String str) { return "hello " + str; } }
1,3 Configure o serviço Dubbo
No diretório
src/main/resources, crie o arquivoprovider.xml.-
Adicione os namespaces XML do Spring e do 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"> -
Exponha a interface de serviço e aponte para o Nacos Server local:
Item
Valor
Observação
Endereço do registro
nacos://127.0.0.1:8848Aponta para o seu Nacos Server local. Após a implantação no SAE, este endereço é substituído automaticamente pelo registro gerenciado pelo SAE — nenhuma alteração de código é necessária.
Porta do Nacos
8848Fixa; não altere.
<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"/> <dubbo:registry address="nacos://127.0.0.1:8848" />Configuração principal:
1,4 Iniciar o provedor
-
Em
com.alibaba.edas, crie a classeProvider: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(); } } Execute o método main da classe
Providerpara iniciar o serviço.
Verifique o provedor
Faça login no console do Nacos em http://127.0.0.1:8848. No painel de navegação à esquerda, clique em Service List.
O serviço com.alibaba.edas.IHelloService aparece na lista, juntamente com seu Service Group e Provider IP.
Etapa 2: Crie um consumidor
Crie um projeto Maven separado para o consumidor, assine o serviço do provedor e verifique se a chamada funciona localmente.
2,1 Crie um projeto Maven e adicionar dependências
Siga as mesmas etapas da Etapa 1,1 para criar um projeto Maven e adicione as mesmas três dependências ao pom.xml.
2,2 Definir a interface de serviço
Em
src/main/java, crie o pacotecom.alibaba.edas.-
Dentro de
com.alibaba.edas, crie a mesma interfaceIHelloService:package com.alibaba.edas; public interface IHelloService { String sayHello(String str); }
Em produção, defina a interface em um módulo compartilhado e referencie-a tanto no provedor quanto no consumidor por meio de dependências Maven. A duplicação da interface aqui serve apenas para fins de demonstração.
2,3 Configure o serviço Dubbo
No diretório
src/main/resources, crie o arquivoconsumer.xml.-
Adicione os namespaces XML do Spring e do Dubbo (igual ao
provider.xml):<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"> -
Assine o serviço do provedor:
<dubbo:application name="demo-consumer"/> <dubbo:registry address="nacos://127.0.0.1:8848"/> <dubbo:reference id="helloService" interface="com.alibaba.edas.IHelloService"/>
2,4 Iniciar o consumidor
-
Em
com.alibaba.edas, crie a classeConsumer: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(); } } } } Execute o método main da classe
Consumerpara iniciar o serviço.
Verifique o consumidor
Após a inicialização, o console imprime continuamente:
hello world
Essa saída confirma que o consumidor está chamando o provedor com sucesso.
Faça login no console do Nacos em http://127.0.0.1:8848 e clique em Services no painel de navegação à esquerda. Selecione Callers.
O serviço com.alibaba.edas.IHelloService aparece na lista, juntamente com seu Service Group e Subscriber IP.
Etapa 3: Implantar no SAE
Empacote o provedor e o consumidor como arquivos JAR executáveis e implante-os no SAE.
3,1 Adicionar o plugin de build
Adicione a seguinte configuração de <build> ao pom.xml de cada projeto:
-
Provider — defina
mainClasscomocom.alibaba.sae.Provider:<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> -
Consumer — defina
mainClasscomocom.alibaba.sae.Consumer:<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>
3,2 Gerar os pacotes JAR
No diretório de cada projeto, execute:
mvn clean package
Isso gera um JAR executável no diretório target/.
3,3 Implantar no SAE
Implante ambos os pacotes JAR no SAE. Para etapas de implantação, consulte Implantar uma aplicação Java.
Após a implantação, o SAE substitui automaticamente o endereço do registro Nacos local ( nacos://127.0.0.1:8848 ) pelo endereço do registro de serviço gerenciado pelo SAE. Nenhuma alteração nos arquivos de configuração é necessária.
Próximos passos
Implantar uma aplicação Java — opções completas de implantação para aplicações baseadas em JAR no SAE