1. Introdução
Nos sistemas de arquitetura de microsserviços, geralmente usamos um corretor de mensagens leves para criar um tópico de mensagem comum para conectar todas as instâncias de microsserviço no sistema. Como as mensagens geradas neste tópico serão ouvidas e consumidas por todas as instâncias, chamamos de barramento de mensagens.
2. Proxy de mensagem
O corretor de mensagens é um modelo arquitetônico de verificação, transmissão e roteamento de mensagens. Ele serve como um agendamento de comunicação entre aplicativos e minimiza as dependências entre os aplicativos, para que os aplicativos possam desacoplar eficientemente os processos de comunicação. O corretor de mensagens é um produto de middleware. Seu núcleo é um programa de roteamento de mensagens usado para receber e distribuir mensagens e encaminhá -las para o aplicativo correto com base no fluxo de processamento de mensagens definido. Inclui protocolos independentes de comunicação e mensagens, permitindo a comunicação de rede dentro e entre organizações. O objetivo de criar um proxy é poder passar mensagens do aplicativo e executar algumas operações especiais. A seguir, são apresentados cenários em aplicativos corporativos, onde geralmente precisamos usar o proxy da mensagem:
Já existem muitos produtos de código aberto para todos usarem, como:
3. SpringCloud+RabbitMQ
(1) Introdução e instalação do RabbitMQ não serão detalhadas.
(2) pom.xml
<Dependences> <pendency> <voundid> org.springframework.boot </groupiD> <TRATIFACTID> Spring-boot-starter-amqp </artifactId> </dependency> <pendency> <voupid> org.springframework.boot <//Groupid> <TifactId> scring-stern-stern </dependency> </dependências>
(3) Application.yml
Spring: Aplicação: Nome: RabbitMq-Hello RabbitMQ: Host: ***. ***. ***. ***.
(4) remetente
@Component public class remeter {private static final logger log = loggerFactory.getLogger (sever.class); @Autowired Private AMQPTemplate amqPtemplate; public void send () {String context = "hello" + new Date (); log.info ("remetente:" + context); this.amqptemplate.convertandSend ("hello", contexto); }}(5) receptor
@Component @RabbitListener (fileues = "hello") Public Class Receiver {Private Static Final Logger Log = LoggerFactory.getLogger (receptor.class); @Rabbithandler public void Process (string hello) {log.info ("receptor:" + hello); }}(6) Crie a classe de configuração do RabbitMQ RabbitConfig
@Configuration public class RabbitConfig {@Bean Public Queue HelloQueue () {Return New Queue ("Hello"); }} (7) Crie uma classe de teste de unidade para chamar a produção de mensagens
@Runwith (springjunit4classrunner.class) @springboottest (classes = springcloudbusrabbitmqapplication.class) classe pública helloapplicatests {@AUTOWIRED PRIVENTE SPRINEIR DE SENVERENTE; @Test public void hello () lança a exceção {sever.send (); }} (8) Teste, execute helloApplicationTests
(9) Visite Host: 15672
4. Transforme Config-Client (integrar o ônibus Springcloud)
(1) pom.xml
<Dependences> <pendency> <voundiD> org.springframework.cloud </groupiD> <TRATIFACTID> Spring-cloud-starter-config </artifactId> </dependency> <pendenceM> <puperid> org.springframework.boot </groupid> <stifactId> <purgy-brottern> <GroupID> org.springframework.cloud </frupiid> <TRATIFACTID> Spring-Cloud-Starter-eureka </stutifactId> </dependency> <pendence> <puperid> org.springframework.cloud </groupId> <stifactId> Spring-cloud-starter-bus-amqp </ArtiftfactiM> dependência </Artiftild> dependência </Artifactid> </ArtifactId> </ArtifactId> </Artifactid> Spring-Cloud-Bus-Bus-AMQP </Artift> <PuerpId> org.springframework.boot </frugiD> <TRATIFACTID> Spring-boot-Starter-actuator </ArtifactId> </dependency> <pendence> <puperid> org.springframework.boot </groupid> <TRATIFACTID> spring-boot-scarter-testerwork.
(2) bootstrap.properties
spring.application.name=configspace spring.cloud.config.label=master spring.cloud.config.profile=dev spring.cloud.config.uri= http://localhost:5588/ eureka.client.serviceUrl.defaultZone=http://localhost:5555/eureka/ server.port=5589 spring.rabbitmq.host = 118.89.237.88 spring.rabbitmq.port = 5672 spring.rabbitmq.username = convidado spring.rabbitmq.password = convidado gestão.security.enabled = falso
(3) Não há necessidade de mudar os outros
V. teste
(1) Preparação de teste
Um centro de registro de serviço, Eurekaserver, porta 5555;
Um centro de configuração distribuído, ConfigServer, com a porta 5588;
Duas configurações distribuídas, ConfigClient, as portas são 5589 e 5590; (2) Visite http: // localhost: 5589/de
(3) Visite http: // localhost: 5590/de
RabbitMQ:
(4) Vá ao armazém para modificar o valor da senha
de = git-dev-v1.0 por springcloud config-server username = springcloud senha = 1234567890
(5) Post Solicitação http: // localhost: 5589/ônibus/refresh ou http: // localhost: 5590/barramento/refresh
Após uma solicitação bem-sucedida, o Config-Client reler o arquivo de configuração.
(6) Visite novamente
Se as solicitações de postagem: http: // localhost: 5590/BUS/AGRESH, visite http: // localhost: 5589/de
Além disso, a interface/barramento/atualização pode especificar o serviço, ou seja, usar o parâmetro "nome de usuário", como "/barramento/atualização? Destination = nome de usuário: **" para atualizar todos os serviços cujo nome de serviço é nome de usuário, independentemente do endereço IP.
(7) Arquitetura
(8) Ajuste da arquitetura
Como a interface /barramento /atualização do barramento SpringCloud fornece parâmetros para atualizações de configuração para serviços e instâncias, nossa arquitetura também pode fazer alguns ajustes de acordo. Na arquitetura anterior, a atualização de configuração do serviço necessária para enviar uma solicitação para uma instância no serviço específico e acionar a atualização de configuração de todo o cluster de serviço. Embora as funções possam ser implementadas, o resultado é que as instâncias de aplicativos que especificamos serão diferentes de outras instâncias de aplicação no cluster, o que aumentará a complexidade dentro do cluster e será prejudicial para o trabalho de operação e manutenção futuro. Por exemplo, se a instância do serviço precisar ser migrada, precisamos modificar a configuração no gancho da web, etc. Portanto, devemos fazer cada nó no par de Serviço o máximo possível.
Portanto, fizemos alguns ajustes na arquitetura anterior, como mostrado na figura abaixo:
As seguintes mudanças foram feitas:
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.