在 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/