2017-02-22 76 views
1

我在收到spring-cloud-stream spring-boot應用的消息時遇到了問題。 我使用rabbitMq作爲消息引擎。 消息生產者是一個非彈簧啓動的應用程序,它使用Spring RestTemplate發送消息。spring雲流無法解析使用Spring RestTemplate發佈到RabbitMq的消息

隊列名稱:「audit.logging.rest」

消費者應用程序的設置來聽這個隊列。這個應用程序是春季啓動應用程序(春季雲流)。

下面是消費者代碼

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

public class AuditTestLogger { 

    private String applicationName; 

    public String getApplicationName() { 
     return applicationName; 
    } 

    public void setApplicationName(String applicationName) { 
     this.applicationName = applicationName; 
    } 
} 

下面是從JSON格式的生產者應用正在發送的請求。

{"applicationName" : "AppOne" } 

發現幾個問題: Issue1: 後來我發現只有在方法參數被提及作爲對象得到觸發以下方法,如彈簧雲流無法解析消息轉換爲Java POJO對象。

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

Issue2:

當我改變方法來接收對象。我看到該對象是無法解析的RMQTextMessage類型。然而,我看到其中的文字屬性實際發佈的消息。

我寫過一個ByteArrayMessageConverter,它甚至沒有幫助。

有什麼辦法可以告訴spring雲流使用MessageConverter從RMQTextMessage中提取消息並從中獲取實際的消息。

在此先感謝..

回答

0

RMQTextMessage?看起來它是rabbitmq-jms-client的一部分。

在RabbitMQ的活頁夾的情況下,你應該只在春季AMQP依賴。

現在,讓我們找出你的生產應用程序在做。

既然你RMQTextMessage作爲@StreamListener方法,說我發送者真正使用rabbitmq-jms-client用於生產,因此,在隊列中的實際AMQP的消息具有值RMQTextMessage作爲真正​​的包裝。

爲什麼不在那裏使用Spring AMQP?

+0

生產者應用程序已經集成了rabbitMq客戶端。我想使用我的新項目中的spring-cloud部分。但是,我會嘗試使用AMQP。謝謝 – chmk

+0

它在生產者應用程序中使用RabbitTemplate後工作。謝謝Artem。 – chmk

+0

太棒了!那麼接受一個答案的時間:http://stackoverflow.com/help/someone-answers –

相關問題