【activeMQ】ActiveMQ 发送接收消息(含安装运行测试)
2016-01-28 14:47
567 查看
准备工作
下载
下载地址:http://activemq.apache.org/ 我这里使用的版本为当前最新5.8.0。下载版本有Windows和Linux两个版本,且都分为32位和64位。根据自己需要选择下载。
安装
我这里下载的为windows的32位版本(apache-activemq-5.8.0-bin.zip),下载后直接解压到需要安装的目录或在直接解压到当前目录也可,解压完安装也完成。解压后目录如上图,里面包含了示例和文档,及所有的jar包。
运行
进入到bin目录(apache-activemq-5.8.0\bin),双击activemq.bat,就会运行,运行截图如下:此时表示ActiveMQ已经在运行了,当然正常生产环境下可以设置作为服务在后台运行,并且随系统启动而启动。
测试
ActiveMQ自带了一套管理系统,访问http://localhost:8161/admin/,会出现需要输入用户名和密码的页面如下:默认用户名和密码都是admin,进入后则为主界面:
在这个界面上,我们可以管理队列及其他的一些功能,为了下面的继续,我们在这里创建一个Queue和一个Topic。
点击目录上的Queues进入创建Queue页面,输入Queue名称,点击Create后下面就创建了G2Queue的queue队列。
这里也可以不用这样手工创建,在发送端指定了一个Queue或Topic名字后,会自动创建一个队列,如上面的choice.queue和FirstQueue都是我测试程序时,程序里面指定的Queue名称,自动创建的。
同样的方式创建一个Topic,如下:
需要引用的jar包
<dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.11.2</version> </dependency>
发送消息
import java.util.Random; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.DeliveryMode; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; public class SendMessage { private static final String url = "tcp://localhost:61616"; private static final String QUEUE_NAME = "G2Queue"; public void sendMessage() throwsJMSException { // JMS 客户端到JMSProvider 的连接 Connection connection = null; try { // 连接工厂,JMS 用它创建连接 // 构造ConnectionFactory实例对象,此处采用ActiveMq的实现jar ConnectionFactory connectionFactory = newActiveMQConnectionFactory(url); connection = (Connection)connectionFactory.createConnection(); // 启动连接 connection.start(); //Session:发送或接收消息的线程 // 获取session Session session = (Session) connection.createSession(false, Session.AUTO_ACKNOWLEDGE); // 消息的目的地,消息发送到那个队列 Destination destination = session.createQueue(QUEUE_NAME); //MessageProducer:消息发送者(生产者) // 创建消息发送者 MessageProducer producer =session.createProducer(destination); // 设置是否持久化 //DeliveryMode.NON_PERSISTENT:不持久化 //DeliveryMode.PERSISTENT:持久化 producer.setDeliveryMode(DeliveryMode.PERSISTENT); String msg = ""; int i = 0; do { msg = "第"+i + "次发送的消息:"+new Random(); TextMessagemessage = session.createTextMessage(msg); Thread.sleep(1000); // 发送消息到目的地方 producer.send(message); System.out.println("发送消息:" +msg); i++; } while (i<1000); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { SendMessage sndMsg = newSendMessage(); try { sndMsg.sendMessage(); } catch (Exception ex) { System.out.println(ex.toString()); } } }
运行结果如下:
接收消息
package cn.g2room.mq.test; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; /** * 消息接收类 * * @createTime:Apr 7, 2013 5:11:11 PM * @author:<a href="mailto:252909344@qq.com">迷蝶</a> * @version:0.1 *@lastVersion: 0.1 * @updateTime: *@updateAuthor: <a href="mailto:252909344@qq.com">迷蝶</a> * @changesSum: * */ public class ReceiveMessage { privatestatic final String url = "tcp://localhost:61616"; privatestatic final String QUEUE_NAME = "G2Queue"; publicvoid receiveMessage() { Connectionconnection = null; try{ try{ ConnectionFactoryconnectionFactory = new ActiveMQConnectionFactory( url); connection= connectionFactory.createConnection(); }catch (Exception e) { System.out.println(e.toString()); } connection.start(); Sessionsession = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); Destinationdestination = session.createQueue(QUEUE_NAME); //消息接收者,也就是消费者 MessageConsumerconsumer = session.createConsumer(destination); consumeMessagesAndClose(connection,session, consumer); }catch (Exception e) { System.out.println(e.toString()); } } /** * 接收和关闭消息,如遇到消息内容为close则,关闭连接 * * @param connection JMS 客户端到JMSProvider 的连接 * @param session 发送或接收消息的线程 * @param consumer 消息接收对象 * @throws JMSException * @auther <ahref="mailto:252909344@qq.com">迷蝶</a> * Apr 8, 2013 10:31:55 AM */ protectedvoid consumeMessagesAndClose(Connection connection, Sessionsession, MessageConsumer consumer) throws JMSException { do{ Messagemessage = consumer.receive(1000); if("close".equals(message)){ consumer.close(); session.close(); connection.close(); } if(message != null) { onMessage(message); } }while (true); } publicvoid onMessage(Message message) { try{ if(message instanceof TextMessage) { TextMessagetxtMsg = (TextMessage) message; Stringmsg = txtMsg.getText(); System.out.println("Received:" + msg); } }catch (Exception e) { e.printStackTrace(); } } publicstatic void main(String args[]) { ReceiveMessagerm = new ReceiveMessage(); rm.receiveMessage(); } }
运行结果如下:
至此结束
本文转自:http://blog.csdn.net/leadergg/article/details/8771218
相关文章推荐
- 你知道哪些linux命令,能把文件上传到远程linux服务器
- js-原型以及继承小案例
- tomcat配置没啥难的啊
- 节点遍历 element traversal
- wireshark解析rtp协议,流媒体中的AMR/H263/H264包的方法
- 在项目中记住Github用户名和密码的方法
- 云服务正在吞噬世界!
- for-in 来遍历字典 while for 循环
- linux undefined reference Access(char* ...)函数错误
- 使应用程序只能运行一次,第二次运行显示上次程序
- C语言字符串操作函数
- Java 模板方法模式的实现
- iOS之POST与GET的优缺点
- javascript 延迟
- 泗泾办小卡需要的材料
- UVA 1595 multimap 的应用
- 网络数据包收发流程(二):不配置NAPI的情况
- Freescale Yocto的安装,环境Ubuntu14.04
- Jquery基础学习(一)
- 一个简单的文件合并工具