2016-10-21 4 views
4

스프링 클라우드와 스프링 부트 amqp (토끼) 게시자 및 구독자의 통합을 보여주는 예제를 찾고 있습니다.스프링 부트와 스프링 클라우드 통합 amqp

내가

2016년 10월 21일 08 로그에 다음과 같은 메시지를 볼 수행 : 35 : 15.708 정보 [프로듀서, 9148f56490e5742f, 943ed050691842ab, 거짓] 30928 --- [NIO-8080-간부-1] abccontrollers.MessagingController : Activity OrderShipped로 도우미 요청을 받았습니다. 2016-10-21 08 : 35 : 15.730 정보 [생산자, 9148f56490e5742f, 943ed050691842ab, false] 30928 --- [nio-8080-exec-1] abcservice.ProducerService : 메시지 게시

대기열의 메시지를 보면 머리글에 traceId 또는 다른 세부 정보가 추가 된 것을 볼 수 없습니다. MessagePostProcessor를 사용하여 헤더에 추가해야합니까?

수신 서비스에서 수행해야 할 작업은 무엇입니까?

답변

1

우리는 Spring AMQP를 기본적으로 설치하지 않습니다. 그러나 우리가 지원하는 Spring Integration 또는 Spring Cloud Stream을 사용할 수 있으며 모든 것이 즉시 작동됩니다. 어떤 이유로 Spring AMQP를 사용해야 할 경우 코드를 직접 작성해야합니다 (그리고 우리에게 PR;)).

+0

안녕하세요. Marcin - 감사합니다. 나는 코드를 쓰는 것을 꺼려한다. 통합 방법에 대한 몇 가지 샘플이 있습니다. – basu76

+0

우리는 SpanInjector와 SpanExtractor의 개념을 가지고 있습니다. 메시징에 사용 된 것을 살펴볼 수 있습니다 - https://github.com/spring-cloud/spring-cloud-sleuth/blob/master/spring-cloud-sleuth-core/src/main/java/org/springframework /cloud/sleuth/instrument/messaging/MessagingSpanInjector.java 및 https://github.com/spring-cloud/spring-cloud-sleuth/blob/master/spring-cloud-sleuth-core/src/main/java/org /springframework/cloud/sleuth/instrument/messaging/MessagingSpanExtractor.java. 그들은 메시지에서 추적 정보를 회수하고 전달하는 일을 처리합니다. –

+0

Marcin - SpanInjector의 자체 버전을 구현하는 경우 injection 메서드가 호출되는 방식은 무엇입니까? – basu76

1

스프링 AMQP를 사용하면 setBeforePublishPostProcessors 방법을 사용하여 RabbitTemplate에서 MessagePostProcessor을 설정할 수 있습니다.

우리는 org.springframework.amqp.core.MessagePostProcessor를 구현하고 postProcessMessage 방법이 방법 오버라이드 :
@Override 
public org.springframework.amqp.core.Message postProcessMessage(org.springframework.amqp.core.Message message) 
     throws AmqpException { 
    MessagingMessageConverter converter = new MessagingMessageConverter(); 
    MessageBuilder<?> mb = MessageBuilder.fromMessage((Message<?>) converter.fromMessage(message)); 
    inject(tracer.getCurrentSpan(), mb); 
    return converter.toMessage(mb.build(), message.getMessageProperties()); 
} 

inject 방법

이제 메시지에 필요한 모든 헤더를 설정할 수 있습니다, 그것은 변화와 rabbitMq에 전달됩니다.
당신은 우리가 쉽게 될 것입니다 다음 버전 (1.2)에, 나의 예를 들어이 버전을 기반으로 v1.1.1 of spring-cloud-sleuth-stream를 사용하는 org.springframework.cloud.sleuth.instrument.messaging.MessagingSpanInjector

이러한 inject 방법을 구현하는 방법의 좋은 예 있습니다.

+0

우리는 비슷한 물건을 만드는 것을 끝냈습니다. – basu76

+0

@ yuval-simhon - PR을위한 돌보심? :) –

관련 문제