`
huchangan2005
  • 浏览: 78291 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

关于 Jms Topic 持久订阅

阅读更多

消息中间件的 Topic 机制,一般情况下没有保存消息。一没连接,再次连接时不会收到失去连接期间的消息。这种机制在对消息可丢失的场景应用好。当然消息中间件都有保存消息的功 能。Jms 规范里定义了 DurableSubscriber。

Jms 规范中的关于持久化订阅的一小段:

非持久化订阅持续到它们订阅对象的生命周期。这意味着,客户端只能在订阅者活动时看到相关主题发布的消息。如果订阅者不活动,它会错过相关主题的消息。
如果花费较大的开销,订阅者可以被定义为durable(持久化的)。持久化的订阅者注册一个带有JMS保持的唯一标识的持久化订阅 (subscription)。带有相同标识的后续订阅者会再续前一个订阅者的订阅状态。如果持久化订阅没有活动的订阅者,JMS会保持订阅
消息,直到消息被订阅接收或者过期。

看 Jms 规范看得晕,看下关键代码好理解。

要用持久化订阅,发送消息者要用 DeliveryMode.PERSISTENT 模式发现,在连接之前设定。订阅者要设置客户端名,调用 session.createDurableSubscriber。

发送者:

Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
Destination destination = session.createTopic("my-topic"); 

MessageProducer producer = session.createProducer(destination); 
producer.setDeliveryMode(DeliveryMode.PERSISTENT); //设置保存消息 
connection.start(); //设置完了后,才连接 

接收者:

connection.setClientID("client-name"); 
final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
 
Topic topic = session.createTopic("my-topic"); 
MessageConsumer consumer = session.createDurableSubscriber(topic, "my-sub-name"); 
connection.start(); 

最后,先运行 Receiver,目的是注册这个客户端(好让消息中间件服务器为这个客户保存消息),然后关了这个 Receiver, 启动 Sender,发现消息,再启动 Receiver 就可以收到离线消息。

可以同时启用普通的订阅者:MessageConsumer consumer = session.createConsumer(topic); 作对比。

使用中觉得到,消息服务器为每一个离线注册的客户端保存独立的消息,它们上线时,再发给出去。

这种机制就像听课:老师在讲课,带有录音机的学生就可以签到后逃课,持久订阅者就是带有录音机的学生。

分享到:
评论

相关推荐

    JMS--消息持久订阅者测试

    ### JMS 消息持久订阅者测试知识点解析 #### 一、引言 Java消息服务(JMS)是Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。JMS定义了应用程序如何...

    如何实现ActiveMq的Topic的持久订阅

    总结来说,实现ActiveMQ的Topic持久订阅涉及创建Topic、设置持久订阅者、发送和接收消息,以及管理订阅。理解这些概念和操作,有助于在实际项目中构建可靠的分布式系统通信架构。在开发过程中,结合源码阅读和工具...

    spring下queue与持久订阅topic实现

    本篇文章将深入探讨如何在Spring环境下利用Java消息服务(JMS)实现队列(Queue)和持久订阅(Persistent Subscription)主题(Topic)的功能。我们将从源码层面解析其工作原理,并提供一些实用工具的使用方法。 ...

    JMS IBM MQ 订阅模式

    1. **消息模型**:JMS支持两种主要的消息传递模型——点对点(Queue)和发布/订阅(Topic)。点对点模式中,消息从一个生产者发送到一个队列,然后由一个消费者接收。发布/订阅模式下,消息由发布者发送到主题,多个...

    JMS实现的信息的广播订阅

    6. **持久订阅和临时订阅**: 在JMS中,订阅可以是持久的或临时的。持久订阅确保即使消费者在消息发布时离线,也能在重新连接时接收到之前错过的消息。临时订阅则只在消费者在线时有效。 7. **消息选择器**: 如果...

    JMS中topic和queue两种实现方式

    JMS主要提供了两种消息模式:主题(Topic)和队列(Queue),这两种模式在实现方式和功能上有所不同。 1. 主题(Topic): - **发布/订阅模型**:主题基于发布/订阅模型,其中多个生产者可以发布消息到一个特定的...

    ActiveMQ订阅模式持久化实现

    2. **创建订阅者**:在Java代码中,消费者需要通过`MessageConsumer`接口的`createDurableSubscriber`方法创建一个持久订阅。订阅时需提供一个唯一的名字,以便于识别和恢复订阅状态。 ```java Topic topic = ...

    weblogic中使用JMS发送和接受消息

    本文将详细介绍如何在WebLogic中使用JMS来创建Queue(队列)和TOPIC(主题)并进行消息的发送与接收。 ### 一、JMS基本概念 1. **Queue(队列)**:队列是一种点对点的消息传递模型,其中每个消息只会被一个消费者...

    JMS之ActiveMQ 点对点+发布/订阅

    发布/订阅模型基于主题(Topic)进行通信。在这里,生产者发布消息到一个主题,多个消费者可以订阅这个主题以接收消息。与点对点模型不同,发布/订阅模型支持一对多的消息传递,即一条消息可以被多个订阅者接收。 -...

    应用openJMS实现JMS消息发布于订阅

    这通常通过`createDurableSubscriber()`方法完成,如果需要持久订阅(即使订阅者断开连接也能接收到消息)。 ```java MessageConsumer consumer = session.createDurableSubscriber(topic, "Subscriber1"); ``` ...

    jms培训PPT

    - **主题(Topic)**: 支持发布/订阅模式,多个消费者可以订阅同一个主题,当一个生产者发送消息到主题时,所有订阅该主题的消费者都能接收到消息。 - **队列(Queue)**: 支持点对点模型,每个消息只能被一个消费...

    ActiveMQ-Topic订阅发布模式Demo

    6. **订阅Topic**:消费者通过MessageConsumer订阅Topic,可以设置持久化订阅(Durable Subscription)来保证即使消费者离线也能接收到消息。 7. **消息过滤**:在订阅时,可以使用Selector来过滤接收到的消息,只...

    Queue与Topic的比较

    Durable Subscription 是一种持久化的订阅方式,JMS Provider 将会费点儿脑筋来记下这个 Durable Subscription 的消息订阅者是谁,即使当消息到达之后,该 Durable Subscription 消息订阅者不在,JMS Provider 也会...

    spring集成activemq演示queue和topic 持久化

    而主题(Topic)则支持一对多广播,多个订阅者可以接收到相同的消息,适合发布/订阅模式。 集成Spring和ActiveMQ的第一步是添加依赖。在Maven项目中,你需要在`pom.xml`文件中引入Spring和ActiveMQ的相关依赖。例如...

    JMS 简介以及Weblogic配置JMS图解

    订阅者需要保持活跃状态来接收消息,或者创建持久订阅以在离线时接收消息。 **消息传递方式** JMS提供两种消息传递模式: - **NON_PERSISTENT**:非持久性消息,最多投递一次,适合不需要确保消息完整到达的情况...

    JMS demo 及 资料

    2. **消息队列(Message Queue)与主题(Topic)**: JMS提供了两种消息模型:点对点(Point-to-Point,P2P)和发布/订阅(Publish/Subscribe)。在P2P模型中,消息被发送到一个消息队列,每个消息只被一个消费者接收...

    webLogic9.2配置JMS步骤

    WebLogic 9.2配置JMS(Java Message Service)涉及一系列步骤,主要目的是为了实现分布式消息传递,包括点对点的Queue模式和发布/订阅的Topic模式。在本例中,我们将专注于配置发布/订阅模式,即Topic。以下是详细的...

    JMS的一个非常好的demo

    4. **持久订阅者(Durable Subscription)**:在发布/订阅模型中,如果一个订阅者在发布消息时离线,那么它可能会错过这些消息。持久订阅者解决了这个问题,通过在订阅者离线时保留其状态,当订阅者重新上线时,它...

    java.jms.jar JMS需要的JAR包

    `javax.jms.jar` 文件中包含了如`javax.jms.Queue`, `javax.jms.Topic`, `javax.jms.MessageProducer`, `javax.jms.MessageConsumer`, `javax.jms.ConnectionFactory`等关键接口,以及其他辅助类和异常类,开发者...

Global site tag (gtag.js) - Google Analytics