为什么在 AMQP 中需要 messageId?

Why need messageId in AMQP?

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

像这样..

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

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

如果messageId不存在怎么办? 为什么在 AMQP 中需要 messageId?

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

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

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