2017-02-22 2 views
1

spring-cloud-stream spring-boot app에 메시지를받는 데 문제가 있습니다. 메시지 엔진으로 rabbitMq를 사용하고 있습니다. Message Producer는 Spring RestTemplate을 사용하여 메시지를 전송하는 비 스프링 부팅 응용 프로그램입니다. Spring Cloud Stream은 Spring RestTemplate을 사용하여 RabbitMq에 게시 된 메시지를 구문 분석 할 수 없습니다.

대기열 이름

는 "audit.logging.rest"

소비자 응용 프로그램은 큐를 듣고 설정입니다. 이 응용 프로그램은 spring-boot app (spring-cloud-stream)입니다. 다음은

소비자 코드

application.yml

cloud: 
    stream: 
     bindings: 
     restChannel: 
      binder: rabbit 
      destination: audit.logging 
      group: rest 

AuditServiceApplication.java

@SpringBootApplication 
public class AuditServiceApplication { 
@Bean 
    public ByteArrayMessageConverter byteArrayMessageConverter() { 
     return new ByteArrayMessageConverter(); 
    } 
    @Input 
    @StreamListener(AuditChannelProperties.REST_CHANNEL) 
    public void receive(AuditTestLogger logger) { 
    ... 
    } 

에게

AuditTestLogger.java입니다

아래는 제작자 앱에서 JSON 형식으로 전송 된 요청입니다.

{"applicationName" : "AppOne" } 

발견 된 문제의 몇 : Issue1 : 봄 - 클라우드 스트림이 구문 분석 할 수 없습니다로, 메소드 매개 변수가 객체로 언급 한 경우에만 아래의 방법은 트리거지고 내가 눈치 무엇 메시지를 Java POJO 오브젝트에 추가하십시오.

@Input 
     @StreamListener(AuditChannelProperties.REST_CHANNEL) 
     public void receive(AuditTestLogger logger) { 

Issue2 : 나는 개체를받을 수있는 방법을 변경

. 개체를 구문 분석 할 수없는 RMQTextMessage 형식의 참조하십시오. 그러나 텍스트 속성에 대한 실제 게시 된 메시지를 볼 수 있습니다.

필자도 도움이되지 않은 ByteArrayMessageConverter를 작성했습니다.

스프링 클라우드 스트림에 MessageConverter를 사용하여 RMQTextMessage에서 메시지를 추출하고 실제 메시지를 빼낼 수있는 방법이 있습니까? 사전에

감사합니다 ..

답변

0

RMQTextMessage? 그것은 rabbitmq-jms-client의 일부인 것처럼 보입니다.

RabbitMQ Binder의 경우 Spring AMQP에만 의존해야합니다.

이제 제작자 응용 프로그램이 무엇을하는지 알아 보겠습니다.

당신이 보낸 사람이 정말 생산 rabbitmq-jms-client를 사용하므로 큐의 실제 AMQP 메시지가 나에게 말한다 @StreamListener 방법에 대한 값으로 RMQTextMessage를 얻을 수 있기 때문에 실제 payload에 대한 래퍼로 RMQTextMessage 그.

왜 Spring AMQP를 사용하지 않는가?

+0

생산자 응용 프로그램에는 rabbitMq 클라이언트가 기존의 통합이 있습니다. 나는 새로운 프로젝트의 봄 구름 부분을 사용하고 싶었다. 그러나 AMQP를 사용해 보겠습니다. 감사합니다 – chmk

+0

그것은 제작자 응용 프로그램에서 RabbitTemplate을 사용한 후에 작동했습니다. Artem에 감사드립니다. – chmk

+0

좋아요! 그래서 답변을 수락 할 시간 : http://stackoverflow.com/help/someone-answers –