在春季AMQP项目中, 如果messageProperties没有messageId,则它们总是创建messageId。
喜欢这个..
if (this.createMessageIds && messageProperties.getMessageId()==null) {
messageProperties.setMessageId(UUID.randomUUID().toString());
}
我想知道messageId是什么。所以,我试着找出使用messageId的位置。但我在Spring AMQP Source中找不到它。
如果messageId不存在会怎样? 为什么AMQP需要messageId?
答案 0 :(得分:6)
仅当转换器的createMessageIds
为真时才会创建消息ID - 默认情况下为false。
通常不需要,除非您在消费者方面使用有状态重试。
使用有状态重试并且传递失败时,代理会拒绝并重新传递邮件。由于RabbitMQ不包括标题中的重试次数,因此我们必须跟踪已尝试传递的次数,以便我们可以在达到maxAttempts
后放弃。消息ID用于查找此消息的重试状态。