深入掌握JMSWord下载.docx

上传人:b****6 文档编号:19479237 上传时间:2023-01-06 格式:DOCX 页数:18 大小:23.41KB
下载 相关 举报
深入掌握JMSWord下载.docx_第1页
第1页 / 共18页
深入掌握JMSWord下载.docx_第2页
第2页 / 共18页
深入掌握JMSWord下载.docx_第3页
第3页 / 共18页
深入掌握JMSWord下载.docx_第4页
第4页 / 共18页
深入掌握JMSWord下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

深入掌握JMSWord下载.docx

《深入掌握JMSWord下载.docx》由会员分享,可在线阅读,更多相关《深入掌握JMSWord下载.docx(18页珍藏版)》请在冰豆网上搜索。

深入掌握JMSWord下载.docx

至于这个消息什么时候,会被哪个消费者消费,完全取决于消息的接受者。

 

Message:

从字面上就可以看出是被发送的消息。

它有下面几种类型:

StreamMessage:

Java数据流消息,用标准流操作来顺序的填充和读取。

MapMessage:

一个Map类型的消息;

名称为string类型,而值为Java的基本类型。

TextMessage:

普通字符串消息,包含一个String。

ObjectMessage:

对象消息,包含一个可序列化的Java对象

BytesMessage:

二进制数组消息,包含一个byte[]。

XMLMessage:

一个XML类型的消息。

最常用的是TextMessage和ObjectMessage。

Session:

与JMS提供者所建立的会话,通过Session我们才可以创建一个Message。

Connection:

与JMS提供者建立的一个连接。

可以从这个连接创建一个会话,即Session。

ConnectionFactory:

那如何创建一个Connection呢?

这就需要下面讲到的ConnectionFactory了。

通过这个工厂类就可以得到一个与JMS提供者的连接,即Conection。

Producer:

消息的生产者,要发送一个消息,必须通过这个生产者来发送。

MessageConsumer:

与生产者相对应,这是消息的消费者或接收者,通过它来接收一个消息。

前面多次提到JMS提供者,因为JMS给我们提供的只是一系列接口,当我们使用一个JMS的时候,还是需要一个第三方的提供者,它的作用就是真正管理这些Connection,Session,Topic和Queue等。

通过下面这个简图可以看出上面这些概念的关系。

ConnectionFactory---->

Connection--->

Session--->

Message

Destination+Session------------------------------------>

Producer

MessageConsumer

那么可能有人会问:

ConnectionFactory和Destination从哪儿得到?

这就和JMS提供者有关了.如果在一个JavaEE环境中,可以通过JNDI查找得到,如果在一个非JavaEE环境中,那只能通过JMS提供者提供给我们的接口得到了.

深入掌握JMS

(二):

一个JMS例子

前一讲简单的介绍了一下JMS的基本概念,这一讲结合一个例子让大家深入理解前一讲的基本概念.首先需要做的是选择一个JMS提供者,如果在JavaEE环境中可以不用考虑这些.我们选择ActiveMQ,官方地址:

http:

//activemq.apache.org/.网上有很多介绍ActiveMQ的文档,所以在这里就不介绍了.

按照上一讲的这个简图,

首先需要得到ConnectionFactoy和Destination,这里创建一个一对一的Queue作为Destination。

ConnectionFactoryfactory=newActiveMQConnectionFactory("

vm:

//localhost"

);

Queuequeue=newActiveMQQueue("

testQueue"

然后又ConnectionFactory创建一个Connection,再启动这个Connection:

Connectionconnection=factory.createConnection();

connection.start();

接下来需要由Connection创建一个Session:

Sessionsession=connection.createSession(false,Session.AUTO_ACKNOWLEDGE)

现在暂且不用管参数的含义,以后会详细讲到.

下面就可以创建Message了,这里创建一个TextMessage。

Messagemessage=session.createTextMessage("

HelloJMS!

"

要想把刚才创建的消息发送出去,需要由Session和Destination创建一个消息生产者:

MessageProducerproducer=session.createProducer(queue);

下面就可以发送刚才创建的消息了:

producer.send(message);

消息发送完成之后,我们需要创建一个消息消费者来接收这个消息:

MessageConsumercomsumer=session.createConsumer(queue);

MessagerecvMessage=comsumer.receive();

消息消费者接收到这个消息之后,就可以得到它的内容:

System.out.println(((TextMessage)recvMessage).getText());

至此,一个简单的JMS例子就完成了。

下面是全部源码 

importjavax.jms.Connection;

importjavax.jms.Message;

importjavax.jms.MessageConsumer;

importjavax.jms.MessageProducer;

importjavax.jms.Queue;

importjavax.jms.Session;

importjavax.jms.TextMessage;

importorg.apache.activemq.ActiveMQConnectionFactory;

importmand.ActiveMQQueue;

publicclassMessageSendAndReceive{

publicstaticvoidmain(String[]args)throwsException{

finalSessionsession=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

System.out.println("

SendMessageCompleted!

}

}

深入掌握JMS(三):

MessageListener

消息的消费者接收消息可以采用两种方式:

1、consumer.receive()或consumer.receive(inttimeout);

2、注册一个MessageListener。

采用第一种方式,消息的接收者会一直等待下去,直到有消息到达,或者超时。

后一种方式会注册一个监听器,当有消息到达的时候,会回调它的onMessage()方法。

下面举例说明:

MessageConsumercomsumer=session.createConsumer(queue);

comsumer.setMessageListener(newMessageListener(){

@Override

publicvoidonMessage(Messagem){

TextMessagetextMsg=(TextMessage)m;

try{

System.out.println(textMsg.getText());

}catch(JMSExceptione){

e.printStackTrace();

});

深入掌握JMS(四):

实战Queue

Queue实现的是点到点模型,在下面的例子中,启动2个消费者共同监听一个Queue,然后循环给这个Queue中发送多个消息,我们依然采用ActiveMQ。

importjavax.jms.DeliveryMode;

importjavax.jms.JMSException;

importjavax.jms.MessageListener;

publicclassQueueTest{

ActiveMQConnectionFactoryfactory=newActiveMQConnectionFactory("

//创建一个Queue

//创建一个Session

Sessionsession=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

//注册消费者1

MessageConsumercomsumer1=session.createConsumer(queue);

comsumer1.setMessageListener(newMessageListener(){

Consumer1get"

+((TextMessage)m).getText());

//注册消费者2

MessageConsumercomsumer2=session.createConsumer(queue);

comsumer2.setMessageListener(newMessageListener(){

Consumer2get"

//创建一个生产者,然后发送多个消息。

for(inti=0;

i<

10;

i++){

producer.send(session.createTextMessage("

Message:

+i));

运行这个例子会得到下面的输出结果:

Consumer1getMessage:

Consumer2getMessage:

1

2

3

4

5

6

7

8

9

可以看出每个消息直被消费了一次,但是如果有多个消费者同时监听一个Queue的话,无法确定一个消息最终会被哪一个消费者消费。

深入掌握JMS(五):

实战Topic

与Queue不同的是,Topic实现的是发布/订阅模型,在下面的例子中,启动2个消费者共同监听一个Topic,然后循环给这个Topic中发送多个消息。

importjavax.jms.Topic;

importmand.ActiveMQTopic;

publicclassTopicTest{

//创建一个Topic

Topictopic=newActiveMQTopic("

testTopic"

MessageConsumercomsumer1=session.createConsumer(topic);

MessageConsumercomsumer2=session.createConsumer(topic);

MessageProducerproducer=session.createProducer(topic);

运行后得到下面的输出结果:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1