Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2351111
  • 博文数量: 321
  • 博客积分: 3440
  • 博客等级: 中校
  • 技术积分: 2992
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-24 09:08
个人简介

我就在这里

文章分类

全部博文(321)

文章存档

2015年(9)

2014年(84)

2013年(101)

2012年(25)

2011年(29)

2010年(21)

2009年(6)

2008年(23)

2007年(23)

分类: Java

2014-05-29 21:47:49

一: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 那么publishersubscriber 通过一个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);

阅读(770) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~