activemq中的订阅模式以及消息时长和确认机制
来源:互联网 发布:单片机语言是什么语言 编辑:程序博客网 时间:2024/05/18 19:18
直接上代码
发布主题
package com.activemq;import org.apache.activemq.ActiveMQConnectionFactory;import javax.jms.*; public class TopicPub { public static void main(String[] args) throws JMSException { ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616"); Connection connection = factory.createConnection(); connection.start(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); /** Session javax.jms.Connection.createSession(boolean transacted, int acknowledgeMode) throws JMSException 1.transacted事务,事务成功commit,才会将消息发送到mom中 2.acknowledgeMode消息确认机制 1)、带事务的session 如果session带有事务,并且事务成功提交,则消息被自动签收。如果事务回滚,则消息会被再次传送。 2)、不带事务的session 不带事务的session的签收方式,取决于session的配置。 Activemq支持一下三種模式: Session.AUTO_ACKNOWLEDGE 消息自动签收 Session.CLIENT_ACKNOWLEDGE 客戶端调用acknowledge方法手动签收 Session.DUPS_OK_ACKNOWLEDGE 不是必须签收,消息可能会重复发送。在第二次重新传送消息的时候,消息 头的JmsDelivered会被置为true标示当前消息已经传送过一次,客户端需要进行消息的重复处理控制。 代码示例如下: session = connection.createSession(true, Session.CLIENT_ACKNOWLEDGE); textMsg.acknowledge();*/ Topic topic = session.createTopic("wm5920.topic"); MessageProducer producer = session.createProducer(topic); producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);//设置非持久化 // producer.setTimeToLive(5000);//5秒后过期,这个对点对点模式有效 TextMessage message = session.createTextMessage(); message.setText("message_" + System.currentTimeMillis()); producer.send(message); System.out.println("Sent message: " + message.getText()); session.close(); connection.stop(); connection.close(); } }
订阅主题,注:如果在发布主题前,没有订阅,是收不到消息的,这跟点对点的队列模式不同
package com.activemq;import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; public class TopicSubs{public static void main(String[] args) throws JMSException { ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616"); Connection connection = factory.createConnection(); connection.setClientID("wm5920"); connection.start(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); Topic topic = session.createTopic("wm5920.topic"); //持久订阅方式,不会漏掉信息 TopicSubscriber subs=session.createDurableSubscriber(topic, "wm5920"); subs.setMessageListener(new MessageListener() { public void onMessage(Message message) { TextMessage tm = (TextMessage) message; try { System.out.println("Received message: " + tm.getText()); } catch (JMSException e) { e.printStackTrace(); } } }); //非持久订阅方式// MessageConsumer consumer = session.createConsumer(topic); // consumer.setMessageListener(new MessageListener() { // public void onMessage(Message message) { // TextMessage tm = (TextMessage) message; // try { // System.out.println("Received message: " + tm.getText()); // } catch (JMSException e) { // e.printStackTrace(); // } // } // }); // session.commit();// session.close(); // connection.stop(); // connection.close(); } }
0 0
- activemq订阅模式以及消息时长和确认机制
- activemq中的订阅模式以及消息时长和确认机制
- Activemq消息确认机制
- Activemq消息确认机制
- activemq消息确认机制
- Activemq消息确认机制
- ActiveMQ的设置消息时长,事务,确认机制 ,持久化(五)
- ActiveMQ中的消息的持久化和非持久化 以及 持久订阅者 和 非持久订阅者之间的区别与联系
- ActiveMQ发布消息和订阅消息
- ActiveMQ 发布订阅(topic)模式_发送消息和接收消息
- Spring+ActiveMQ实现消息收发和订阅
- 深入biztalk消息以及消息订阅发布路由机制(三)-消息发布和路由
- 深入biztalk消息以及消息订阅发布路由机制(三)-消息发布和路由
- JMS消息机制--发布-订阅模式
- activeMQ消息中间件之点对点与发布订阅模式实现
- spring整合ActiveMQ订阅模式(对象消息发送)
- spring activeMQ 开启事物接收消息时自定义确认消息
- ActiveMQ发布订阅模式
- Sum to N--DFS
- [NOIP2008] 火柴棒等式
- Java多线程
- 试用CNTK
- Java中的continue、break和return
- activemq中的订阅模式以及消息时长和确认机制
- scala学习之路:9.Override重写字段或者方法
- eclipse 显示setting目录
- iOS日历中给一个事件添加多个提醒
- java线程传统VS现代【2】
- jstl 标签库
- [Splay] BZOJ 3729 Gty的游戏
- 使用AddressBook来获取通讯录消息
- Android 线程通信