1. Введение
В системах архитектуры микросервиса мы обычно используем легкий брокер сообщений, чтобы создать общую тему сообщения для подключения всех экземпляров микросервиса в системе. Поскольку сообщения, сгенерированные в этой теме, будут прослушиваться и поглощены всеми экземплярами, мы называем это автобусом сообщения.
2. Сообщение прокси
Сообщение брокера - это архитектурная модель проверки сообщений, передачи и маршрутизации. Он служит планированием связи между приложениями и сводит к минимуму зависимости между приложениями, так что приложения могут эффективно отделять процессы связи. Брокер сообщений является продуктом промежуточного программного обеспечения. Его ядро - это программа маршрутизации сообщений, используемая для получения и распространения сообщений, и перенаправить их в правильное приложение на основе потока обработки сообщений. Он включает в себя независимые протоколы общения и обмена сообщениями, обеспечивая сетевую связь внутри организаций и между организациями. Цель проектирования прокси - иметь возможность передавать сообщения из приложения и выполнять некоторые специальные операции. Ниже приведены сценарии в корпоративных приложениях, где нам часто нужно использовать прокси -сервер сообщения:
У всех есть много продуктов с открытым исходным кодом, например:
3. Springcloud+Rabbitmq
(1) Введение и установка RabbitMQ не будут подробно описаны.
(2) Pom.xml
<depertiendions> <dehyederence> <groupid> org.springframework.boot </GroupId> <ArtifactId> Spring-boot-starter-amqp </artifactid> </dependency> <dehyed> <groupid> org.springframework.boot </GroupD> <ratifactid> Spring-boot-starter-test </artifact> artifact> artifact> artifact> artifact> artifact> </GroupD> </artfope> </artifact> </зависимости>
(3) Application.yml
Весна: Приложение: Имя: Rabbitmq-Hello Rabbitmq: Host: ***. ***. ***. ***.
(4) отправитель
@Component public Class Sender {private Static Final Logger log = loggerFactory.getLogger (sender.class); @Autowired private amqptemplate amqptemplate; public void send () {string context = "hello" + new date (); log.info ("Sender:" + context); this.amqptemplate.convertandsend ("hello", контекст); }}(5) приемник
@Component @rabbitlistener (queues = "hello") приемник открытого класса {private static final logger log = loggerfactory.getlogger (receiver.class); @Rabbithandler public void Process (String Hello) {log.info ("Receiver:" + Hello); }}(6) Создать Rabbitmq Configuration Class Class RabbitConfig
@Configuration public class rabbitconfig {@bean public queue Queueue () {вернуть новую очередь ("Hello"); }} (7) Создайте класс модульного тестирования для вызова производства сообщений
@Runwith (springjunit4classrunner.class) @springboottest (classe = springcloudbusrabbitmqapplication.class) открытый класс helloapplicationtests {@autowired частного отправителя; @Test public void hello () throws exception {sender.send (); }} (8) Тест, выполнить HelloApplicationTests
(9) Посетите хозяин: 15672
4. Transform Config-Client (интегрируйте шину SpringCloud)
(1) Pom.xml
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
(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/servor. Spring.rabbitmq.host = 118.89.237.88 Spring.rabbitmq.port = 5672 Spring.rabbitmq.username = Guest Spring.rabbitmq.password = гостевое управление.security.enablet = false
(3) Нет необходимости менять другие
V. Тест
(1) Подготовка теста
Центр регистрации услуг, Eurekaserver, порт 5555;
Распределенный центр конфигурации, configserver, с портом 5588;
Две распределенные конфигурации, configclient, порты 5589 и 5590; (2) Посетите http: // localhost: 5589/from
(3) Посетите http: // localhost: 5590/from
Rabbitmq:
(4) Перейдите на склад, чтобы изменить значение пароля
from = Git-DEV-V1.0 от SpringCloud Config-Server Имя пользователя = пароль SpringCloud = 1234567890
(5) POST Запрос http: // localhost: 5589/bus/reshesh или http: // localhost: 5590/bus/rew
После успешного запроса config-client перечитает файл конфигурации.
(6) Посетите снова
Если сообщение за запросами: http: // localhost: 5590/bus/reshere, пожалуйста, посетите http: // localhost: 5589/from
Кроме того, интерфейс/шин/обновление может указать службу, то есть использовать параметр «Имя пользователя», такой как «/шина/обновление? Destination = имя пользователя: **», чтобы обновить все услуги, чье имя обслуживания является именем пользователя, независимо от IP -адреса.
(7) Архитектура
(8) Регулировка архитектуры
Поскольку интерфейс /шин /обновление шины Springcloud предоставляет параметры для обновлений конфигурации для служб и экземпляров, наша архитектура также может соответственно внести некоторые корректировки. В предыдущей архитектуре обновление конфигурации службы, необходимой для отправки запроса в экземпляр в конкретной службе, а затем запустит обновление конфигурации всего кластера служб. Хотя функции могут быть реализованы, результатом является то, что экземпляры приложения, которые мы указываем, будут отличаться от других экземпляров применения в кластере, что увеличит сложность в кластере и наносит ущерб будущей работе и техническому обслуживанию. Например, если экземпляр службы должен быть перенесен, мы должны изменить конфигурацию в веб -крючке и т. Д. Следовательно, мы должны сделать каждый узел в одноранговом кластере служб.
Поэтому мы внесли некоторые коррективы к предыдущей архитектуре, как показано на рисунке ниже:
Были внесены следующие изменения:
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.