public class JMSRequestReply implements MessageListener {
private InitialContext context;
private QueueConnectionFactory queueConnectionFactory;
private QueueConnection queueConnection;
private QueueSession queueSession;
private Queue queue;
public JMSRequestReply() {
try {
context = new InitialContext();
queueConnectionFactory = (QueueConnectionFactory) context
.lookup("ConnectionFactory");
// 区别之处
queue = (Queue) context.lookup("queue/myQueue");
queueConnection = queueConnectionFactory.createQueueConnection();
queueSession = queueConnection.createQueueSession(false,
QueueSession.AUTO_ACKNOWLEDGE);
// 使用QueueReceiver启用监听,而不是会话QueueSession
QueueReceiver queueReceive = queueSession.createReceiver(queue);
queueReceive.setMessageListener(this);
queueConnection.start();
} catch (NamingException e) {
e.printStackTrace();
} catch (JMSException e) {
e.printStackTrace();
}
}
public void receive() {
QueueReceiver queueReceiver;
QueueSender queuesender = null;
TextMessage tm = null;
try {
System.out
.println("------------------->i'm a receiver<-------------------");
queueReceiver = queueSession.createReceiver(queue);
queueConnection.start();
// 设置监听类
// queueReceiver.setMessageListener();
System.out
.println("------------------->waiting<-------------------");
// ObjectMessage om = (ObjectMessage) queueReceiver.receive();
// LogEntry lg = (LogEntry) om.getObject();
// System.out.println(lg.getMessage());
TextMessage tms = (TextMessage) queueReceiver.receive();
System.out.println(tms.getText());
// File操作
// 返回NG、OK
// return om.getObject();
queuesender = queueSession
.createSender((Queue) tms.getJMSReplyTo());
tm = queueSession.createTextMessage();
// tm.setJMSReplyTo(queue);
tm.setText("OK");
queuesender.send(tm);
} catch (JMSException e) {
e.printStackTrace();
try {
tm.setText("NG");
queuesender.send(tm);
} catch (JMSException e1) {
e1.printStackTrace();
}
} finally {
destroy();
}
}
public String send(LogEntry log) {
try {
System.out
.println("------------------->i'm a sender<-------------------");
// QueueSender queuesender = queueSession.createSender(queue);
QueueRequestor queueRequestor = new QueueRequestor(queueSession,
queue);
queueConnection.start();
ObjectMessage ob = queueSession.createObjectMessage(log);
// TextMessage txs = queueSession.createTextMessage();
// txs.setText("I'am zhuyefeng !it's true");
TextMessage reply = (TextMessage) queueRequestor.request(ob);
System.out.println("------------------->等待<-------------------");
String replys = reply.getText();
return replys;
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
} finally {
destroy();
}
}
public void destroy() {
try {
queueConnection.close();
queueSession.close();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void onMessage(Message msg) {
QueueSender queuesender = null;
TextMessage tm = null;
try {
tm = queueSession.createTextMessage();
tm.setJMSReplyTo(queue);
System.out.println("------------------->i'm a receiver<-------------------");
// queueReceiver = queueSession.createReceiver(queue);
// 设置监听类
// queueReceiver.setMessageListener();
ObjectMessage om = (ObjectMessage) msg;
System.out
.println("------------------->Listening waiting<-------------------");
LogEntry lg = (LogEntry) om.getObject();
System.out.println(lg.getMessage());
// File操作
// 返回NG、OK
// return om.getObject();
// 此处必须这样设置
System.out.println("目的地:"+ om.getJMSReplyTo()+"比较:----->"+queue);
queuesender = queueSession.createSender((Queue) om.getJMSReplyTo());
tm.setText("OK");
queuesender.send(tm);
} catch (JMSException e) {
e.printStackTrace();
try {
tm.setText("NG");
queuesender.send(tm);
} catch (JMSException e1) {
e1.printStackTrace();
}
}finally {
destroy();
}
}
}
得到了16:28:34,734 ERROR [STDERR] javax.jms.InvalidDestinationException: This destination does not exist! QUEUE.JMS_TQ7 异常
问题已经解决。
方法:是消息接收端最后不要断开连接,使其一直处于监听状态!
分享到:
相关推荐
Spring发送接收JMS消息 文档+例子
JMS接收端所需要用到的jar包,如果有需要得朋友就下载吧,发送端暂时不发以后再发。
-> 创建消息 -> 发送消息 -> 接收消息 -> 读取消息 为什么要使用消息 理由很简单,消息是一个分布式的低耦合通讯方案。A发送一个消息到一个agent ,B作为接受者去agent上获取消息。但是A,B不需要同时到agent上去...
利用soapUI3.5测试JMS消息 利用soapUI3.5测试JMS消息
weblogic中使用JMS发送和接受消息(Queue and TOPIC)
NULL 博文链接:https://a3mao.iteye.com/blog/313531
JMS消息队列机制及众多各种各样的案例,可供学习与参考。
消息中间件和JMS消息服务.pdf消息中间件和JMS消息服务.pdf消息中间件和JMS消息服务.pdf消息中间件和JMS消息服务.pdf消息中间件和JMS消息服务.pdf消息中间件和JMS消息服务.pdf消息中间件和JMS消息服务.pdf
JMS消息处理优化方案
JMS消息模型…………………………………………………………………………………..7 JMS消息工具…………………………………………………………………………………..10 JMS Point-To-Point模式…………………………...
JMS消息发送及订阅。详细代码,很简单。
JMS-java message Service ,消息队列原理介绍,适合activeMQ开发使用
openjms实现jms消息发布于订阅 openjms实现jms消息发布于订阅 openjms实现jms消息发布于订阅 openjms实现jms消息发布于订阅 openjms实现jms消息发布于订阅
消息中间件和JMS消息服务.rar 消息中间件和JMS消息服务.rar
JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS
本教程描述了消息服务的概念和一些应用事例,说明了 JMS 的基本概念和结构,并就消息服务的发布/订阅、点对点模式编写了简单代码,最后讨论的JMS的一些高级问题,如食物、可靠性、可恢复性等。
内容为JMS消息中间件在数据集成系统中的研究与应用,格式为CAJ,页数为为54
理由很简单,消息是一个分布式的低耦合通讯方案。A发送一个消息到一个agent ,B作为接受者去agent上获取消息。但是A,B不需要同时到agent上去注册。agent作为一个中转为A,B提供搞效率的通讯服务。
activemq与spring整合发送jms消息入门实例 jar 包和实例代码都在压缩包里了