0

我有一个服务使用不同的 RabbitMQ 队列的用例。

  • 在其中一个队列上有 JSON 编码数据,其中 content_type 标头设置为 application/json
  • 还有第二个队列,正在消费二进制数据,content_type 是application/octet-stream

在配置中有一个 MessageConverter 定义:

@Bean
public MessageConverter jsonMessageConverter(){
    return new Jackson2JsonMessageConverter();
}

消费方法是这样声明的:

@RabbitListener(queues = "rpc-device-cmd")
public byte[] rpcCommand(byte[] request) throws IOException, ConfigurationException { .... }

我的问题是 Jackson2JsonMessageConverter 抱怨application/octet-stream标头( Could not convert incoming message with content-type application/octet-stream 'json' keyword missing.),更糟糕的是,它正在将上述方法的 byte[] 响应编码为 JSON 和 base64。

问题:
如何确保 JSON 转换器不会触及我的 byte[] 响应并忽略具有“非 json”content_type 的消息?

4

1 回答 1

0

您可以通过创建自己的 MessageConverter 实现来处理 rabbitMQ 响应字符串,如下例所示

https://github.com/nidhishkrishnan/messaging - 在这里我演示了我们如何使用 MessageConverter 基于绑定键将 RabbitMQ 消息字符串编组和转换为 Java 域对象

在此处输入图像描述

在您的情况下,您可以从消息中检索内容类型以根据您的要求编组输出

String contentType = message.getMessageProperties().getContentType();
于 2020-07-25T14:37:45.840 回答