ImageVerifierCode 换一换
格式:DOCX , 页数:42 ,大小:183.54KB ,
资源ID:17328610      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17328610.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(JMS详解Word文档下载推荐.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

JMS详解Word文档下载推荐.docx

1、ConnectionFactory connectionFactory = (ConnectionFactory)ctx.lookup(JNDI_NAME );如果应用程序与服务器不在同一个虚拟机时Hashtable env = new Hashtable();env.put(Context.INITIAL_CONTEXT_FACTORY,com.apusic.naming.jndi.CNContextFactoryenv.put(Context.PROVIDER_URL, iiop:/hostname:4888 /取决于地址和端口new InitialContext(env);JNDI_NA

2、ME DestinationsDestinations 是指消息发送客户端的消息目标和消息接收客户端的消息来源,它也是预先在jms.xml定义好的。对于PTP类 型,Destinations对应的类型为Queue,对于Pub/Sub 类型,Destinations对应的类型为Topic。获取方式:Destination myDest = (Destination) ctx.lookup(testTopicQueue myQueue = (Queue) ctx.lookup(testQueue或者:/通过下面这种方式创建出来的Queue,代表一个远程 AMQ 服务器上的队列,符号之前/是队列的名

3、称,符号之后是服务器路由名。发送消息到该队列时,会将消息路由到符号之后/指定的服务器,并将消息放进符号之前指定的队列。Queue messageQueue = queueSession.createQueue(testQueueServerRouterName Connections为 客户端和消息服务器建立的一个连接,它可以创建Session,并且可以创建多个Session(稍后介绍)。获取方法:Connection connection = connectionFactory.createConnection();当使用完连接的时候,你需要关闭连接,否则该连接会一直保持。关闭连接的时候它同

4、时会关闭该连接产生的 Session。connection.close();连接创建好后,一般先调用 start() 方法。 SessionsSessions是单线程的,用来创建消息发送 者和消息接受者的上下文。Sessions 同时还可以执行 Message ListenersSession session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);Sessio

5、n session = connection.createSession(false, Session.DUPS_OK_ACKNOWLEDGE);三种应答模式的差别,请参照 AMQ 相关概念中的应答模式。 Message Producersmessage producer是由Session创建的一个对象,它是用来向 Destinations 发送信息的。MessageProducer producer = session.createProducer(myDest);MessageProducer producer = session.createProducer(myTopic);Queue

6、Sender sender = queueSession.createSender(messageQueue);也可以创建时不指定Destinations ,发送时再指定。创建好后,可以继续创建消息,然后调用发送方法发送消 息。TextMessage message = session.createTextMessage();message.setText(msg_text);producer.send(message);当发送时指定 Destinations ,你的使用方法如下:MessageProducer anon_prod = session.createProducer(null);

7、anon_prod.send(myQueue, message); Message Consumersmessage consumer是指从 destination 接收消息的对象MessageConsumer consumer = session.createConsumer(myQueue);MessageConsumer consumer = session.createConsumer(myTopic);你还能使用 Session.createDurableSubscriber 创建一个持久的Topic注册对象。它 和普通的Topic注册对象的区别是不管当前是否在线,均能收到对应Des

8、tination的全部信息String subName = MySub;MessageConsumer topicSubscriber = session.createDurableSubscriber(myTopic, subName);停止持久的Topic注册对象使用以下方法。topicSubscriber.close();session.unsubscribe(使用Consumer前应该先调用 connection.start() 方法connection.start();Message m = consumer.receive();/或者Message m = consumer.rec

9、eive(3000); / 3秒后超时 Message Listeners这 是为异步调用设计的一种方式。它是把 消息监听器 注册到consumer中,然后消息监听器实现一个onMesseag()方法,当消息到达是,会调用消息监听器的onMesseag()方法。Listener myListener = new Listener();consumer.setMessageListener(myListener); Message SelectorsAMQ 允许消息选择性的接收,语法符合SQL92。例如:客户只收取消息属性 NewsType 为 Sports和 Opinion的消息。NewsTy

10、pe = Sports OR NewsType = Opinion然后再创建 Consumer时指定 Selectors。例如createConsumer(Destination destination, String messageSelector) createConsumer(Destination destination, String messageSelector, boolean NoLocal) createDurableSubscriber(Topic topic, String name, String messageSelector, boolean noLocal) 把

11、其中的messageSelector参数变成NewsType = 即可。6.3.客 户端方式使用JMS6.3.1.开发JMS Client的步骤一 般来说,一个JMS 应用是几个JMS 客户端交换消息,开发JMS 客户端应用由以下几步构成: 用 JNDI 寻找得到ConnectionFactory 对象; 用 JNDI 寻找或者Session的CreateQueue(CreateTopic)方法得到目标队列或主题对象,即Destination 对象; 用ConnectionFactory 创建Connection 对象; 用Connection 对象创建一个或多个JMS Session; 用S

12、ession 和Destination 创建MessageProducer 和MessageConsumer; 通知Connection 开始传递消息。6.3.2.PTP模型应用PTP 模型主要包含消息的发送和接收,下面我们举例说明: 发 送消息1. 首先编辑发送节点的 config/jms.xml 文件,加上以下一段配置:. The default queue connection factorydisplay-nameQueueConnectionFactoryjndi-namejms/QueueConnectionFactory/connection-factory(如果同名的conne

13、ction-factory 已经存在,就不用再创建)同时还要编辑消息的目的节点的 config/jms.xml 文件,加上以下一段配置:queue clustered=falsequeue-nametestQueue/queue(如果同名的queue 已经存在,就不用再创建)2. 启动 AMQ由于 AMQ 目前对配置文件的读取是在启动阶段,所以需要重新启动服务器。3. 编写发送消息客户端代码:Send.javaimport javax.jms.*;import javax.naming.*;import java.io.*;import java.util.*;import java.rmi.

14、RemoteException;/* * Title: JMS * Description: JMS Test * Copyright: Copyright (c) 2003 * Company: Apusic * author Apusic * version 1.0 */public class Send String queueName = /消息的目的队列的队列名 String routerName = RouterB/消息的目的节点的路由名 QueueConnectionFactory queueConnectionFactory = null; Queue queue = null

15、; QueueConnection queueConnection = null; QueueSession queueSession = null; QueueSender queueSender = null; TextMessage message = null; public static void main(String args) throws Exception InitialContext ic = getInitialContext(); Send sender = new Send(); sender.init(ic) ; sender.sendMessage(); sen

16、der.close(); public void init(InitialContext ctx) throws Exception queueConnectionFactory = (QueueConnectionFactory)ctx.lookup(jms/QueueConnectionFactory queueConnection = queueConnectionFactory.createQueueConnection(); public void sendMessage() throws JMSException,RemoteException queueSession = que

17、ueConnection.createQueueSession(false,Session.AUTO_ACKNOWLEDGE); /队列由:队列名 + 目的节点路由名 在网络中唯一标识,通过该方式创建的队列 /将代表远程节点上的某个队列 queue = queueSession.createQueue(queueName + + routerName); queueSender = queueSession.createSender(queue); queueSender.setDeliveryMode(DeliveryMode.PERSISTENT); message = queueSess

18、ion.createTextMessage(); message.setText(The Message from testQueue queueSender.send(message); public void close() throws JMSException if (queueConnection!=null) queueConnection.close(); private static InitialContext getInitialContext() throws NamingException Hashtable env = new Hashtable(); env.put

19、(Context.INITIAL_CONTEXT_FACTORY, env.put(Context.PROVIDER_URL, /localhost: return (new InitialContext(env); 接收消息该 部分建立在发送消息时 jms.xml 已经配置好connection-factory,queue 的前提下 在目的节点编写接收消息客户端代码:Receive.javapublic class Receive QueueReceiver queueReceiver = null; Receive receiver = new Receive(); receiver.in

20、it(ic) ; receiver.TBreceiveMessage();/你可以在此处调用YBreceiveMessage receiver.close(); /采用以下的lookup方法找回来的队列是本地节点的队列 queue = (Queue) ctx.lookup(queueName); /假如想收取远程节点的队列上的消息时,采用以下的createQueue方法创建一个远程的队列。 在网络中唯一标识。 /通过该方式创建的队列将代表远程节点上的某个队列,收取消息时将直接收取该节点的该队列上的消息。 /queue = queueSession.createQueue(queueName +

21、 public void TBreceiveMessage() throws NamingException, JMSException,RemoteException queueReceiver = queueSession.createReceiver(queue); queueConnection.start(); for (;) message = (TextMessage) queueReceiver.receive(); System.out.println(Reading message: + message.getText(); if (message.getText().eq

22、uals(quit) break; public void YBreceiveMessage() throws NamingException, JMSException,RemoteException,IOException /register my textListener which comes from MessageListener TextMessageListener textListener = new TextMessageListener(); queueReceiver.setMessageListener(textListener);To end program, enter Q or q, then InputStreamReader reader = new InputStreamReader(System.in); char answer = 0 while (!(answer = q) | (answer = Q) answer = (char)reader.read(); if (queueReceiver! queueReceiver.close(); if (queueSession! queueSession.close(); env.put(Context.INITIAL_CONTEXT_FACTORY,/localh

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

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