最近需要使用JMS接收消息,需要在客户端使用一个监听器实时接收消息,监听器代码如下:
public class JmsReceiverListener extends Thread implements MessageListener, ExceptionListener { private final static Logger logger = LoggerFactory.getLogger(JmsReceiverListener.class); // ConnectionFactory :连接工厂,JMS 用它创建连接 ConnectionFactory connectionFactory; // Connection :JMS 客户端到JMS Provider 的连接 Connection connection = null; // Session: 一个发送或接收消息的线程 Session session; // Destination :消息的目的地 Destination destination; //消息接收者 MessageConsumer consumer; String url; public JmsReceiverListener(String queuename) { ClassPathResource resource = new ClassPathResource("META-INF/res/profile.properties"); Properties properties; try { properties = PropertiesLoaderUtils.loadProperties(resource); url = properties.getProperty("activemq.url"); logger.info("activeMq地址:"+url); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); logger.info("资源文件不存在"); } String queue=queuename; connectionFactory = new ActiveMQConnectionFactory( ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, url); // 构造从工厂得到连接对象 try { connection = connectionFactory.createConnection(); connection.setExceptionListener(this);// 异常处理 connection.start();// 连接启动 //如果为true,则队列里面的消息没有被取走,继续存在 session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); // 获取session, destination = session.createQueue(queue); consumer = session.createConsumer(destination); } catch (JMSException e) { System.err.println("Create fail!"); e.printStackTrace(); } } public void run() { try { consumer.setMessageListener(this); } catch (JMSException e) { System.err .println(" MessageListener failed..."); e.printStackTrace(); } } public void onMessage(Message message) { try { if (message instanceof MapMessage) { MapMessage mapMsg = (MapMessage)message; if(!CommonUtil.isNull(mapMsg.getString(AlarmTransferConstant.SUBSCRIBE))){ String messages=mapMsg.getString(AlarmTransferConstant.SUBSCRIBE); logger.info("告警订阅消息: " + messages); new AlarmSub().sendMsg(messages); } if(!CommonUtil.isNull(mapMsg.getString(AlarmTransferConstant.SYNCHRONIZE))){ String messages=mapMsg.getString(AlarmTransferConstant.SYNCHRONIZE); logger.info("告警同步消息: " + messages); new AlarmSyc().sendMsg(messages); } if(!CommonUtil.isNull(mapMsg.getString(AlarmTransferConstant.QUERY))){ String messages=mapMsg.getString(AlarmTransferConstant.QUERY); new AlarmQuery().sendMsg(messages); logger.info("告警查询消息: " + messages); } // TextMessage txtMsg = (TextMessage) message; // String msg = txtMsg.getText(); // System.out.println("Received: " + msg); // new AlarmSub().sendMsg(msg); } } catch (JMSException e) { System.err.println("The process of getting a message failed..."); e.printStackTrace(); } } // 异步消息异常处理 public void onException(JMSException arg0) { System.err.println("JMS异常!"); } //测试程序 public static void main(String[] args) { JmsReceiverListener jrl = new JmsReceiverListener("HelloWorldQueue"); jrl.start(); } }
相关推荐
【JBOSST建立JMS应用实例】 JBOSST(Java Business Open Source Solutions)是一个开源的企业级应用服务器,它提供了全面的中间件服务,包括对Java消息服务(JMS)的支持。JMS是一种标准,用于在分布式环境中传递...
标题 "一个Topic和subscriber的JMS应用" 描述了一个基于Java消息服务(JMS)的系统,该系统涉及发布/订阅模式,其中Topic是发布者发送消息的地方,而subscriber是接收这些消息的实体。JMS是一种标准接口,允许应用...
**JBoss JMS应用构建详解** JBoss是一个开源的应用服务器,它支持Java消息服务(Java Message Service,简称JMS),这是一种标准的API,用于在分布式环境中进行异步通信。JMS允许应用程序创建、发送、接收和读取...
在JMS应用中,必须妥善处理各种可能的异常,例如`JMSException`,并考虑重新发送消息或回滚事务的情况。 总结,一个简单的JMS客户端应用涉及到连接管理、会话创建、消息生产和消费等多个环节,利用JMS提供的API...
5. **连接工厂与会话**:JMS应用需要创建连接工厂来建立与消息服务器的连接,然后通过连接工厂创建会话,处理消息的发送和接收。 6. **消息目的地**:定义消息的发送目标,可以是队列或主题。 7. **消息的持久化**...
在"JMS入门级的蹩脚篇.ppt"这个文件中,可能包含了以下内容:JMS的基本概念解释,如何创建消息,如何设置消息队列和主题,如何编写生产者和消费者代码示例,以及如何配置和运行JMS应用程序。这些内容对于初学者理解...
在这个入门级实例中,我们将探讨如何使用Maven、Spring和ActiveMQ来构建一个简单的Spring JMS应用。 首先,Maven是一个项目管理和综合工具,它管理项目的构建、依赖关系和报告。在Spring JMS项目中,Maven用于管理...
### 三、编写JMS应用程序 1. **导入JMS API**:在Java项目中,需要导入`javax.jms.*`包,以使用JMS API。 2. **创建连接和会话**:使用连接工厂创建JMS连接,然后从连接创建会话。会话是执行JMS操作的工作单元。 ...
通过以上解析,我们可以看到JMS规范教程详细介绍了JMS的基本概念、消息模型以及通用设施,为开发者提供了构建和理解JMS应用程序所需的关键知识。JMS不仅提供了消息传递的基础结构,还涵盖了消息的管理和控制,使得...
- **架构概述:** 该部分详细介绍了JMS的整体架构设计,包括JMS应用的基本构成和管理机制。 **2.2 什么是JMS应用** - **定义与组成:** JMS应用由定义消息的应用程序和一系列与其交互的客户端组成。 **2.3 管理** ...
**JMS应用实例** 1. **订单处理**:系统接收到订单后,通过JMS将订单消息放入队列,后台处理程序按顺序取出并处理,确保处理的顺序性和一致性。 2. **事件通知**:应用发布事件到主题,其他订阅该主题的应用会收到...
2. **消息**:这是在JMS应用中各个客户端之间传递的信息载体。 3. **JMS提供者**:实现JMS协议的消息系统,如WebLogic Server提供的JMS服务。JMS提供者负责消息的存储、转发以及相关管理功能。 4. **管理对象**:...
在IT行业中,Java消息服务(Java Message Service,简称JMS)是一种标准接口,用于应用程序之间的异步通信。它提供了一种可靠的消息传递机制,使得分布式系统中的组件可以解耦,提高系统的可扩展性和容错性。...
- **目的**:连接工厂是客户端用来创建连接和会话对象的,是 JMS 应用程序的重要组成部分。 ##### 6. 添加队列资源 - **步骤**: - 向 JMS 模块添加三个队列资源,其名称及 JNDI 名称分别为: - 队列 1:`sqin`,...
- **JMS应用的概念:** JMS应用由生产者(发送消息的应用程序)和消费者(接收消息的应用程序)组成,通过消息代理进行消息的传递。 - **管理:** 消息的管理包括配置消息代理、设置消息的优先级和过期时间等内容。...
WebLogic Server 是一款由 Oracle 公司提供的企业级 Java 应用服务器,它支持Java Message Service (JMS),这是一个标准接口,允许应用程序在分布式环境中发送和接收消息。JMS 提供了可靠的消息传递机制,是企业级...
在“标签”中提到“Java”,意味着整个项目是用Java编程语言实现的,Java以其跨平台性和强大的库支持而闻名,特别适合开发企业级应用,包括JMS应用程序。 在压缩包的文件名称列表中,我们看到 "apps.jms....
JMS应用是指那些使用JMS API进行消息传递的Java程序。JMS规范定义了一套消息模型,包括两种消息传递风格:点对点模型(Point-to-Point)和发布/订阅模型(Publish/Subscribe)。在点对点模型中,消息生产者和消息...
JMS为开发者提供了一个与特定平台无关的API,使得开发人员能够更方便地开发、部署消息驱动的应用程序。 - **核心特性**: - **消息模型**:JMS 支持两种主要的消息模型 —— 点对点(Point-to-Point, PTP)和发布/...