【一头扎进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周岁宝宝爱哭怎么办 一个月宝宝爱哭怎么办 2岁宝宝爱哭怎么办 三岁小朋友打人怎么办 一岁半小朋友喜欢打人怎么办 爷爷偏心我该怎么办 冲动型学生老师怎么办 两个宝宝争东西怎么办 2周岁宝宝打人怎么办 小孩幼儿园被打怎么办 小孩喝了润滑油怎么办 孩子被打了怎么办 宝宝吃了指甲油怎么办 孩子掉了深海怎么办 小孩打了别人怎么办 两岁宝宝爱咬人怎么办 孩子上学老打人怎么办 孩子上学爱说话怎么办 孩子抢玩具打人怎么办 生气就像打人怎么办 小孩总喜欢打人怎么办 小孩性格好翘怎么办 一岁小宝宝打人怎么办 小孩子老喜欢打人怎么办 孩子被大人欺负怎么办 小孩识字量少怎么办 父母打架孩子该怎么办 小孩嘴唇里面烂怎么办 幼儿园小朋友很调皮怎么办 幼儿园小朋友上课调皮怎么办 孩子误冲游戏怎么办 遇到别的熊孩子怎么办 幼儿园遇到熊孩子怎么办 高铁上遇到熊孩子怎么办 幼儿爱打人家长怎么办 妈妈爱打孩子怎么办 35儿童爱打人怎么办? 一岁半宝宝太调皮怎么办 儿子高一不听话怎么办