1. 소개
마이크로 서비스 아키텍처 시스템에서, 우리는 일반적으로 가벼운 메시지 브로커를 사용하여 시스템의 모든 마이크로 서비스 인스턴스를 연결하기 위해 공통 메시지 주제를 구축합니다. 이 주제에서 생성 된 메시지는 모든 인스턴스에서 듣고 소비되므로이를 메시지 버스라고합니다.
2. 메시지 프록시
메시지 중개인은 메시지 검증, 전송 및 라우팅의 아키텍처 모델입니다. 응용 프로그램 간의 통신 스케줄링 역할을하며 응용 프로그램 간의 종속성을 최소화하므로 응용 프로그램이 통신 프로세스를 효율적으로 분리 할 수 있습니다. 메시지 중개인은 미들웨어 제품입니다. 핵심은 메시지를 수신 및 배포하는 데 사용되는 메시지 라우팅 프로그램이며, 설정 메시지 처리 흐름에 따라 올바른 응용 프로그램으로 전달합니다. 여기에는 독립적 인 커뮤니케이션 및 메시징 프로토콜이 포함되어 조직 내 및 조직 간 네트워크 커뮤니케이션이 가능합니다. 프록시를 설계하는 목적은 응용 프로그램에서 메시지를 전달하고 일부 특수 작업을 수행 할 수 있어야합니다. 다음은 Enterprise Applications의 시나리오가 자주 메시지 프록시를 사용해야하는 시나리오입니다.
모든 사람이 사용할 수있는 많은 오픈 소스 제품이 이미 있습니다.
3. SpringCloud+Rabbitmq
(1) RabbitMQ 소개 및 설치는 상세하지 않습니다.
(2) pom.xml
<pectionies> <pectinement> <groupId> org.springframework.boot </groupid> <artifactid> spring-boot-starter-amqp </artifactid> </depectency> <groupId> org.springframework.spramework.spramework.spramewort </artifactid> </artifactid> </종속성> </종속성>
(3) application.yml
봄 : 응용 프로그램 : 이름 : Rabbitmq-Hello RabbitMQ : 호스트 : ***. ***. ***. ***. *** 포트 : 5672 사용자 이름 : 게스트 비밀번호 : 게스트
(4) 발신자
@Component Public Class 발신자 {private static final logger log = loggerfactory.getLogger (sender.class); @autowired private amqptemplate amqptemplate; public void send () {문자열 context = "hello" + new date (); log.info ( "발신자 :" + 컨텍스트); this.amqptemplate.convertandSend ( "Hello", Context); }}(5) 수신기
@Component @RabBitListener (queues = "Hello") 공개 클래스 수신기 {private static final logger log = loggerfactory.getLogger (수신기 .class); @RabBithandler public void 프로세스 (String Hello) {log.info ( "수신기 :" + hello); }}(6) RabbitMQ 구성 클래스 RabbitConfig를 만듭니다
@Configuration Public Class RabbitConfig {@bean public queue helloqueue () {return new queue ( "Hello"); }} (7) 메시지 제작을 호출 할 단위 테스트 클래스 생성
@RunWith (SpringJunit4classRunner.class) @SpringBootTest (클래스 = SpringCloudBusRabbitMQApplication.class) 공개 클래스 HelloApplicationTests {@autowired 개인 발신자; @test public void hello ()는 예외 {sender.send (); }} (8) 테스트, HelloApplicationTests를 실행하십시오
(9) 호스트 방문 : 15672
4. config-client 변환 (스프링 클라우드 버스 통합)
(1) pom.xml
<pectionies> <pectinement> <groupId> org.springframework.cloud </groupid> <artifactid> Spring-Cloud-Starter-Config </artifactid> </depectency> <groupid> org.springframework.boot </groupid> <arepincid> spring-boot-starter-web </artifactid> <groupid> org.springframework.cloud </groupid> <artifactid> spring-cloud-starter-eureka </artifactid> </eppendency> <pectionency> <groupid> org.springframework.cloud </groupid> <artifactid> spring-cloud-starter-bus-amqp </arevactid> <groupid> org.springframework.boot </groupid> <artifactid> Spring-Boot-starter-Actuator </arefactid> </areventency> <pectionement> <groupid> org.springframewort.boot </groupid> <artifactid> spring-boot-starter-test </artifactid> </scope> </scope>
(2) 부트 스트랩
spring.application.name = configspace spring.cloud.config.label = mas spring.rabbitmq.host = 118.89.237.88 spring.rabbitmq.port = 5672 spring.rabbitmq.username = guest spring.rabbitmq.password = Guest Management.security.enabled = false
(3) 다른 사람을 바꿀 필요가 없습니다
V. 테스트
(1) 시험 준비
서비스 등록 센터, Eurekaserver, 포트 5555;
PORT 5588이있는 분산 구성 센터, Configserver;
두 개의 분산 구성, 구성, 구성 포트는 5589 및 5590입니다. (2) http : // localhost : 5589/from을 방문하십시오
(3) http : // localhost : 5590/from을 방문하십시오
RabbitMQ :
(4) 창고로 이동하여 비밀번호 값을 수정하십시오.
from = git-dev-v1.0 by springcloud config-server username = springcloud password = 1234567890
(5) 후 요청 http : // localhost : 5589/버스/새로 고침 또는 http : // localhost : 5590/bus/refresh
성공적인 요청 후 Config-Client가 구성 파일을 다시 읽습니다.
(6) 다시 방문하십시오
게시물 요청 : http : // localhost : 5590/bus/refresh는 http : // localhost : 5589/from을 방문하십시오
또한/버스/새로 고침 인터페이스는 서비스를 지정할 수 있습니다. 즉 "사용자 이름"매개 변수를 사용하여 "/bus/refresh? destination = username : **"와 같은 IP 주소에 관계없이 서비스 이름이 사용자 이름 인 모든 서비스를 새로 고치십시오.
(7) 건축
(8) 아키텍처 조정
SpringCloud 버스의 /버스 /새로 고침 인터페이스는 서비스 및 인스턴스에 대한 구성 업데이트를위한 매개 변수를 제공하므로 아키텍처는 그에 따라 조정할 수도 있습니다. 이전 아키텍처에서는 특정 서비스의 인스턴스로 요청을 보내는 데 필요한 서비스의 구성 업데이트를 한 다음 전체 서비스 클러스터의 구성 업데이트를 트리거합니다. 함수를 구현할 수 있지만 결과는 우리가 지정한 응용 프로그램 인스턴스가 클러스터의 다른 응용 프로그램 인스턴스와 다르기 때문에 클러스터 내의 복잡성을 증가시키고 향후 작동 및 유지 보수 작업에 해 롭습니다. 예를 들어, 서비스 인스턴스를 마이그레이션 해야하는 경우 웹 후크의 구성을 수정해야합니다. 따라서 서비스 클러스터 피어의 각 노드를 최대한 많이 만들어야합니다.
따라서 아래 그림과 같이 이전 아키텍처를 약간 조정했습니다.
다음과 같은 변경이 이루어졌습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.