做网站需要许可证吗,域名网查询,山西省确诊病例最新情况,电子商务网站建设第二版论文文章目录 前言一、死信队列二、ActiveMQ 中的消息重发时间间隔和重发次数吗#xff1f;总结 前言
死信队列ActiveMQ 中的消息重发时间间隔和重发次数吗#xff1f; 一、死信队列
如果你想在消息处理失败后#xff0c;不被服务器删除#xff0c;还能被其他消费者处理或重试… 文章目录 前言一、死信队列二、ActiveMQ 中的消息重发时间间隔和重发次数吗总结 前言
死信队列ActiveMQ 中的消息重发时间间隔和重发次数吗 一、死信队列
如果你想在消息处理失败后不被服务器删除还能被其他消费者处理或重试可以关闭AUTO_ACKNOWLEDGE将 ack 交由程序自己处理。那如果使用了 AUTO_ACKNOWLEDGE消息是什么时候被确认的还有没有阻止消息确认的方法有 消费消息有 2 种方法一种是调用 consumer.receive()方法该方法将阻塞直到获得并返回一条消息。这种情况下消息返回给方法调用者之后就自动被确认了。另一种方法是采用 listener 回调函数在有消息到达时会调用 listener 接口的 onMessage 方法。在这种情况下在 onMessage 方法执行完毕后消息才会被确认此时只要在方法中抛出异常该消息就不会被确认。那么问题来了如果一条消息不能被处理会被退回服务器重新分配如果只有一个消费者该消息又会重新被获取重新抛异常。就算有多 个消费者往往在一个服务器上不能处理的消息在另外的服务器上依然不能被处理。难道就这么退回–获取–报错死循环了吗 在重试 6 次后ActiveMQ 认为这条消息是“有毒”的将会把消息丢到死信队列里。如果你的消息不见了去 ActiveMQ.DLQ 里找找说不定就躺在那里。
二、ActiveMQ 中的消息重发时间间隔和重发次数吗
ActiveMQ是 Apache 出品最流行的能力强劲的开源消息总线。是一个完全支持 JMS1.1 和 J2EE 1.4规范的 JMS Provider 实现。JMSJava 消息服务是一个 Java 平台中关于面向消息中间件MOM的 API用于在两个应用程序之间或分布式系统中发送消息进行异步通信。 首先我们得大概了解下在哪些情况下ActiveMQ 服务器会将消息重发给消费者这里为简单起见假定采用的消息发送模式为队列即消息发送者和消息接收者。 ① 如果消息接收者在处理完一条消息的处理过程后没有对 MOM 进行应答则该消息将由 MOM 重发. ② 如果我们队某个队列设置了预读参数consumer.prefetchSize如果消息接收者在处理第一条消息 时没向 MOM 发送消息接收确认就宕机了则预读数量的所有消息都将被重发! ③ 如果 Session 是事务的则只要消息接收者有一条消息没有确认或发送消息期间 MOM 或客户端某一方突然宕机了则该事务范围中的所有消息 MOM 都将重发。 ④ 说到这里大家可能会有疑问ActiveMQ 消息服务器怎么知道消费者客户端到底是消息正在处理中还没来得急对消息进行应答还是已经处理完成了没有应答或是宕机了根本没机会应答呢其实在所有的客户端机器上内存中都运行着一套客户端的 ActiveMQ 环境该环境负责缓存发来的消息负责维持着和ActiveMQ 服务器的消息通讯负责失效转移fail-over等所有的判断和处理都是由这套客户端环境来完成的。 我们可以来对 ActiveMQ 的重发策略Redelivery Policy来进行自定义配置其中的配置参数主要有以下几个 可用的属性 属性 默认值 说明
l collisionAvoidanceFactor 默认值 0.15
设置防止冲突范围的正负百分比只有启用
useCollisionAvoidance 参数时才生效。
l maximumRedeliveries 默认值 6
最大重传次数达到最大重连次数后抛出异常。为-1 时不限制次数为 0 时表示不进行重传。
l maximumRedeliveryDelay 默认值-1, 最大传送延迟
只在 useExponentialBackOff 为 true 时有效V5.5假设首次重连间隔为 10ms倍数为 2那么第二次重连时间间隔为 20ms第三次重连时间间隔为 40ms当重连时间间隔大的最大重连时间间隔时以后每次重连时间间隔都为最大重连时间间隔。
l initialRedeliveryDelay 默认值 1000L, 初始重发延迟时间
l redeliveryDelay 默认值 1000L, 重发延迟时间
当 initialRedeliveryDelay0 时生效v5.4
l useCollisionAvoidance 默认值 false,
启用防止冲突功能因为消息接收时是可以使用多线程并发处理的应该是为了重发的安全性避开所有并发线程都在同一个时间点进行消息接收处理。所有线程在同一个时间点处理时会发生什么问题呢应该没有问题只是为了平衡 broker 处理性能不会有时很忙有时很空闲。
l useExponentialBackOff 默认值 false
启用指数倍数递增的方式增加延迟时间。
l backOffMultiplier 默认值 5重连时间间隔递增倍数只有值大于 1 和启用 useExponentialBackOff参数时才生效。总结
死信队列ActiveMQ 中的消息重发时间间隔和重发次数吗