最近需要使用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(); } }
相关推荐
JBOSS建立JMS应用实例 代码 + 文档
一步一步描叙如何建立JBOSS的JMS应用,并通过一个实例来发送接受jms.并附源码.
NULL 博文链接:https://jasonxiawanjian.iteye.com/blog/1884568
JMS学习好的帮助文档。需要的同学下载。 概述……………………………………………………………………………………………..3 体系结构……………………………………………………………………...JMS应用程序服务器工具
什么是消息 消息是一个用于在组件和应用程序之间通讯的的方法。消息之间的传递是点对点的。任何终端之间都可以相互接受和发送消息。...JMS 应用由定义 消息的应用和一系列与他们交互的客户端组成。
该用例使用jms 对Activemq进行基本操作,包含生产者和消费者。
robotsframework-jmslibrary 用于测试 JMS 应用程序的机器人框架库。 已使用 Apache ActiveMQ 进行测试,但也应与其他提供程序一起使用。 需要机器人框架版本 2.8.3。用法将库和 JMS 提供程序 jar 设置到类路径中并...
apps.jms.com.co-snv-development 开发中的 Jms 应用程序
一个简单的JMS客户端应用
什么是消息服务 为什么使用消息服务 什么是JMS(Java Message Service) JMS的通信方式 JMS应用程序开发步骤 JMS应用程序开发实践 其他的JMS特性
IDE 1.4.0 3 基于JBoss 4.x的JSF应用开发 4 基于JBoss 4.x的JMS应用开发 5 基于JBoss 4.x的Hibernate应用开发 6 基于JBoss 4.x的JTA应用开发 7 基于JBoss 4.x的JavaMail应用开发 8 基于JBoss 4.x...
一个顾客管理的JMS应用实例:含有事务中使用消息EJB方法、消息EJB的并发控制等。
企业消息产品(或者有时称为面向消息的中间件产品)正逐渐成为公司内操作集成的关 键组件。这些产品可以将分离的业务组件组合成一个可靠灵活的系统。...JMS 应用由定义 消息的应用和一系列与他们交互的客户端组成。
传统的JMS应用程序必须定制地编写一部分这些服务。MDB在本质上无状态的,也就是说EJB容器可以执行大量的MDB实例,并发地处理从各个应用程序或者JMS生产者而来的数百个JMS消息,并且还支持服务质量(quality of ...
jms应用的一个实例,相信对学习有用!!!!1
JMS中心 概述 ... JMS应用程序的两个部分,即目的地工厂和连接工厂,通常是通过管理而非编程方式维护的。 每个提供商的技术都不同。 JMS消息:3个部分 标头:设置目标,对所有打印机使用一个队列 属性
内容为JMS消息中间件在数据集成系统中的研究与应用,格式为CAJ,页数为为54
可以量产的JMS578-PCB文件。PADS可以打开,供参考 !~!~!
ESB应用JMS_Topic,有图片, JBoss_ESB