如何把SOH unicode字符在一个RabbitMQ的有效载荷在java?

8iwquhpp  于 2023-01-05  发布在  RabbitMQ
关注(0)|答案(1)|浏览(219)

我需要在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符号吗?
谢谢你,祝你有愉快的一天.

7y4bm7vi

7y4bm7vi1#

好吧我找到解决办法了。
这个问题是由于我调用rabbitTemplate.convertAndSend时直接将字符串作为消息。
RabbitTemplate实际上试图将字符串转换为消息,如果它不是一个给定的消息,但转换摆脱了特殊符号,并添加引号的文本。
因此,解决方案是为自己创建Message对象,然后像这样发送它:

Message message = new Message("test\u0001test".getBytes(StandardCharsets.UTF_8));
rabbitTemplate.convertAndSend(queueName, message);

相关问题