消息接收确认:

    JMS消息只有在被确认之后, 才认为被成功消费了, 消息成功消费通常包含三哥阶段:客户接受消息, 可会处理消息和消息被确认/

    在事务性会话中, 当一个事务被提交的时候, 确认自动发生. 在非事务性会话中,消息合适被确认取决于创建会话时的应答模式(acknowledge mode), 该参数有一下三个可选值:

    Session.AUTO_ACKNOWLEDE: 当用户成功的从revceive方法返回的时候, 或者从MessageListener.onMessage方法返回成功的时候, 会话自动确认客户收到的消息'

    Session.Client_Acknowledge' : 当客户通过调用消息的acknowledge方法确认消息, 需要注意的是, 确认是在session层面上确认的

    Session.Dups_acknowledge: 会话迟钝的确认消息的提交, 如果 jms_provider失败, 那么会导致一些重复的消息, 如果是重复的消息, 那么JMS provider 必须把消息头的JMS Redelivered字段为true;


消息持久性: JMS支持以下两种消息提交模式

    Persistent: 指示 JMS provider 持久保存信息, 以保证消息不会因为JMS provider的失败而丢失

    NON_PERSISTENT:  不要求 jms provider 持久保存信息


本地事务: ... commit/ rollback 一旦被调用,本事务就结束, 另一个事务开始

    注意: 如果使用请求/回复机制, 即发送一个消息, 同时希望在同一个事务中等待接受该消息的回复, 则程序将被挂起, 因为直到事务提交, 发送操作操作才会真正执行; 谨慎使用


JMS的PTP 模型

JMS PTP (point to point):模型定义了客户端如何向队列发送消息, 从队列接受消息, 以及浏览队列中的消息.

PTP的一些特点:

1. 如果在Session 关闭时, 有一些消息已经被收到, 但是还没有被签收(acknowledged),那么,当消费者下次连接到相同的队列时, 这些消息还会被再次接收

2. 如果用户在receive 方法中设定了消息选择条件, 那么不符合条件的消息会留在队列中, 不会被接收到

3. 队列可以长久的保存消息,直到消费者接收到消息, 消费者不需要因为担心消息会丢失而时刻与队列保持**的连接状态,充分体现了异步传输的优势


JMS的PUB/SUB

此模型定义了如何向一个内容节点发布和订阅消息, 这些节点被称作topic主题,可以被认为是消息的传输中介,发布者 发布消息到主题, 订阅者从主题中订阅消息. 主题使得消息订阅者和消息发布者, 保持相互独立, 不需要接触即可保证消息的传送.

特点: 

1. 消息订阅分为非持久订阅和持久订阅

    非持久订阅,只有当客户端处于**状态, 也就是和JMS provider 保持连接状态才能收到发送到某个主题的消息, 而当客户端处于离线状态, 这个时间段发送到主题的消息会丢失.

    持久订阅时, 客户端向JMS注册一个识别自己身份的ID, 当这个客户端处于离线时,JMS provider会为这个ID保存所有发送主题的消息, 当客户再次连接到JMS Provider时, 会根据自己的ID得到所有当自己处于离线时发送到主题的消息.

2. 如果用户在recieve方法中设定了消息选择条件, 那么不符合条件的消息不会被接受

3. 非持久订阅的状态下, 不能恢复或重新派送一个未签收的消息, 只有持久订阅才能恢复或重新派送一个未签收的消息

4, 当所有消息必须被接受, 则使用持久订阅,. 当丢失消息能被容忍, 则使用非持久订阅


ActiveMq(三)JMS可靠性机制

设置持久化!activemq.xml

ActiveMq(三)JMS可靠性机制


(发送端)

ActiveMq(三)JMS可靠性机制

订阅端

ActiveMq(三)JMS可靠性机制





相关文章:

  • 2022-12-23
  • 2021-10-04
  • 2022-12-23
  • 2021-11-07
  • 2022-12-23
  • 2021-10-02
  • 2021-08-24
猜你喜欢
  • 2021-06-06
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-03
  • 2022-12-23
相关资源
相似解决方案