java jms topic_jms中topic和queue的区别

一:Jboss的环境配置(略)

二:开发环境jboss-4.2.2.GA+JDK1.6

三:JMS简单介绍

1.当你发送一个消息,你不能直接发送到对此消息感兴趣的接受者。而是你发送到一个目的地。对此消息感兴趣的接受者必须连接到目的地,得到此消息或在目的地设置订阅。

2.在JMS中有两种域:topics和queues。

一个消息发送到一个topics,可以有多个客户端。用topic发布允许一对多,或多对多通讯通道。消息的产生者被叫做publisher,消息接受者叫做subscriber。

queue是另外一种方式,仅仅允许一个消息传送给一个客户。一个发送者将消息放在消息队列中,接受者从队列中抽取并得到消息,消息就会在队列中消失。第一个接受者抽取并得到消息后,其他人就不能在得到它。

为了能发送和接收消息,必须得到一个JMS连接。该连接是使用JMS Provider得到连接的,在得到连接之后,建立一个会话(Session)。然后再建立publisher/sender来发送消息或subscriber/receiver来接收消息。运行时,如果使用topic那么publisher或subscriber通过一个topic来关联,如果使用queue,则sender或receiver通过queue来关联起来。

3.在JMS框架中运转的方法如下:

(1)得到一个JNDI初始化上下文(Context);

(2)根据上下文来查找一个连接工厂TopicConnectFactory/ QueueConnectionFactory (有两种连接工厂,根据是topic/queue来使用相应的类型);

(3)从连接工厂得到一个连接(Connect有两种[TopicConnection/ QueueConnection]);

(4)通过连接来建立一个会话(Session);

(5)查找目的地(Topic/ Queue);

(6)根据会话以及目的地来建立消息制造者(TopicPublisher/QueueSender)和消费者(TopicSubscriber/ QueueReceiver).

四:代码分析

1)初始化上下文

配置JNDI的一个方法是通过属性文件jndi.properties。在这个文件中使用正确的值,并且把它所在的路径包含到classpath中,它比较容获得正确初始化上下文。jndi.properties文件的内容如下:

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.provider.url=localhost:1099 java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces

把该文件放置的路径成为你的classpath的一部分。

2)查找连接工厂

查找连接工厂的代码如下:对于一个topic目的地

TopicConnectionFactory topicFactory = (TopicConnectionFactory) context.lookup (“ConnectionFactory”)

Queue目的地:QueueConnectionFactory queueFactory = (QueueConnectionFactory ) context.lookup (“ConnectionFactory”)

3)建立连接和会话。

对于topic代码如下://建立一个连接

topicConnection = topicFactory.createTopicConnection();

//建立一个会话

topicSession = topicConnection.createTopicSession(false, //不需要事务Session.AUTO_ACKNOLEDGE //自动接收消息的收条。);

对于queue代码如下://建立一个连接

queueConnection = queueFactory.createQueueConnection();

//建立一个会话

queueSession = queueConnection .createQueueSession(false, //不需要事务Session.AUTO_ACKNOLEDGE //自动接收消息的收条。);

4)查找目的地

对于topic查找一个testTopic目的地

Topic topic = (Topic) context.lookup(“topic/testTopic”);

对于queue查找一个testQueue目的地Queue queue= (Queue) context.lookup(“queue/testQueue”);

(5)建立一个消息制造者Message Producer (topic publisher/ queue sender)消息制造者是一个由session创建的对象,主要工作是发送消息到目的地。

对于一个topic,需要通过TopicSession来创建一个TopicPublisher。代码如下:TopicPublisher topicPublisher = TopicSession.createPublisher(topic);

对于一个queue,需要通过QueueSession来创建一个QueueSender。代码如下:QueuePublisher queuePublisher = queueSession.createSender(queue);

6)消息发送

建立一个TestMessage并且publish它,代码:

TextMessage message = topicSession.createTestMessage(); message.setText(msg); topicPublishe.publish(topic, message);

建立一个TestMessage并且send它,代码:

TextMessage message= queueSession.createTestMessage(); message.setText(msg); queueSender.send(queue, message);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值