Activemq基础之消费者和生产者
来源:互联网 发布:信捷xc软件 编辑:程序博客网 时间:2024/06/07 16:38
一、开发环境
activemq官网http://activemq.apache.org/
下载版本http://activemq.apache.org/download-archives.html
最新版本:Apache ActiveMQ 5.15.0 Released posted on Jul 06, 2017
使用开发版本:apache-activemq-5.13.1
开发环境:win7 64bit eclipse Mars.2 Release (4.5.2)
下载版本解压后,直接运行/bin/win64/activemq.bat
启动后在浏览器运行:http://localhost:8161
二、生产端
使用jar包:activemq-all-5.13.1.jar
使用failover的url方式可以实现断线重连的机制
public final class ActiveMQServer { /** * icap使用log4j1.2-api-2.2过度到了log4j2 */ private static Logger log = LogManager.getLogger("com.znv.icap.activemq"); private static String url; static { url = "failover://(tcp://10.45.152.227:61616,tcp://10.45.152.228:61616,tcp://10.45.152.229:61616)?randomize=false&initialReconnectDelay=100&timeout=2000"; // url = "failover://(" // + PropertyHelper.getInstance().getValue("activemqUrl", // "tcp://10.45.157.91:61616,tcp://10.45.157.92:61616,tcp://10.45.157.93:61616") // + ")?randomize=false&initialReconnectDelay=100&timeout=2000"; } private boolean transacted = false; private int ackMode = Session.AUTO_ACKNOWLEDGE; private ActiveMQConnectionFactory connectionFactory; private Connection connection; private Session session; private Topic topic; private MessageProducer producer; private static ActiveMQServer instance = null; private ActiveMQServer() { try { connectionFactory = new ActiveMQConnectionFactory(url); connection = connectionFactory.createConnection(); connection.start(); session = connection.createSession(transacted, ackMode); topic = session.createTopic("change_data_device_20170330"); ((ActiveMQConnection) connection).addTransportListener(new TransportListener() { @Override public void transportResumed() { System.out.println(" 重连"); } @Override public void transportInterupted() { System.out.println("断开"); } @Override public void onException(IOException error) { System.out.println("31"); } @Override public void onCommand(Object command) { System.out.println("41"); } }); } catch (JMSException e) { e.printStackTrace(); } } public static ActiveMQServer getInstance() { if(instance == null){ synchronized (ActiveMQClient.class) { if(instance == null){ instance = new ActiveMQServer(); } } } return instance; } public void send(String msg) throws JMSException, InterruptedException { producer = session.createProducer(topic); TextMessage message = session.createTextMessage(msg); producer.send(message); } public void close() { if (producer != null) { try { producer.close(); } catch (JMSException e) { log.error(e); } } if (session != null) { try { session.close(); } catch (JMSException e) { log.error(e); } } if (connection != null) { try { connection.close(); } catch (JMSException e) { log.error(e); } } } public Topic getTopic() { return topic; } public void setTopic(Topic topic) { this.topic = topic; } public static void main(String[] args) throws JMSException { try { JSONObject obj = new JSONObject(); obj.put("sessionId", "3D6FCF9B88AFF644848670F4DD9D0ACB"); obj.put("userId", "11000000000"); obj.put("deviceId", "11000010200080"); obj.put("type", "1"); String msg = obj.toJSONString(); ActiveMQServer.getInstance().send(msg); } catch (InterruptedException e) { e.printStackTrace(); } }}
5.9的版本不能实现断线重连,需要重写
org.apache.activemq.transport.failover.FailoverTransport.java
activemq-all-5.9.0.jar
三、消费端
public final class ActiveMQClient implements MessageListener { /** * icap使用log4j1.2-api-2.2过度到了log4j2 */ private static Logger log = LogManager.getLogger("com.znv.icap.activemq"); private static String url; static { //10.45.146.180-182 url = "failover://(tcp://lv180.dct-znv.com:61616,tcp://lv181.dct-znv.com:61616,tcp://lv182.dct-znv.com:61616)?randomize=false&initialReconnectDelay=100&timeout=2000"; //10.45.152.227 lv03.dct-znv.com url = "failover://(tcp://10.45.152.227:61616)?randomize=false&initialReconnectDelay=100&timeout=2000"; } private boolean transacted = false; private int ackMode = Session.AUTO_ACKNOWLEDGE; private ActiveMQConnectionFactory connectionFactory; private Connection connection; private Session session; private MessageConsumer consumer; private static ActiveMQClient instance = null; private ActiveMQClient() { try { connectionFactory = new ActiveMQConnectionFactory(url); connection = connectionFactory.createConnection(); connection.start(); session = connection.createSession(transacted, ackMode); Topic destination = session .createTopic("change_report_20170330"); consumer = session.createConsumer(destination); consumer.setMessageListener(this); ((ActiveMQConnection) connection).addTransportListener(new TransportListener() { @Override public void transportResumed() { log.info("activemq resumed"); } @Override public void transportInterupted() { log.info("activemq interupted"); } @Override public void onException(IOException error) { log.error("activemq onException"); } @Override public void onCommand(Object command) { log.debug("activemq onCommand"); } }); } catch (JMSException e) { log.error(e); } } public static ActiveMQClient getInstance() { if (instance == null) { synchronized (ActiveMQClient.class) { if (instance == null) { instance = new ActiveMQClient(); } } } return instance; } @Override public void onMessage(Message message) { try { TextMessage txtmessage = (TextMessage) message; log.error("=======================receive message from little v:" + txtmessage.getText());// ThreadPoolUtils.exec(new DealChangeDataThread(txtmessage.getText())); } catch (JMSException e) { log.error(e); } } public void close() { if (consumer != null) { try { consumer.close(); } catch (JMSException e) { log.error(e); } } if (session != null) { try { session.close(); } catch (JMSException e) { log.error(e); } } if (connection != null) { try { connection.close(); } catch (JMSException e) { log.error(e); } } } public static void main(String[] args) { ActiveMQClient.getInstance(); }}
阅读全文
0 0
- Activemq基础之消费者和生产者
- ActiveMQ 生产者和消费者demo
- 简单的activemq,生产者和消费者代码
- java基础:多线程之生产者消费者问题
- java基础系列之生产者消费者模式
- 多线程之生产者和消费者模式
- 面试题之:生产者和消费者问题
- 线程之消费者和生产者问题代码
- java多线程之生产者和消费者模型
- java学习之消费者和生产者问题
- 多线程之生产者和消费者模式
- 面试题之:生产者和消费者问题
- Java多线程-通信之生产者和消费者
- 多线程编程之生产者和消费者模型
- 生产者和消费者之等待唤醒机制
- 多线程系列之生产者和消费者
- java多线程之生产者和消费者案例
- 线程经典模式之---生产者和消费者
- 使用Java原生API编写发送HTTP_POST请求的工具类
- SMIL小结
- CodeForces
- 浅谈web项目的跨域
- 小技巧
- Activemq基础之消费者和生产者
- Intellij Idea git切换远程分支
- LeetCode 9 Palindrome Number
- controller方法返回值(10)
- 中国制造2025,SRM——供应商管理系统的价值
- 大数据时代必修技能 阿里HBase又放出了哪些大招?
- Invalid parameter not satisfying: !stayUp || CLClientIsBackgroundable(internal->fClient)解决方法
- Bootstrap(1)__Bootstrap基础<页面排版,图片,按钮,表格,表单>
- fastjson案例[L]