Neste tutorial, você cria um registro de service no Microservices Engine (MSE) para uma aplicação Apache Dubbo e o utiliza para registro e descoberta de services. Ao final, um consumidor Dubbo em execução na máquina local chama um provedor descoberto por meio de um registro Nacos do MSE.
Arquitetura
A aplicação de exemplo é uma aplicação de microsserviços Dubbo composta por um provedor e um consumidor. Você desenvolve essas duas funções como projetos Maven separados na máquina local, e ambos se conectam à mesma instância de registro no MSE pelo endpoint público.
Projeto do provedor — Expõe a interface
com.alibaba.mse.IHelloServicecomo um service Dubbo na porta 28082 e registra o service na instância de registro do MSE.Projeto do consumidor — Assina a interface
com.alibaba.mse.IHelloServicepela mesma instância de registro e chama o provedor.Instância de registro no MSE — Funciona como o registro de service onde o provedor se registra e ao qual o consumidor assina.
Tipos de registro
O MSE pode hospedar um registro de service Nacos, ZooKeeper ou Eureka para uma aplicação Dubbo. Este tutorial utiliza o MSE Nacos, e todos os exemplos de configuração neste tópico têm como alvo uma instância do MSE Nacos.
Nacos (utilizado neste tutorial) — Defina o endereço de registro do Dubbo como o endpoint público da sua instância do MSE Nacos. Nenhuma outra configuração específica de registro é necessária.
ZooKeeper — Caso utilize o MSE ZooKeeper como registro de service, substitua o código de registro na Etapa 2 pelo código correspondente ao ZooKeeper. Para mais informações, consulte Usage notes.
Pré-requisitos
Baixe o Maven e defina as variáveis de ambiente.
Tenha uma IDE instalada na máquina local, como IntelliJ IDEA ou Eclipse.
Uma instância do MSE Nacos. Para instruções, consulte Create a Nacos engine instance
Create a namespace. Este tutorial utiliza o namespace padrão,
Public.
Etapa 1: Crie o projeto do provedor e defina o service
Nesta etapa, crie o projeto Maven para o provedor e defina o service que ele expõe. No Dubbo, todos os services são fornecidos como interfaces.
Na IDE, crie um projeto Maven para o provedor.
-
Adicione as dependências
dubboenacos-clientao arquivopom.xml.<dependencies> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>2.7.9</version> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.4.2</version> </dependency> </dependencies> No diretório
src/main/java, crie um pacote chamadocom.alibaba.mse.-
Em
com.alibaba.mse, crie uma interface chamadaIHelloServicecom o métodosayHello.package com.alibaba.mse; public interface IHelloService { String sayHello(String str); } -
Em
com.alibaba.mse, crie uma classe chamadaIHelloServiceImplque implemente a interface.package com.alibaba.mse; public class IHelloServiceImpl implements IHelloService { public String sayHello(String str) { return "hello " + str; } }
Etapa 2: Configure o provedor para usar o MSE Nacos como registro
Nesta etapa, crie o arquivo provider.xml, que expõe IHelloService como um service Dubbo e aponta o provedor para a instância do MSE Nacos. Obtenha primeiro o endpoint da instância, pois a configuração do registro depende dele.
Faça login no console do MSE e visualize o endpoint público da instância Nacos criada no MSE. O endpoint público aparece na coluna Access Method da lista de instâncias e segue o formato
mse.XX.nacos.mse.aliyuncs.com.No diretório
src/main/resourcesdo projeto do provedor, crie um arquivo chamadoprovider.xml.-
Adicione a seguinte configuração ao arquivo
provider.xml. Substituamse.XX.nacos.mse.aliyuncs.compelo endpoint público da sua instância Nacos.<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"> <dubbo:application name="demo-provider"/> <dubbo:protocol name="dubbo" port="28082"/> <dubbo:service interface="com.alibaba.mse.IHelloService" ref="helloService"/> <bean id="helloService" class="com.alibaba.mse.IHelloServiceImpl"/> <dubbo:registry address="nacos://mse.XX.nacos.mse.aliyuncs.com:8848" /> </beans>
A tabela a seguir descreve a configuração no arquivo provider.xml.
|
Elemento |
Descrição |
|
|
Declara o Namespace XML do Spring (xmlns) e a Instância de Schema XML (xmlns:xsi), além do Namespace Dubbo (xmlns:dubbo) e da Instância de Schema (xsi:schemaLocation). |
|
|
Nome da aplicação provedora. Este exemplo usa |
|
|
Publica o service pelo protocolo dubbo na porta 28082. |
|
|
Expõem a interface |
|
|
Especifica a instância Nacos criada no MSE como o registro de service. O endereço corresponde ao endpoint público da instância. |
Etapa 3: Permita que o provedor acesse a instância do MSE
O provedor acessa o registro pelo endpoint público da instância do MSE, portanto, a lista de permissões da instância deve permitir esse tráfego. Conclua esta etapa antes de iniciar o provedor. Caso contrário, o registro falhará.
No console do MSE, no painel de navegação à esquerda, escolha . Na página Instances, clique em na instância do MSE que você criou.
Limpe a lista de permissões da instância. Se nenhum endereço IP ou máscara for especificado, todos os endereços poderão acessar a instância. Este tutorial usa uma lista de permissões vazia como exemplo. Para mais informações, consulte Set a whitelist.
Uma lista de permissões vazia permite que todos os endereços acessem a instância do MSE.
Etapa 4: Inicie o provedor e verifique o registro
Nesta etapa, inicie o provedor e confirme no console do MSE que o service está registrado na instância Nacos.
-
Em
com.alibaba.mse, crie uma classe chamadaProvider. Utilize o código abaixo para carregar o contexto Spring no métodomainda classeProvidere expor o service Dubbo configurado.package com.alibaba.mse; 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
mainda classeProviderpara iniciar o service. Mantenha o processo em execução até concluir o tutorial, pois o consumidor chamará esse processo.No console do MSE, na página de detalhes da sua instância do MSE, escolha no painel de navegação à esquerda.
Verifique se a lista de services contém
com.alibaba.mse.IHelloService, a interface exposta pela aplicaçãodemo-provider.
Não prossiga para a próxima etapa até que a interface apareça na lista de services. Se a interface não aparecer, verifique as seguintes configurações:
Lista de permissões — A lista de permissões da instância do MSE permite o endereço da sua máquina local. Uma lista vazia permite todos os endereços.
Endereço do registro — O endereço
dubbo:registryno arquivoprovider.xmlusa o endpoint público da sua instância, e não o placeholdermse.XX.nacos.mse.aliyuncs.com.Tipo de registro — O endereço
dubbo:registryutiliza o esquema do tipo de instância criado, comonacos://para uma instância do MSE Nacos.
Etapa 5: Crie o consumidor e assine o service
Nesta etapa, crie um segundo projeto Maven para o consumidor, assine a interface com.alibaba.mse.IHelloService pela mesma instância do MSE Nacos e implemente a classe que chama o provedor.
Na IDE, crie um segundo projeto Maven para o consumidor.
Adicione as dependências
dubboenacos-clientao arquivopom.xmldo projeto do consumidor. As dependências são idênticas às do projeto do provedor na Etapa 1.No diretório
src/main/java, crie o pacotecom.alibaba.msee adicione a interfaceIHelloServicedefinida na Etapa 1. O consumidor referencia o service pela interface, então ela deve estar no classpath do projeto do consumidor.-
No diretório
src/main/resourcesdo projeto do consumidor, crie um arquivo chamadoconsumer.xml. Substituamse.XX.nacos.mse.aliyuncs.compelo endpoint público da sua instância Nacos, o mesmo endpoint configurado no arquivoprovider.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"> <dubbo:application name="demo-consumer"/> <dubbo:registry address="nacos://mse.XX.nacos.mse.aliyuncs.com:8848" /> <dubbo:reference id="helloService" interface="com.alibaba.mse.IHelloService"/> </beans>O elemento
dubbo:registryaponta o consumidor para o mesmo registro do provedor, e o elementodubbo:referenceassina a interfacecom.alibaba.mse.IHelloServiceexposta pelo provedor. -
Em
com.alibaba.mse, crie uma classe chamadaConsumer. Use o código abaixo para carregar o contexto Spring no métodomainda classeConsumere chamar o métodosayHellodo service assinado.package com.alibaba.mse; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Consumer { public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"consumer.xml"}); context.start(); IHelloService helloService = (IHelloService) context.getBean("helloService"); System.out.println(helloService.sayHello("mse")); } }
Etapa 6: Verifique a chamada do consumidor para o provedor
Nesta etapa, confirme que o consumidor descobre o provedor pelo registro do MSE Nacos e recebe a resposta do método sayHello. O consumidor passa mse como argumento, e IHelloServiceImpl retorna hello seguido desse argumento.
Confirme se o processo do provedor iniciado na Etapa 4 ainda está em execução.
Execute o método
mainda classeConsumer.-
Verifique a saída no console do projeto do consumidor. A saída abaixo indica que o consumidor chamou o provedor com sucesso:
hello mse
Se a chamada falhar ou nenhuma saída for retornada, verifique as seguintes configurações:
Disponibilidade do provedor — O processo do provedor está em execução e
com.alibaba.mse.IHelloServiceaparece na lista de services da instância do MSE.Endereço do registro — O endereço
dubbo:registryno arquivoconsumer.xmlcorresponde ao endpoint público configurado no arquivoprovider.xml.Nome da interface — A interface no elemento
dubbo:referencedo arquivoconsumer.xmlcorresponde acom.alibaba.mse.IHelloService, que é a interface no elementodubbo:servicedo arquivoprovider.xml.Lista de permissões — A lista de permissões da instância do MSE permite o endereço da sua máquina local.