一、ActiveMQ

  首先,ActiveMQ不是一个框架,它不是struct,webx,netty这种框架,它更像是tomcat服务器,因为你使用它之前必须启动它,activeMQ和JMS的关系有点类似于tomcat和servlet的关系,tomcat实现了servlet规范,同理activeMQ实现了JMS规范,它们都是服务器,在使用其服务之前需要先把服务器启动起来。

  1. //#准备activeMQ的环境和tomcat的环境一样简单。
  2. //1.下载:wget http://apache.freelamp.com//activemq/apache-activemq/5.4.2/apache-activemq-5.4.2-bin.tar.gz
  3. //2.解压:tar xvf apache-activemq-5.4.2-bin.tar.gz
  4. //3.启动:进入bin目录执行activemq脚本,输入 http://localhost:8161,ActiveMQ服务器成功启动之后,我们就可以向这个服务器发送消息,或者从这个服务器接收消息了

  上面是Linux环境下的安装,解压和启动。下面是Windows环境下的ActiveMQ的配置和使用。http://activemq.apache.org/download.html下载稳定版本。

二、ActiveMQ发消息

  1. import javax.jms.Connection;
  2. import javax.jms.Destination;
  3. import javax.jms.JMSException;
  4. import javax.jms.MessageProducer;
  5. import javax.jms.Session;
  6. import javax.jms.TextMessage;
  7. import org.apache.activemq.ActiveMQConnectionFactory;
  8.  
  9. public class SendMessage {
  10.  
  11. private static final String url = "tcp://10.20.156.22:61616";
  12. private static final String QUEUE_NAME = "yunpeng.jiangyp";
  13. protected String expectedBody = "<hello>world!</hello>";
  14.  
  15. public void sendMessage() throws JMSException {
  16.  
  17. ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
  18. Connection connection = connectionFactory.createConnection();
  19. connection.start();
  20.  
  21. Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
  22. Destination desion = session.createQueue(QUEUE_NAME);
  23. MessageProducer producer = session.createProducer(desion);
  24. TextMessage message = session.createTextMessage(expectedBody);
  25. producer.send(message);
  26. connection.close();
  27. }
  28.  
  29. public static void main(String[] args) throws JMSException {
  30. SendMessage sndMsg = new SendMessage();
  31. sndMsg.sendMessage();
  32. }
  33. }

这段代码很简单,就是向activemq服务器发送一条消息,当成功发送给activemq之后,可以在(http://10.20.156.22:8161/admin/queues.jsp)activemq服务器的控制台看到这条消息。控制台显示yunpeng.jiangyp堆积了2条消息。

三、ActiveMQ收消息

  1. import javax.jms.Connection;
  2. import javax.jms.Destination;
  3. import javax.jms.JMSException;
  4. import javax.jms.Message;
  5. import javax.jms.MessageConsumer;
  6. import javax.jms.Session;
  7. import javax.jms.TextMessage;
  8. import org.apache.activemq.ActiveMQConnectionFactory;
  9.  
  10. public class ReceiveMessage {
  11.  
  12. private static final String url = "tcp://10.20.156.22:61616";
  13. private static final String QUEUE_NAME = "yunpeng.jiangyp";
  14.  
  15. public static void main(String[] args) throws JMSException {
  16.  
  17. ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(url);
  18. Connection connection = factory.createConnection();
  19. connection.start();
  20.  
  21. Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
  22. Destination desion = session.createQueue(QUEUE_NAME);
  23. MessageConsumer consumer = session.createConsumer(desion);
  24. while (true) {
  25.  
  26. Message message = consumer.receive(1000);
  27. if (message == null) break;
  28. if (message instanceof TextMessage) {
  29. TextMessage textMsg = (TextMessage) message;
  30. String msg = textMsg.getText();
  31. System.out.println(msg);
  32. }
  33. }
  34. connection.close();
  35.  
  36. }
  37. }

  这段代码也很简单,就是从activemq服务器接收一条消息,可以发现发送和接收消息都需要创建Connection,Session,Queue,唯一不同的是发送消息是创建MessageProducer,而接收消息是创建MessageConsumer,这也非常形象的证明了activemq的生产者和消费者模式。运行这段代码会打印出之前发送的消息信息,同时控制台会显示两条堆积的消息被消费。

  在JMS中两种发送消息的方式,包含point-to-point 和 publish/subscribe。

四、

ActiveMQ(li)的更多相关文章

  1. 深入浅出 消息队列 ActiveMQ(转)

    一. 概述与介绍 ActiveMQ 是Apache出品,最流行的.功能强大的即时通讯和集成模式的开源服务器.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provide ...

  2. ActiveMQ(一)——简介

    一.ActiveMQ简介 ActiveMQ是什么ActiveMQ是Apache推出的,一款开源的,完全支持JMS1.1和J2EE1.4规范的JMS Provider实现的消中间件(MOM) Activ ...

  3. spring源码:学习线索(li)

    一.spring xml配置(不包括AOP,主要了解在初始化及实例化过程中spring配置文件中每项内容的具体实现过程,从根本上掌握spring) <bean>的名字 &,alia ...

  4. java socket编程(li)

    一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输.在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以 ...

  5. spring源码:ApplicationContext的增强功能(li)

    ApplicationContext作为资源加载器:ApplicationContext作为事件发布者: Java原生提供了事件发布机制------EventObject对象作为发布的事件,Event ...

  6. spring源码:BeanPostProcessor(li)

    在spring管理Bean的初始化过程中,除了正常管理bean的实例化(初始化.参数注入等)外,还对外提供了丰富的对Bean操作的扩展.例如自定义初始化操作,自定义容器退出时Bean的销毁操作等等.这 ...

  7. spring源码:IOC(li)

    一.BeanDefinition BeanDefinition是配置文件<bean>元素标签在容器中内部表示形式.创建最终的BeanDefinition主要包括两个步骤: 1)利用Bean ...

  8. 分布式任务&分布式锁(li)

    目前系统中存在批量审批.批量授权等各个操作,批量操作中可能因为处理机器.线程不同,造成刷新缓存丢失授权等信息,如批量审批同一用户权限多个权限申请后,流程平台并发的发送多个http请求到acl不同服务器 ...

  9. MySQL引擎、索引和优化(li)

    一.存储引擎 存储引擎,MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术 ...

随机推荐

  1. CSS中强悍的相对单位之em(em-and-elastic-layouts)学习小记

    使用相对单位em注意点 1.浏览器默认字体是16px,即1em = 16px,根元素设置如下 html{ font-size: 100%; /* WinIE text resize correctio ...

  2. Kotlin类:功能更强、而更简洁(KAD 03)

    作者:Antonio Leiva 时间:Dec 7, 2016 原文链接:http://antonioleiva.com/classes-kotlin/ Kotlin类尽可能简单,这样用较少的代码完成 ...

  3. Java 教程整理:基础、项目全都有

    Java 在编程语言排行榜中一直位列前排,可知 Java 语言的受欢迎程度了. 网上有很多 Java 教程,无论是基础入门还是开发小项目的教程都比比皆是,可是系统的很少,对于Java 学习者来说找到系 ...

  4. weinre- 调试移动端页面

    相信很多前端的小伙伴一定会遇到一个问题, 比如我编写完一个页面,某个地方需要进行调整细节或者是哪个地方怎么调整都不对,在pc端还好,有google,firefox之类可以调节页面的工具,虽说这些工具有 ...

  5. BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]

    1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1383  Solved: 582[Submit][St ...

  6. 希尔排序(java)

    时间复杂度为O( n^(3/2) )不是一个稳定的排序算法 如何看一个算法是否稳定:{("scala",12),("python",34),("c++ ...

  7. Netty构建分布式消息队列(AvatarMQ)设计指南之架构篇

    目前业界流行的分布式消息队列系统(或者可以叫做消息中间件)种类繁多,比如,基于Erlang的RabbitMQ.基于Java的ActiveMQ/Apache Kafka.基于C/C++的ZeroMQ等等 ...

  8. ExtJS in Review - xtype vs. alias

    今天在帮一个兄弟检查一段自定义控件的代码时觉得他对xtype以及alias的使用和ExtJS各示例代码的使用有较多的不一致,而我自己也不是很清楚使用这两个属性时的最佳方法.因此在回家后整理出了这样一篇 ...

  9. JavaScript单线程和浏览器事件循环简述

    JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...

  10. EasyPR--开发详解(7)字符分割

    大家好,好久不见了. 一转眼距离上一篇博客已经是4个月前的事了.要问博主这段时间去干了什么,我只能说:我去“外面看了看”. 图1 我想去看看 在外面跟几家创业公司谈了谈,交流了一些大数据与机器视觉相关 ...