spring 云流无法使用 Spring RestTemplate 解析发布到 RabbitMq 的消息

spring cloud stream unable to parse message posted to RabbitMq using Spring RestTemplate

我在将消息发送到 spring-cloud-stream spring-boot app 时遇到问题。 我正在使用 rabbitMq 作为消息引擎。 消息生成器是一个非 spring 引导应用程序,它使用 Spring RestTemplate 发送消息。

队列名称:"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

    public class AuditTestLogger {

    private String applicationName;

    public String getApplicationName() {
        return applicationName;
    }

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

以下是生产者应用程序以 JSON 格式发送的请求。

{"applicationName" : "AppOne" }

发现了几个问题: 问题 1: 我注意到以下方法仅在方法参数作为对象提及时才会触发,因为 spring-cloud-stream 无法将消息解析为 Java POJO 对象。

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

问题2:

当我更改接收对象的方法时。我看到对象是无法解析的 RMQTextMessage 类型。但是我在其中看到了针对文本 属性.

的实际发布消息

我写了一个 ByteArrayMessageConverter 甚至没有帮助。

有什么方法可以告诉 spring 云流使用 MessageConverter 从 RMQTextMessage 中提取消息并从中获取实际消息。

提前致谢..

RMQTextMessage?看起来它是 rabbitmq-jms-client.

的一部分

如果是 RabbitMQ Binder,你应该只依赖 Spring AMQP。

现在让我们弄清楚您的生产者应用程序在做什么。

因为你得到 RMQTextMessage 作为 @StreamListener 方法的值,这告诉我发送者真的使用 rabbitmq-jms-client 来生产,因此队列中真正的 AMQP 消息有 RMQTextMessage 作为真实 payload.

的包装器

为什么不在那里也使用 Spring AMQP?

这是一个迟到的回复,但我有确切的问题并通过发送和接收 application/json 格式的消息解决了它。在 spring 云流配置中使用它。

content-type: application/json