在 Spring AMQP 项目中,
如果 messageProperties 没有 messageId,它们总是创建 messageId。

像这样..

if (this.createMessageIds && messageProperties.getMessageId()==null) {
  messageProperties.setMessageId(UUID.randomUUID().toString());
}

我想知道 messageId 是什么。因此,我尝试找出使用 messageId 的位置。但是我在 Spring AMQP Source 中找不到它。

如果 messageId 不存在会发生什么?
为什么在 AMQP 中需要 messageId?

最佳答案

仅当转换器的 createMessageIds 为 true 时才会创建消息 ID - 默认情况下为 false。

通常不需要,除非您在消费者端使用有状态重试。

当使用有状态重试并且传递失败时,消息会被代理拒绝并重新传递。由于 RabbitMQ 没有在 header 中包含重试次数,因此我们必须跟踪尝试交付的次数,以便我们可以在到达 maxAttempts 后放弃。消息 ID 用于查找此消息的重试状态。

关于amqp - 为什么在 AMQP 中需要 messageId?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37494605/

10-10 13:08