2017-02-22 3 views
1

У меня проблема с получением сообщения в Spring-cloud-stream spring-boot app. Я использую rabbitMq как движок сообщений. Message-продюсер - приложение, не загружающее весну, которое отправляет сообщение с помощью Spring RestTemplate.spring cloud stream не удалось разобрать сообщение отправлено в RabbitMq с помощью Spring RestTemplate

Queue Name: "audit.logging.rest"

Потребитель приложение настройки слушать эту очередь. Это приложение является весенним загрузочным приложением (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

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, который не может быть проанализирован. Однако я вижу фактическое сообщение в нем в отношении свойства text.

Я написал ByteArrayMessageConverter, который даже не помог.

Есть ли способ сообщить весеннему потоку облаков, чтобы извлечь сообщение из RMQTextMessage с помощью MessageConverter и получить из него фактическое сообщение.

Заранее спасибо ..

ответ

0

RMQTextMessage? Похоже, что это часть rabbitmq-jms-client.

В случае с RabbitMQ Binder вы должны полагаться только на Spring AMQP.

Теперь давайте выясним, что делает ваше приложение-производитель.

Поскольку вы получаете RMQTextMessage в качестве значения для @StreamListener метода, который говорит мне, что отправитель действительно использует rabbitmq-jms-client для производства, и поэтому реальное AMQP сообщения в очереди имеет то RMQTextMessage как обертка для реального payload.

Почему бы не использовать Spring AMQP там же?

+0

Приложение-производитель имеет существующие интеграции, в которых клиент rabbitMq. Я хотел использовать весенне-облачную часть моего нового проекта. Тем не менее, я попытаюсь использовать AMQP. Спасибо – chmk

+0

Он работал после использования RabbitTemplate в приложении-изготовителе. Спасибо Артем. – chmk

+0

Отлично! Итак, время, чтобы принять ответ: http://stackoverflow.com/help/someone-answers –

Смежные вопросы