使用JMS Topic的发布/订阅式消息发送在几方面类似于点到点的消息发送。以下是两种消息发送方式共同的特点:
•消息发送可以是面向对象的,允许将整个的对象作为消息发送。
•消息发送可以是事务性的。
•消息发送可以是同步或异步的。
•消息发送可以与基础的第三方产品集成。
•消息可以发送给在消息发送时不在运行的消息消费者(即QueueReceiver或TopicSubscriber)。
•消息一旦被递送到队列或主题,发送消息的函数调用就会立即返回。
•可以显式地或自动地确认收到消息。
发布/订阅式消息发送与点到点消息发送之间也有几点不同:
•发布/订阅式消息发送是一对多的,而点到点消息发送是一对一的。
•发布的消息只递送给Topic当前的预订者。客户只能接收到他向一个Topic预订了的那些消息。而在点到点消息发送中,永久的消息将一直在Queue中,直到它超时或者某个接收者来取走该消息。
•发布/订阅式消息发送中的永久消息是由“耐久的预订”提供的。JMS提供者存储由于预订者出于某种原因不可用而无法递送给预订者的消息。在下次预订者连接上的时候,这些存储的消息将会被递送给他。这确保了客户预订一个Topic之后,所有发布的消息都会递送给他,哪怕该预订者不是总在运行。如果预订不是耐久的,在预订者掉线时发布的任何消息都不会递送到预订者。
本文章所描述的QUEUE与TOPIC实现如下:
附件中的jmsproducer压缩包中JAVA工程为生成QUEUE与TOPIC的例子,jmsconsumer压缩包中JAVA工程为消费QUEUE与TOPIC例子。
另外每个工程下LIB目录下的activemq-common.jar为打包的公共类。
在jmsproducer工程中的activemq-producer.xml文件中为持久订阅者提供clientID
配置如下:
<bean id="durableTopicJmsConnectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://localhost:61617?wireFormat.maxInactivityDuration=0"/>
<property name="clientIDPrefix" value="topicClient"/>
</bean>
clientIDPrefix指定了consumer的clientID的前缀,符合此前缀规则的consumer将成为该TOPIC的持久订阅者。
对应的jmsconsumer工程的TOPIC container配置:
<bean id="topicListenerContainerA"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="durableTopicJmsConnectionFactory" />
<property name="destination" ref="TOPIC" />
<property name="messageListener" ref="topicListenerA" />
<property name="sessionAcknowledgeModeName" value="AUTO_ACKNOWLEDGE"/>
<property name="receiveTimeout" value="20000"/>
<property name="subscriptionDurable" value="true"/>
<property name="clientId" value="topicClientA"/>
<property name="durableSubscriptionName" value="topicClientA" />
</bean>
若将subscriptionDurable设置为ture,则必须提供clientId。
分享到:
相关推荐
NULL 博文链接:https://sharron5.iteye.com/blog/794430
本人在学习activemq,然后 测试完成的demo, 包含了queue,topic,持久化到mysql,订阅模式,包好用
Queue与Topic的比较,学习JMS和activemq必须看的资料之一
消息队列 Queue与Topic区别
spring boot jsm ibmmq topic queue 两种方式实现
JMS中topic和queue两种实现方式
Apache ActiveMQ Queue Topic 详解 教程 加入代码解释说明
linux上queue.h,可用于一直实现双向链表.亲测非常好用 linux上queue.h,可用于一直实现双向链表.亲测非常好用 linux上queue.h,可用于一直实现双向链表.亲测非常好用
spring-jms使用queue发送消息简单例子,详细参考:http://blog.csdn.net/xiejx618/article/details/38849249
11.javaQueue 接口及其实现类.zip11.javaQueue 接口及其实现类.zip11.javaQueue 接口及其实现类.zip11.javaQueue 接口及其实现类.zip11.javaQueue 接口及其实现类.zip11.javaQueue 接口及其实现类.zip11.javaQueue ...
基于JMS标准的消息中间件实现的产品有很多,JBossMQ、ActiveMQ、OpenMQ、OpenJMS等等,最常用的还是apache的ActiveMQ。有时也使用Sun的OpenMQ。在官网http://mq.java.net/处可以下载。Open Message Queue是Sun Java ...
spring MVC 初始启动concurrent blocking queue,通过@PostConstruct 注解实现,详情参考我的博客
spring-redis-mq, 基于 Spring 和 Redis 的分布式消息队列(MessageQueue)实现
本章我将通过spring jms和activemq实现单Web项目服务器间异步访问和多Web项目服务器间异步访问。 一. 简介 1. 什么是Apache ActiveMq Apache ActiveMq是最流行和最强大的开源消息和集成服务器。同时Apache ActiveMq...
数据结构Queue的实现在queue.h中, testQ为queue的用法
队列的实现C++···························
activemq的queue队列模式的maven,spring的demo
队列类Queue的C++实现