activeMQ 点对点以及发布与订阅 - 以及spring的整合&集群方式
来源:互联网 发布:武汉大学 网络 编辑:程序博客网 时间:2024/06/06 02:30
Overview
点对点
connect.createSession();session.createQueue();
订阅与消费
connect.CreateTopicSession();session.createTopic();
与spring的整合
Spring+JMS+ActiveMQ+Tomcat实现消息服务
集群方式:master-slave; broker-cluster[static-discovery & dynamic-discovery]
ActiveMQ集群
======================================================
ActiveMQ 点对点消费者生产者示例
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://10.10.40.174:61616"); Connection connection = null; Session session = null; MessageProducer producer = null; Destination destination = null; try { connection = connectionFactory.createConnection("zengjun", "zj"); session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); destination = session.createQueue("TEST.QUEUE.ZJ_02"); producer = session.createProducer(destination); //设置消息模式,有持久与非持久的 producer.setDeliveryMode(DeliveryMode.PERSISTENT); connection.start(); double d = Math.random(); InputStream in = new FileInputStream("D:\\2.09M.jar"); BufferedInputStream objBufferedInputStream = new BufferedInputStream(in); int len = objBufferedInputStream.available(); byte[] bBuffer = new byte[len]; //创建StreamMessage StreamMessage message = session.createStreamMessage(); objBufferedInputStream.read(bBuffer); //添加byte数组数据 message.writeBytes(bBuffer); //添加整型属性 message.setIntProperty("MessageLength1", len); //添加字符串属性 message.setStringProperty("ID", String.valueOf(d)); in.close(); producer.send(message); System.out.println("发送消息成功 ID " + String.valueOf(d)); } catch (JMSException e) { e.printStackTrace(); } catch (Exception ex) { ex.printStackTrace(); } finally { //关闭资源 ConnectionUtil.closeSession(session); ConnectionUtil.closeConnection(connection); ConnectionUtil.closeMessageProducer(producer); } System.out.println("发送结束");
activeMQ 点对点消费者代码
// 创建连接工厂 ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://10.10.40.174:61616"); Session session = null; MessageConsumer consumer = null; Connection connection = null; Message message = null; try { // 访问的用户与密码 connection = connectionFactory.createConnection("ll", "ll"); connection.start(); session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); Destination destination = session.createQueue("TEST.QUEUE.ZJ_02"); consumer = session.createConsumer(destination); // 无时间参数表示一直等待,直到收到消息。 // message = consumer.receive(); // 有时间参数表示指定时间后没有消息则结束时,如果存在消息就在取完消息后结束 message = consumer.receive(5 * 1000); // 立即往下执行 // message = consumer.receiveNoWait(); if (message != null) { System.out.println("收到消息"); if (message instanceof TextMessage) { TextMessage textMessage = (TextMessage) message; String text = textMessage.getText(); System.out.println("TEXT:" + text); textMessage.acknowledge(); } else if (message instanceof StreamMessage) { StreamMessage streamMessage = (StreamMessage) message; String strId = streamMessage.getStringProperty("ID"); System.out.println("streammessage ID:" + strId); streamMessage.acknowledge(); } } else { System.out.println("没有收到消息"); } } catch (Exception e) { System.out.println("发生异常\n"); e.printStackTrace(); } finally { //关闭资源 ConnectionUtil.closeAll(connection, session, consumer); }
activeMQ 发布/订阅,发布者代码示例
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://10.10.40.174:61616"); TopicConnection connection = null; ActiveMQTopicSession session = null; ActiveMQTopicPublisher publisher = null; ActiveMQTopic topic = null; try { connection = connectionFactory.createTopicConnection("zengjun", "zj"); session = (ActiveMQTopicSession) connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); topic = (ActiveMQTopic) session.createTopic("TEST.topic.zj"); publisher = (ActiveMQTopicPublisher) session.createPublisher(topic); publisher.setDeliveryMode(DeliveryMode.PERSISTENT); connection.start(); int flag = 2; if (flag == 1) { TextMessage messageText = session.createTextMessage(); messageText.setText("tipic:" + System.currentTimeMillis()); publisher.publish(messageText); } else { StreamMessage messageStream = session.createStreamMessage(); FileInputStream fi = new FileInputStream("D:\\JavaXYQ.zip"); byte[] btyes = new byte[fi.available()]; fi.read(btyes); messageStream.writeBytes(btyes); publisher.publish(messageStream); } System.out.println("Topic消息发送成功"); } catch (Exception e) { e.printStackTrace(); } finally { ConnectionUtil.closeSession(session); ConnectionUtil.closeConnection(connection); ConnectionUtil.closeTopicPublisher(publisher); }
activeMQ 发布/订阅,持久订阅代码示例
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://10.10.40.174:61616"); TopicConnection connection = null; ActiveMQTopicSession session = null; ActiveMQTopic topic = null; ActiveMQTopicSubscriber subscriber = null; try { connection = connectionFactory.createTopicConnection("zengjun", "zj"); connection.setClientID("client_ID_test"); connection.start(); session = (ActiveMQTopicSession) connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); topic = (ActiveMQTopic) session.createTopic("TEST.topic.zj"); //创建持久订阅 subscriber = (ActiveMQTopicSubscriber) session.createDurableSubscriber(topic, "Subscriber_name_test"); subscriber.setMessageListener(this); } catch (Exception e) { e.printStackTrace(); } finally { // ConnectionUtil.closeSession(session); // ConnectionUtil.closeConnection(connection); // ConnectionUtil.closeTopicSubscriber(subscriber); } } public void onMessage(Message message) { System.out.println("收到消息"); try { if (message != null) { if (message instanceof TextMessage) { TextMessage textMessage = (TextMessage) message; System.out.println(textMessage.getText()); }else if(message instanceof StreamMessage){ System.out.println("收到steam消息"); } } else { System.out.println("没有收到消息"); } Thread.sleep(1 * 1000); } catch (Exception e) { e.printStackTrace(); } }
- activeMQ 点对点以及发布与订阅 - 以及spring的整合&集群方式
- ActiveMQ实战(五)--Spring整合ActiveMQ实现点对点与主题发布订阅通信
- 基于spring整合activeMQ以及点对点队列的封装
- activemq点对点以及发布订阅模式代码(参考前一篇jms学习理解)
- activemq的几种基本通信方式总结(点对点-发布订阅)
- activemq的三种基本通信方式总结 点对点 发布订阅 请求应答
- activemq的几种基本通信方式总结(点对点-发布订阅)
- ActiveMQ的使用与遇到的相关坑(点对点,发布与订阅,resreq)
- activeMQ消息中间件之点对点与发布订阅模式实现
- Spring整合activeMq(二):发布订阅模式
- ActiveMQ的入门案例以及整合Spring的简单使用
- activemq spring整合 以及虚拟主题设置
- ActiveMQ发布-订阅消息模式(同点对点模式的区别)
- Spring整合activeMq(一):点对点模式
- mqtt+activemq用发布订阅实现点对点推送
- Spring Redis与ActiveMQ发布订阅模式源码分析
- ActiveMQ实战(六)--Spring整合ActiveMQ实现队列和主题发布订阅通信
- 多个虚拟机启动集群以及订阅发布消息
- 如何实现两个数据库之间的同步
- read/write、fread/fwrite、open/fopen区别
- PHP 进阶(一)PHP XML
- ajax中解析json数据的各种方法(返回类型为json或text)
- 备注在工作中SSH中将hibernate托管给spring获取session的方法
- activeMQ 点对点以及发布与订阅 - 以及spring的整合&集群方式
- 程序菜鸟的反思
- cocos2dx粒子效果出现黑块 解决办法
- ARC 中注意事项
- ScrollView,progressBar等一些控件的使用
- DataReader和DataSet的区别
- mongodb日志服务器方案
- 图论及其运用之邻接矩阵
- 新手EDM营销的基本流程介绍