标签:retry ACK Jmq Rabbitmq Kafka 重试 队列 消息 接收
Rabbitmq的手动ACK和自动ACK
当消息一旦被消费者接收,队列中的消息就会被删除。那么问题来了:RabbitMQ怎么知道消息被接收了呢?
这就要通过消息确认机制(Acknowlege)来实现了。当消费者获取消息后,会向RabbitMQ发送回执ACK,告知消息已经被接收。不过这种回执ACK分两种情况:
自动ACK:消息一旦被接收,消费者自动发送ACK
手动ACK:消息接收后,不会发送ACK,需要手动调用
这两ACK要怎么选择呢?这需要看消息的重要性:
如果消息不太重要,丢失也没有影响,那么自动ACK会比较方便
如果消息非常重要,不容丢失。那么最好在消费完成后手动ACK,否则接收消息后就自动ACK,RabbitMQ就会把消息从队列中删除。如果此时消费者宕机,那么消息就丢失了。
消息补偿-重试机制:
Rabbitmq 默认情况下 如果消费者程序出现异常情况 会自动实现补偿机制 也就是 重试机制
消费者配置: 本地重试5次 不行就放入重试队列
listener: simple: retry: ####开启消费者重试 enabled: true ####最大重试次数(默认无数次) max-attempts: 5 ####重试间隔次数 initial-interval: 3000
JMQ的ACK
jmq应该是内部按照手动ack及本地重试封装好了,当接收到消息并处理完毕后才会ack,假如中间异常了会本地进行重试,重试几次失败后会向服务端发送retry消息,retry具有ack同等功能,服务端会把消息移除队列放入retry队列
标签:retry,ACK,Jmq,Rabbitmq,Kafka,重试,队列,消息,接收 来源: https://blog.csdn.net/CJQ316210/article/details/121561263
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。