SpringCloud 메시지 버스 Spring Cloud Bus 인 스 턴 스 코드

8311 단어 SpringCloudBus
프로필
마이크로 서비스 구조의 시스템 에서 저 희 는 보통 경량급 정보 대 리 를 사용 하여 공유 하 는 메시지 주 제 를 구축 하여 시스템 의 모든 마이크로 서비스 인 스 턴 스 를 연결 합 니 다.이 주제 에서 발생 하 는 정 보 는 모든 인 스 턴 스 에 의 해 감청 되 고 소비 되 기 때문에 저 희 는 이 를 메시지 버스 라 고 부 릅 니 다.
2.메시지 에이전트
메시지 에이전트(Message Broker)는 메시지 검증,전송,경로 의 구조 모델 이다.이 는 응용 프로그램 간 에 통신 스케줄 링 을 하고 응용 프로그램 간 의 의존 을 최소 화 하 는 역할 을 하여 응용 프로그램 이 효과적으로 결합 통신 과정 을 해제 할 수 있 도록 한다.메시지 에이 전 트 는 중간 부품 제품 으로 그 핵심 은 메시지 의 루트 프로그램 으로 메 시 지 를 수신 하고 전달 하 며 설 정 된 메시지 처리 흐름 에 따라 정확 한 응용 프로그램 에 전달 하 는 것 이다.그것 은 독립 된 통신 과 메시지 전달 협 의 를 포함 하여 조직 내부 와 조직 간 의 네트워크 통신 을 실현 할 수 있다.디자인 에이전트 의 목적 은 응용 프로그램 에서 정 보 를 전달 하고 특별한 조작 을 수행 하 는 것 이다.다음은 기업 응용 에서 우 리 는 정보 대 리 를 자주 사용 해 야 하 는 장면 이다.
  • 은 정 보 를 한 개 이상 의 목적지 로 인도 한다.
  • 소식 은 다른 표현 방식 으로 바 뀌 었 다.
  • 메시지 의 집합,메시지 의 분 해 를 실행 하고 결 과 를 목적지 로 보 낸 다음 에 다시 조합 하여 메시지 사용자 에 게 응답 합 니 다.
  • 에서 웹 서 비 스 를 호출 하여 데 이 터 를 검색 합 니 다.
  • 응답 이벤트 나 오류.
  • 게시-구독 모드 를 사용 하여 내용 이나 기 천 주제 의 정 보 를 제공 합 니 다.
  • 현재 이미 매우 많은 오픈 소스 제품 을 여러분 이 사용 할 수 있 습 니 다.예 를 들 어:
  • ActiveMQKafka
  • RabbitMQ
  • RocketMQ
  • 등...
  • 3.SpringCloud+RabbitMQ
    (1)RabbitMQ 의 소개,설 치 는 군말 하지 않 습 니 다.
    (2)pom.xml
    
    <dependencies> 
     <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-amqp</artifactId> 
     </dependency> 
     
     <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
     </dependency> 
    </dependencies> 
    (3)application.yml
    
    spring: 
     application: 
     name: rabbitmq-hello 
     rabbitmq: 
     host: ***.***.***.*** 
     port: 5672 
     username: guest 
     password: guest 
    (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", context); 
     } 
    } 
    (5)수신 자 수신 기
    
    @Component 
    @RabbitListener(queues = "hello") 
    public class Receiver { 
     
     private static final Logger log = LoggerFactory.getLogger(Receiver.class); 
     
     @RabbitHandler 
     public void process(String hello) { 
     log.info("Receiver : " + hello); 
     } 
    } 
    (6)RabbitMQ 의 설정 클래스 RabbitConfig 만 들 기
    
    @Configuration 
    public class RabbitConfig { 
     
     @Bean 
     public Queue helloQueue(){ 
     return new Queue("hello"); 
     } 
    } 
    (7)유닛 테스트 클래스 를 만 들 고 메시지 생산 을 호출 합 니 다.
    
    @RunWith(SpringJUnit4ClassRunner.class) 
    @SpringBootTest(classes = SpringcloudbusrabbitmqApplication.class) 
    public class HelloApplicationTests { 
     
     @Autowired 
     private Sender sender; 
     
     @Test 
     public void hello() throws Exception { 
     sender.send(); 
     } 
    } 
    (8)테스트,HelloApplicationTests 실행

    (9)host:15672 방문

    4.Config-Client 개조(springcloud bus 통합)
    (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/ 
     
    server.port=5589 
     
    spring.rabbitmq.host=118.89.237.88 
    spring.rabbitmq.port= 5672 
    spring.rabbitmq.username=guest 
    spring.rabbitmq.password=guest 
     
    management.security.enabled=false 
    (3)기 타 는 바 꾸 지 않 아 도 된다.
    테스트
    (1)테스트 준비
    서비스 등록 센터,EUREKASERVER,포트 5555;
    분포 식 배치 센터,ConfigServer,포트 5588;
    두 개의 분포 식 설정,ConfigClient,포트 는 5589,5590 입 니 다.(2)방문http://localhost:5589/from

    (3)방문http://localhost:5590/from

    RabbitMQ:

    (4)창고 에 가서 password 의 값 을 수정 합 니 다.
    
    from=git-dev-v1.0 by springcloud config-server 
    username=springcloud 
    password=1234567890 
    (5)POST 요청http://localhost:5589/bus/refresh혹은http://localhost:5590/bus/refresh

    요청 이 성공 하면 config-client 에서 프로필 을 다시 읽 습 니 다.

    (6)재 방문
  • POST 가 요청 한 것 은:http://localhost:5589/bus/refresh방문 하 다http://localhost:5590/from
  • 방문 에 401 이 나타 나 면 설정 은 management.security.enabled=false
  • 을 추가 해 야 합 니 다.

    POST 가 요청 한 것 은:http://localhost:5590/bus/refresh방문 하 다http://localhost:5589/from

    다른/bus/refresh 인 터 페 이 스 는 서 비 스 를 지정 할 수 있 습 니 다.즉,"username"인 자 를 사용 할 수 있 습 니 다.예 를 들 어"/bus/refresh?destination=username:*"즉,서비스 이름 이 username 인 모든 서 비 스 를 갱신 하 는 것 입 니 다.ip 주 소 를 상관 하지 않 습 니 다.
    (7)구조

    (8)구조 조정
    SpringCloud Bus 의/bus/refresh 인터페이스 가 서비스 와 인 스 턴 스 를 설정 하고 업데이트 하 는 인 자 를 제공 한 이상 우리 의 구조 도 상응 하 게 조정 할 수 있 습 니 다.이전 구조 에서 서비스의 설정 업 데 이 트 는 구체 적 인 서비스 중의 특정한 인 스 턴 스 에 요청 을 보 낸 다음 에 전체 서비스 클 러 스 터 에 대한 설정 업 데 이 트 를 촉발 해 야 합 니 다.비록 기능 을 실현 할 수 있 지만 이런 결 과 는 우리 가 지정 한 응용 사례 가 천 군집 중의 다른 응용 사례 와 다 를 것 이다.그러면 군집 내부 의 복잡 도 를 증가 하고 미래의 운영 에 불리 하 다.예 를 들 어 서비스 인 스 턴 스 를 이전 해 야 한다 면 웹 훅 의 설정 등 을 수정 해 야 합 니 다.그래서 가능 한 한 서비스 집단의 각 노드 가 대등 하도록 해 야 한다.
    그래서 우 리 는 다음 그림 과 같이 이전의 구 조 를 조정 했다.

    주로 다음 과 같은 변경 을 했다.
  • 은 ConfigServer 에 도 SpringCloud Bus 를 도입 하여 서버 설정 도 메시지 버스 에 추가 합 니 다.
  • /bus/refresh 요청 은 구체 적 인 서비스 인 스 턴 스 로 보 내지 않 고 Config Server 에 보 내 고 des 거 nation 매개 변 수 를 통 해 설정 을 업데이트 해 야 할 서비스 나 인 스 턴 스 를 지정 합 니 다.
  • 이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기