快速业务通道

JMS - 异步消息的使者 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20

JMS - 异步消息的使者

时间:2011-01-17 BlogJava Chris.Cui

Java消息服务(JMS)实现了异步消息的传递,在企业级的应用中,极大的简化了异步通信系统的实现,使用消息传递的优点在于保持了系统的松散耦合。

JMS支持点到点(P2P)模式和发布-订阅(pub/sub)模式。点到点消息模式依赖于消息队列概念,它将消息发送到称为队列(Queue)的特定目的地,接受者从队列中获取消息,对其进行处理。发布-订阅模式则是将消息发送到成为主题(Topic)的目的地,使用者通过订阅消息来获取。因此,我们可以简单的将Queue和Topic理解为消息的存储器,或者接受器,通过它将消息转发给消息最终的接收者。对于消息,可以是一个简单的字符串,一段二进制流,或者一个任意的对象,当前JMS支持五种类型的消息:TextMessage、MapMessage、ByteMessage、 StreamMessage、ObjectMessage。

下面来看一段P2P的完整实现,

sender:

Context context = new InitialContext(); QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory) context.lookup("QueueConnectionFactoryTest"); QueueConnection queueConnection = queueConnectionFactory.createQueueConnection(); QueueSession queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); Queue queue = (Queue) context.lookup("QueueTest"); QueueSender queueSender = queueSession.createSender(queue); TextMessage message = queueSession.createTextMessage(); message.setText("Hello JMS!"); queueSender.send(message); queueConnection.close();

Receiver:

Context context = new InitialContext();         QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory) context.lookup("QueueConnectionFactoryTest");         QueueConnection queueConnection = queueConnectionFactory.createQueueConnection();         QueueSession queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);         Queue queue = (Queue) context.lookup("QueueTest");         QueueReceiver queueReceiver = queueSession.createReceiver(queue);         queueConnection.start();         while (true) {              Message m = queueReceiver.receive();              if (m instanceof TextMessage) {                  TextMessage message = (TextMessage) m;                  System.out.println("Reading message: " + message.getText());              } else {                  break;              }         }         queueConnection.close();

JMS - 异步消息的使者(2)

时间:2011-01-17 BlogJava Chris.Cui

由上代码可以看出,sender和receiver的实现基本是相同的,下面我们再来对比一下pub/sub模式的实现,

publisher:

Context context = new InitialContext(); TopicConnectionFactory topicConnectionFactory = (TopicConnectionFactory) context.lookup("TopicConnectionFactoryTest"); TopicConnection topicConnection = topicConnectionFactory.createTopicConnection(); TopicSession topicSession = 

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号