gpt4 book ai didi

java - Spring AMQP : CorrelationId changes between moment of sending and receiving a message

转载 作者:行者123 更新时间:2023-11-29 05:08:33 25 4
gpt4 key购买 nike

当我测试为我的项目创建的发送和接收方法时,我遇到了一个奇怪的问题。当我使用基于 UUID 对象的 correlationId 发送特定消息时,接收方会得到此 correlationId 的略微修改版本(无法反序列化)。

在发送端我这样做:

MessageProperties properties = new MessageProperties();
properties.setCorrelationId(MessageSerializer.serialize(UUID.randomUUID().toString()));

在我上次测试中生成的 UUID 是:“d4170243-9e7e-4c42-9168-f9da4debc5bb

这会生成以下 correlationId(序列化时):

[-84, -19, 0, 5, 116, 0, 36, 100, 52, 49, 55, 48, 50, 52, 51, 45, 57, 101, 55, 101, 45, 52, 99, 52, 50, 45, 57, 49, 54, 56, 45, 102, 57, 100, 97, 52, 100, 101, 98, 99, 53, 98, 98]

当我在另一端收到消息时,此 id 略有更改:

[-17, -65, -67, -17, -65, -67, 0, 5, 116, 0, 36, 100, 52, 49, 55, 48, 50, 52, 51, 45, 57, 101, 55, 101, 45, 52, 99, 52, 50, 45, 57, 49, 54, 56, 45, 102, 57, 100, 97, 52, 100, 101, 98, 99, 53, 98, 98]

当使用 RabbitMQ 管理插件时,我注意到 id 在到达队列时已经改变了。

enter image description here

在发送方跟踪我的代码将我带到 RabbitTemplate 类的发送选项。

RabbitTemplate template = new RabbitTemplate(connection);
template.setExchange("amq.direct");
template.setRoutingKey("some.route");
template.send(message);

但我无法弄清楚是什么导致了这个问题。我想这只是我错误地使用了 correlationId 选项。有人可以帮帮我吗?

欣赏它。

最佳答案

解释如下:

  1. 将 UUID 字符串序列化为字节数组
  2. 您的序列化将非 ascii 字符添加到此数组 ([-17, -65, -67, -17, -65, -67, 0, 5, 116, 0, 36,...])
  3. reference documentation指出相关 ID 是一个短字符串。 RabbitMQ 客户端使用新字符串(您的数组,“UTF-8”)
  4. 非 ascii 字符“破坏”了从 byte[] 到 string 的转换

您可以使用以下代码获得相同的结果:

new String(MessageSerializer.serialize(UUID.randomUUID().toString()) , "UTF-8").getByte("UTF-8")

哪个会返回:

[-17, -65, -67, -17, -65, -67, 0, 5, 116, 0, 36, 100, 52, 49, 55, 48, 50, 52, 51, 45, 57, 101, 55, 101, 45, 52, 99, 52, 50, 45, 57, 49, 54, 56, 45, 102, 57, 100, 97, 52, 100, 101, 98, 99, 53, 98, 98]

关于java - Spring AMQP : CorrelationId changes between moment of sending and receiving a message,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29561077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com