我需要在RabbitMQ有效负载中添加SOH unicode。
为此,我在java中使用了这个依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version>2.7.0</version>
</dependency>
然后我用这个代码添加消息:
rabbitTemplate.convertAndSend(messageQueueName, "test\u0001test");
当我放置一个断点并评估这个字符串时,它确实是由"test"+ SOH +"test"组成的,不幸的是,当消息发送时,存储在RabbitMQ队列中的结果消息是:
"test\u0001test"
这不是我想要的,因为接收应用程序无法识别用作分隔符的SOH。
我试着寻找关于有效负载格式的信息,但我没有找到任何相关的信息,我开始猜测这更多的是关于rabbitMQ配置,但因为我是非常新的,我不确定。
我尝试通过修改头或内容类型来解决这个Java方面的问题,如下所示:
rabbitTemplate.convertAndSend(messageQueueName, "test\u0001test", m -> {
m.getMessageProperties().getHeaders().put(JMS_TYPE_HEADER, "TextMessage");
m.getMessageProperties().setContentType("text/plain");
return m;
});
我也尝试了bytesMessage和application/octet-stream,但是结果是一样的。
您能告诉我需要什么样的配置才能在发送给RabbitMQ的消息的有效负载中包含SOH的unicode符号吗?
谢谢你,祝你有愉快的一天.
1条答案
按热度按时间7y4bm7vi1#
好吧我找到解决办法了。
这个问题是由于我调用rabbitTemplate.convertAndSend时直接将字符串作为消息。
RabbitTemplate实际上试图将字符串转换为消息,如果它不是一个给定的消息,但转换摆脱了特殊符号,并添加引号的文本。
因此,解决方案是为自己创建Message对象,然后像这样发送它: