• 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)

  • 相关阅读:
    mqtt 服务器与客户端通讯
    MQTT--单片机实现即时通信
    source insight 如何建工程--以及快捷方式查找调用函数方法
    在联网时,两台linux服务器传输文件方法
    字符串截取函数-c语言
    strcpy(),strcat()的用法
    如何将红色区域数据调用解密函数直接打印到输出控制台(例如:crt控制台)
    如何把apdu[decode_len]打印出来
    SecureCRT中文乱码解决已设置UTF-8
    RobotFrameWork(五)控制流之if语句——Run Keyword If
  • 原文地址:https://www.cnblogs.com/panchanggui/p/10337045.html
Copyright © 2020-2023  润新知