【一头扎进JMS】(3)----ActiviteMQ点对点消息实现+消息监听
来源:互联网 发布:sql delete语句 编辑:程序博客网 时间:2024/05/21 19:46
上篇博客介绍了点对点消息的实现,这次将在此基础上,添加消息监听.监听的好处:自动监听消息,在监听到消息生产者消息后立即回传接到命令,并开始进行处理,进行异步处理,避免消费者等待.
消息生产者:
package com.java1234.activemq;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.MessageProducer;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;/** * 消息生产者 * @author Administrator * */public class JMSProducer {private static final String USERNAME=ActiveMQConnection.DEFAULT_USER; // 默认的连接用户名private static final String PASSWORD=ActiveMQConnection.DEFAULT_PASSWORD; // 默认的连接密码private static final String BROKEURL=ActiveMQConnection.DEFAULT_BROKER_URL; // 默认的连接地址private static final int SENDNUM=10; // 发送的消息数量public static void main(String[] args) {ConnectionFactory connectionFactory; // 连接工厂Connection connection = null; // 连接Session session; // 会话 接受或者发送消息的线程Destination destination; // 消息的目的地MessageProducer messageProducer; // 消息生产者// 实例化连接工厂connectionFactory=new ActiveMQConnectionFactory(JMSProducer.USERNAME, JMSProducer.PASSWORD, JMSProducer.BROKEURL);try {connection=connectionFactory.createConnection(); // 通过连接工厂获取连接connection.start(); // 启动连接session=connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE); // 创建Sessiondestination=session.createQueue("FirstQueue1"); // 创建消息队列messageProducer=session.createProducer(destination); // 创建消息生产者sendMessage(session, messageProducer); // 发送消息session.commit();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} finally{if(connection!=null){try {connection.close();} catch (JMSException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}/** * 发送消息 * @param session * @param messageProducer * @throws Exception */public static void sendMessage(Session session,MessageProducer messageProducer)throws Exception{for(int i=0;i<JMSProducer.SENDNUM;i++){TextMessage message=session.createTextMessage("ActiveMQ 发送的消息"+i);System.out.println("发送消息:"+"ActiveMQ 发送的消息"+i);messageProducer.send(message);}}}
监听器:
package com.java1234.activemq;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.MessageListener;import javax.jms.TextMessage;/** * 消息监听 * @author Administrator * */public class Listener implements MessageListener{@Overridepublic void onMessage(Message message) {// TODO Auto-generated method stubtry {System.out.println("收到的消息:"+((TextMessage)message).getText());} catch (JMSException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
消息消费者:
package com.java1234.activemq;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.MessageConsumer;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;/** * 消息消费者 * @author Administrator * */public class JMSConsumer2 {private static final String USERNAME=ActiveMQConnection.DEFAULT_USER; // 默认的连接用户名private static final String PASSWORD=ActiveMQConnection.DEFAULT_PASSWORD; // 默认的连接密码private static final String BROKEURL=ActiveMQConnection.DEFAULT_BROKER_URL; // 默认的连接地址public static void main(String[] args) {ConnectionFactory connectionFactory; // 连接工厂Connection connection = null; // 连接Session session; // 会话 接受或者发送消息的线程Destination destination; // 消息的目的地MessageConsumer messageConsumer; // 消息的消费者// 实例化连接工厂connectionFactory=new ActiveMQConnectionFactory(JMSConsumer2.USERNAME, JMSConsumer2.PASSWORD, JMSConsumer2.BROKEURL);try {connection=connectionFactory.createConnection(); // 通过连接工厂获取连接connection.start(); // 启动连接session=connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE); // 创建Sessiondestination=session.createQueue("FirstQueue1"); // 创建连接的消息队列//发布者和消费者模式的就是这个不同-start//destination=session.createTopic("FirstQueue1"); // 创建订阅者连接的消息队列//发布者和消费者模式的就是这个不同-endmessageConsumer=session.createConsumer(destination); // 创建消息消费者//添加监听-startmessageConsumer.setMessageListener(new Listener()); // 注册消息监听//监听的好处:自动监听消息//生产者生产出来以后,主动通知它,消费者激发事件,直接去接受就可以了.//添加监听-end} catch (JMSException e) {// TODO Auto-generated catch blocke.printStackTrace();} }}
在消息消费者中,添加监听后,只是在代码中多配置了消息监听.
执行结果:
添加了监听器后,先执行消息消费者,然后再执行消息生产者,这样,如果消息生产者有消息产生的时候,消息监听就会监听到.
阅读全文
2 0
- 【一头扎进JMS】(3)----ActiviteMQ点对点消息实现+消息监听
- 【一头扎进JMS】(2)----ActiviteMQ点对点消息实现
- JMS中点对点消息
- JMS 点对点消息
- apache消息队列--activitemq
- ActiveMQ 点对点消息实现
- ActiveMQ点对点消息实现
- jms activeMQ消息点对点通信入门实例
- JMS 监听消息选择器selector
- 【一头扎进JMS】(1)----JMS基础
- socket 实现点对点发送消息
- MQ消息队列系列(3)ActiviteMQ特性
- JMS消息发送和接收实例 - 点对点模式
- JMS入门(三)点对点消息传送模型示例
- JMS消息发送和接收实例 - 点对点模式
- jms消息机制,包括点对点、发布/订阅模式
- [ActiveMQ实战]基于JMS的点对点消息传播
- JMS消息监听和转发实例
- Business Center
- android audio/linux alsa音频-应用与驱动的接口
- P3628 [APIO2010]特别行动队
- 学生点名系统
- 第七章 假设检验(2)
- 【一头扎进JMS】(3)----ActiviteMQ点对点消息实现+消息监听
- 【C++】【LeetCode】35. Search Insert Position
- 求解数组中任意两个元素的和最接近某一个数
- 写一个比较全的进制转换函数-----未完成
- 火线扫描Android静态代码
- REPEATABLE_READ事务级别MYSQL并发小例子
- eclipse maven命令启动tomca遇到的问题,首页拦截问题
- P1725 琪露诺
- jetson tx1 配置SSD固态硬盘