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 异常
问题已经解决。
方法:是消息接收端最后不要断开连接,使其一直处于监听状态!
分享到:
相关推荐
1. **POJO(Plain Old Java Object)**:EJB 3.0允许开发者使用普通的Java对象作为EJB组件,极大地简化了EJB的编写过程。 2. **依赖注入**:通过依赖注入机制,可以自动管理EJB组件之间的依赖关系,减少了配置的...
- POJO(Plain Old Java Object)支持:EJB 3.0允许开发者使用普通的Java类作为bean,不再需要继承特定的基类或实现接口。 - JPA(Java Persistence API):提供了一种统一的持久化模型,替代了原有的CMP和BMP,使得...
- **消息驱动Bean**:作为JMS消息的消费者,接收和处理消息,实现解耦和异步处理。 - **消息生产者**:通常是一个普通的Java类或会话Bean,发布消息到消息队列。 6. **EJB的事务管理** - **自动事务管理**:EJB...
使用Mysql作为关系型数据库,JDBC+Mybatis处理数据层,Redis作为非关系型数据库,Redisson用于Redis通信,FastJSON处理序列化,Maven管理项目,自研消息队列Flash-MQ负责消息传递,Nginx作为HTTP和反向代理服务器。...
开发者可以通过在普通的Java类上添加注解,如@Entity、@Table、@Id等,来声明一个实体类。此外,EJB3.0还引入了自动数据持久化的概念,如@ManyToOne、@OneToMany等关联关系注解,使得数据关系的维护更为简单。 2. ...
在Java中,可以借助于JNI或者第三方库如JMS(Java Message Service)来实现消息队列通信。 5. **共享内存(Shared Memory)**: 共享内存允许多个进程访问同一块内存空间,提供高效的数据交换。Java标准库并不直接...
J2EE API是该平台的核心组成部分,它包含了一系列的接口、类和工具,用于支持诸如Web服务、数据库连接、事务处理、安全性和消息传递等功能。本帮助文档主要针对的是J2EE 5.0版本,这是在2006年发布的一个重要更新,...
通过JMS,应用可以发送和接收消息,实现解耦和异步处理,提高系统的可扩展性和可靠性。 6. **Web容器**:在JavaWeb中,Web应用运行在Web容器内,如Tomcat、Jetty等。容器负责管理Servlet和JSP的生命周期,处理请求...
30. 接口可以继承接口,抽象类可以实现接口,抽象类也可以继承普通类。 31. 启动线程用start(),run()是线程执行的方法。 32. 父类构造器不能被重写,但可以通过super()调用。 33. 不可以继承String类,因为...
JMS提供了一套标准的产生、发送、接收消息的接口,简化了企业级应用程序的开发工作。 9. **WebService**:是一种通过使用因特网标准协议(如HTTP、XML、SOAP等)来调用服务或应用程序的技术。WebService具有跨平台...
- **普通类实现**: 定义一个包含execute方法的普通类。 - **实现Action接口**: 定义一个实现了Action接口的类。 - **继承ActionSupport**: 继承自ActionSupport类,这是最常见的实现方式。 #### 十、Struts Result...
Servlet API定义了一套标准的Java接口和类,用于开发处理HTTP请求的服务器端程序。而JSP(Java Server Pages)是一种特殊的Servlet,它允许开发者在HTML页面中嵌入Java代码。当JSP文件被第一次请求时,Tomcat会将JSP...
ORB是CORBA的核心,它将Java对象的调用转化为可以在网络上传输的消息,并将接收到的消息转换回对象调用。ORB使得开发者可以使用普通的面向对象编程技术编写分布式应用,而无需关心底层网络通信细节。 3. **JacORB...
Struts中实现Action有三种方式:定义一个普通的类,类中只要有一个public String execute()方法且返回一个字符串即可;定义一个类,实现Action接口;继承xwork2.ActionSupport这个类。最常用的方法是继承xwork2....
2. **业务逻辑层**:这是核心的Java类,可能包含EJB或普通的Java类,它们执行业务规则,处理计算,与数据库交互等。 3. **数据访问层**:使用JDBC(Java Database Connectivity)或者其他ORM(Object-Relational ...
6. **JMS(Java Message Service)**:用于实现异步通信,例如,当大量用户同时发帖或回帖时,JMS可以帮助处理消息队列,避免服务器过载。 7. **JTA(Java Transaction API)**:确保在多资源事务中的一致性,对于...
JSP页面在服务器上被编译成Servlet,然后像普通Java类一样执行,这使得JSP能更好地处理动态内容,同时保持了Java的强类型和面向对象特性。 【Java操作Excel文档】在教务系统中可能涉及到学生成绩、课程表等数据的...