JMS -- activeMQ使用
来源:互联网 发布:知乎电子书在电脑上看 编辑:程序博客网 时间:2024/06/05 15:51
jms相关的知识:http://blog.csdn.net/gaopeng0071/article/details/51790539
搭建
http://www.cnblogs.com/xwdreamer/archive/2012/02/21/2360818.html
Linux下搭建activeMQ
http://blog.csdn.net/gongqingkui/article/details/8928208
搭建
- 下载ActiveMQ
- 解压安装包*.tar.gz
- 进入到bin目录下执行,
./activemq start
命令,也可以通过./activemq console
命令启动服务,并且输出日志在控制台上。 - 启动成功,访问URL
http://192.168.146.129:8161/
如图
创建一个queue name
到此,我们已经成功创建了一个消息队列。
下面我们通过程序,生产和消费
点对点事例
java代码如下:
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package activemq.activemq;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.DeliveryMode;import javax.jms.Destination;import javax.jms.MessageProducer;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;public class Sender { private static final int SEND_NUMBER = 5; public static void main(String[] args) { // ConnectionFactory :连接工厂,JMS 用它创建连接 ConnectionFactory connectionFactory; // Connection :JMS 客户端到JMS Provider 的连接 Connection connection = null; // Session: 一个发送或接收消息的线程 Session session; // Destination :消息的目的地;消息发送给谁. Destination destination; // MessageProducer:消息发送者 MessageProducer producer; // TextMessage message; // 构造ConnectionFactory实例对象,此处采用ActiveMq的实现jar connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, "tcp://192.168.146.129:61616"); try { // 构造从工厂得到连接对象 connection = connectionFactory.createConnection(); // 启动 connection.start(); // 获取操作连接 session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE); // 获取session注意参数值xingbo.xu-queue是一个服务器的queue,须在在ActiveMq的console配置 destination = session.createQueue("message1"); // 得到消息生成者【发送者】 producer = session.createProducer(destination); // 设置不持久化,此处学习,实际根据项目决定 producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); // 构造消息,此处写死,项目就是参数,或者方法获取 sendMessage(session, producer); session.commit(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != connection) connection.close(); } catch (Throwable ignore) { } } } public static void sendMessage(Session session, MessageProducer producer) throws Exception { for (int i = 1; i <= SEND_NUMBER; i++) { TextMessage message = session.createTextMessage("ActiveMq 发送的消息" + i); // 发送消息到目的地方 System.out.println("发送消息:" + "ActiveMq 发送的消息" + i); producer.send(message); } }}
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package activemq.activemq;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.Destination;import javax.jms.MessageConsumer;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;public class Receiver { public static void main(String[] args) { // ConnectionFactory :连接工厂,JMS 用它创建连接 ConnectionFactory connectionFactory; // Connection :JMS 客户端到JMS Provider 的连接 Connection connection = null; // Session: 一个发送或接收消息的线程 Session session; // Destination :消息的目的地;消息发送给谁. Destination destination; // 消费者,消息接收者 MessageConsumer consumer; connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, "tcp://192.168.146.129:61616"); try { // 构造从工厂得到连接对象 connection = connectionFactory.createConnection(); // 启动 connection.start(); // 获取操作连接 session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE); // 获取session注意参数值xingbo.xu-queue是一个服务器的queue,须在在ActiveMq的console配置 destination = session.createQueue("message1"); consumer = session.createConsumer(destination); while (true) { // 设置接收者接收消息的时间,为了便于测试,这里谁定为100s TextMessage message = (TextMessage) consumer.receive(); if (null != message) { System.out.println("收到消息" + message.getText()); } else { break; } } } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != connection) connection.close(); } catch (Throwable ignore) { } } }}
订阅者/发布者模式
发布者
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package activemq.activemq.publish;import java.util.Date;import javax.jms.Connection;import javax.jms.Destination;import javax.jms.MapMessage;import javax.jms.MessageProducer;import javax.jms.Session;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;public class Publisher { public static void main(String[] arg) { String user = ActiveMQConnection.DEFAULT_USER; String password = ActiveMQConnection.DEFAULT_PASSWORD; String url = "tcp://192.168.146.129:61616"; String subject = "mq.topic"; ActiveMQConnectionFactory amcf = new ActiveMQConnectionFactory(user, password, url); try { Connection conn = amcf.createConnection(); conn.start(); Session session = conn.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE); Destination d = session.createTopic(subject); MessageProducer producer = session.createProducer(d); for (int i = 0; i <= 20; i++) { MapMessage message = session.createMapMessage(); Date date = new Date(); message.setLong("count", date.getTime()); Thread.sleep(1000); producer.send(message); System.out.println("--发送消息:" + date); } session.commit(); session.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } }}
订阅者
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package activemq.activemq.publish;import java.util.Date;import javax.jms.Connection;import javax.jms.JMSException;import javax.jms.MapMessage;import javax.jms.Message;import javax.jms.MessageConsumer;import javax.jms.MessageListener;import javax.jms.Session;import javax.jms.Topic;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;public class SubscriberFirst { public static void main(String[] args) { String user = ActiveMQConnection.DEFAULT_USER; String password = ActiveMQConnection.DEFAULT_PASSWORD; String url = "tcp://192.168.146.129:61616"; String subject = "mq.topic"; ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(user, password, url); Connection connection; try { connection = factory.createConnection(); connection.start(); final Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE); Topic topic = session.createTopic(subject); MessageConsumer consumer = session.createConsumer(topic); consumer.setMessageListener(new MessageListener() { public void onMessage(Message msg) { MapMessage message = (MapMessage) msg; try { System.out.println("--订阅者一收到消息:" + new Date(message.getLong("count"))); session.commit(); } catch (JMSException e) { e.printStackTrace(); } } }); } catch (JMSException e) { e.printStackTrace(); } }}
分别运行main方法,奇迹就会发生^_^~~~
0 0
- 使用activeMQ实现jms
- 使用activeMQ实现jms
- JMS -- activeMQ使用
- spring 使用 ActiveMQ,JMS使用
- 【JMS】JMS之ActiveMQ的使用
- JMS Apache ActiveMQ使用(1)
- JMS Apache ActiveMQ使用(3)
- JMS Apache ActiveMQ使用(1)
- JMS Apache ActiveMQ使用(2)
- JMS Apache ActiveMQ使用(3)
- ActiveMQ和JMS的使用
- JMS简介及ActiveMQ使用
- 使用JMS发送消息--ActiveMQ
- JMS ActiveMQ
- JMS ActiveMQ
- JMS ActiveMQ
- JMS activeMQ
- JMS------ActiveMQ
- 关于 Android 平台开发相关的有哪些推荐书籍?
- C# Stream 和 文件之间的转换
- ORACLE存储过程plsql创建与执行(一)
- PYTHON-正则表达式用法
- JNI方法签名规则
- JMS -- activeMQ使用
- iOS 开发 base64 加密和解密
- 日期格式的字符串转换成年月日字符串
- 浅谈Java private default protected public
- RxJava学习笔记(一)--- 基础篇
- Struts2 - 常用的constant总结
- C#从文件读取 Stream
- 历法 —— 十二地支与二十八星宿
- ASCII码表_完整版