• ActiveMQ可靠性机制


    消息的签收(Acknowledgment):

      客户端成功接收一条消息的标志是这条消息被签收。

      成功接收一条消息一般包括如下三个阶段: 

        (1) 客户端接收消息 

        (2) 客户端处理消息  

        (3) 消息被签收

        

      签收可以由ActiveMQ发起,也可以由客户端发起,取决于Session签收模式的设置。  

      在带事务的Session中,签收自动发生在事务提交时。如果事务回滚,所有已经接收的消息将会被再次传送。在不带事务的Session中,一条消息何时和如何被签收取决于Session的设置。

    非事务会话可做如下设置:

    1.Session.AUTO_ACKNOWLEDGE(自动确认模式)

      当消息成功的从receive方法返回时,或者从MessageListener接口的onMessage方法成功返回时,会话自动确认客户端的消息接收。

    2.Session.CLIENT_ACKNOWLEDGE(客户端确认模式)

      客户端通过调用消息的acknowledge方法签收消息。在这种模式中,签收是在会话层上进行:签收一个已消费的消息会自动地签收这个Session所有已消费消息的收条。

      例如,如果一个消息消费者消费了10个消息,然后确认第5个消息,那么所有10个消息都会被确认。 

    3. Session.DUPS_OK_ACKNOWLEDGE(延时/批量确认模式)

      这种确认方式允许JMS不必急于确认收到的消息,允许在收到多个消息之后一次完成确认,与Auto_AcKnowledge相比,这种确认方式在某些情况下可能更有效,因为没有确认,当系统崩溃或者网络出现故障的时候,消息可以被重新传递. 

      这种方式会引起消息的重复,但是降低了Session的开销,所以只有客户端能容忍重复的消息,才可使用。(如果ActiveMQ再次传送同一消息,那么消息头中的JMSRedelivered将被设置为true)

  • 相关阅读:
    实验七---类的多态
    实验六
    实验五---排序、质数
    实验四---杨辉三角
    node中间件KOA函数
    java文件名判断练习
    npm install 安装报错错误问题
    bundle is not defined 手动搭建项目架构(一)
    ztree实现拖拽功能
    js单线程 详解 来自知乎
  • 原文地址:https://www.cnblogs.com/panchanggui/p/10337045.html
Copyright © 2020-2023  润新知