SpringCloud 메시지 버스 Spring Cloud Bus 인 스 턴 스 코드
마이크로 서비스 구조의 시스템 에서 저 희 는 보통 경량급 정보 대 리 를 사용 하여 공유 하 는 메시지 주 제 를 구축 하여 시스템 의 모든 마이크로 서비스 인 스 턴 스 를 연결 합 니 다.이 주제 에서 발생 하 는 정 보 는 모든 인 스 턴 스 에 의 해 감청 되 고 소비 되 기 때문에 저 희 는 이 를 메시지 버스 라 고 부 릅 니 다.
2.메시지 에이전트
메시지 에이전트(Message Broker)는 메시지 검증,전송,경로 의 구조 모델 이다.이 는 응용 프로그램 간 에 통신 스케줄 링 을 하고 응용 프로그램 간 의 의존 을 최소 화 하 는 역할 을 하여 응용 프로그램 이 효과적으로 결합 통신 과정 을 해제 할 수 있 도록 한다.메시지 에이 전 트 는 중간 부품 제품 으로 그 핵심 은 메시지 의 루트 프로그램 으로 메 시 지 를 수신 하고 전달 하 며 설 정 된 메시지 처리 흐름 에 따라 정확 한 응용 프로그램 에 전달 하 는 것 이다.그것 은 독립 된 통신 과 메시지 전달 협 의 를 포함 하여 조직 내부 와 조직 간 의 네트워크 통신 을 실현 할 수 있다.디자인 에이전트 의 목적 은 응용 프로그램 에서 정 보 를 전달 하고 특별한 조작 을 수행 하 는 것 이다.다음은 기업 응용 에서 우 리 는 정보 대 리 를 자주 사용 해 야 하 는 장면 이다.
(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:5590/bus/refresh방문 하 다http://localhost:5589/from
다른/bus/refresh 인 터 페 이 스 는 서 비 스 를 지정 할 수 있 습 니 다.즉,"username"인 자 를 사용 할 수 있 습 니 다.예 를 들 어"/bus/refresh?destination=username:*"즉,서비스 이름 이 username 인 모든 서 비 스 를 갱신 하 는 것 입 니 다.ip 주 소 를 상관 하지 않 습 니 다.
(7)구조
(8)구조 조정
SpringCloud Bus 의/bus/refresh 인터페이스 가 서비스 와 인 스 턴 스 를 설정 하고 업데이트 하 는 인 자 를 제공 한 이상 우리 의 구조 도 상응 하 게 조정 할 수 있 습 니 다.이전 구조 에서 서비스의 설정 업 데 이 트 는 구체 적 인 서비스 중의 특정한 인 스 턴 스 에 요청 을 보 낸 다음 에 전체 서비스 클 러 스 터 에 대한 설정 업 데 이 트 를 촉발 해 야 합 니 다.비록 기능 을 실현 할 수 있 지만 이런 결 과 는 우리 가 지정 한 응용 사례 가 천 군집 중의 다른 응용 사례 와 다 를 것 이다.그러면 군집 내부 의 복잡 도 를 증가 하고 미래의 운영 에 불리 하 다.예 를 들 어 서비스 인 스 턴 스 를 이전 해 야 한다 면 웹 훅 의 설정 등 을 수정 해 야 합 니 다.그래서 가능 한 한 서비스 집단의 각 노드 가 대등 하도록 해 야 한다.
그래서 우 리 는 다음 그림 과 같이 이전의 구 조 를 조정 했다.
주로 다음 과 같은 변경 을 했다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.