转载:http://blog.csdn.net/jiuqiyuliang/article/details/48608237

JMS其实并没有想象的那么高大上,看完这篇博文之后,你就知道什么叫简单,下面直接进入主题。

开发环境

我们使用的是ActiveMQ 5.11.1 Release的Windows版,官网最新版是ActiveMQ 5.12.0 Release,大家可以自行下载,下载地址。

需要注意的是,开发时候,要将apache-activemq-5.11.1-bin.zip解压缩后里面的activemq-all-5.11.1.jar包加入到classpath下面,这个包包含了所有jms接口api的实现。

搭建开发环境

  • 建立项目
    我们只需要建立一个java项目就可以了,导入jar包,项目截图:

点对点的消息模型,只需要一个消息生成者和消息消费者,下面我们编写代码。

  • 编写生产者

package com.tgb.activemq;import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
/*** 消息的生产者(发送者) * @author liang**/
public class JMSProducer {//默认连接用户名private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;//默认连接密码private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;//默认连接地址private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL;//发送的消息数量private static final int SENDNUM = 10;public static void main(String[] args) {//连接工厂ConnectionFactory connectionFactory;//连接Connection connection = null;//会话 接受或者发送消息的线程Session session;//消息的目的地Destination destination;//消息生产者MessageProducer messageProducer;//实例化连接工厂connectionFactory = new ActiveMQConnectionFactory(JMSProducer.USERNAME, JMSProducer.PASSWORD, JMSProducer.BROKEURL);try {//通过连接工厂获取连接connection = connectionFactory.createConnection();//启动连接connection.start();//创建sessionsession = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);//创建一个名称为HelloWorld的消息队列destination = session.createQueue("HelloWorld");//创建消息生产者messageProducer = session.createProducer(destination);//发送消息sendMessage(session, messageProducer);session.commit();} catch (Exception e) {e.printStackTrace();}finally{if(connection != null){try {connection.close();} catch (JMSException e) {e.printStackTrace();}}}}/*** 发送消息* @param session* @param messageProducer  消息生产者* @throws Exception*/public static void sendMessage(Session session,MessageProducer messageProducer) throws Exception{for (int i = 0; i < JMSProducer.SENDNUM; i++) {//创建一条文本消息 TextMessage message = session.createTextMessage("ActiveMQ 发送消息" +i);System.out.println("发送消息:Activemq 发送消息" + i);//通过消息生产者发出消息 messageProducer.send(message);}}
}
  • 编写消费者

package com.tgb.activemq;import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
/*** 消息的消费者(接受者)* @author liang**/
public class JMSConsumer {private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;//默认连接用户名private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;//默认连接密码private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL;//默认连接地址public static void main(String[] args) {ConnectionFactory connectionFactory;//连接工厂Connection connection = null;//连接Session session;//会话 接受或者发送消息的线程Destination destination;//消息的目的地MessageConsumer messageConsumer;//消息的消费者//实例化连接工厂connectionFactory = new ActiveMQConnectionFactory(JMSConsumer.USERNAME, JMSConsumer.PASSWORD, JMSConsumer.BROKEURL);try {//通过连接工厂获取连接connection = connectionFactory.createConnection();//启动连接connection.start();//创建sessionsession = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);//创建一个连接HelloWorld的消息队列destination = session.createQueue("HelloWorld");//创建消息消费者messageConsumer = session.createConsumer(destination);while (true) {TextMessage textMessage = (TextMessage) messageConsumer.receive(100000);if(textMessage != null){System.out.println("收到的消息:" + textMessage.getText());}else {break;}}} catch (JMSException e) {e.printStackTrace();}}
}

运行

  1. 首先,启动ActiveMQ,如何启动ActiveMQ如何启动,请看第二篇博文。在浏览器中输入:http://localhost:8161/admin/,然后开始执行:
  2. 运行发送者,eclipse控制台输出,如下图:

    此时,我们先看一下ActiveMQ服务器,Queues内容如下:

    我们可以看到创建了一个名称为HelloWorld的消息队列,队列中有10条消息未被消费,我们也可以通过Browse查看是哪些消息,如下图:

    如果这些队列中的消息,被删除,消费者则无法消费。

  3. 我们继续运行一下消费者,eclipse控制台打印消息,如下:

    此时,我们先看一下ActiveMQ服务器,Queues内容如下:

    我们可以看到HelloWorld的消息队列发生变化,多一个消息者,队列中的10条消息被消费了,点击Browse查看,已经为空了。
    点击Active Consumers,我们可以看到这个消费者的详细信息:

我们的实例到此就结束了,大家可以自己多点ActiveMQ服务器的内容,进一步熟悉ActiveMQ。

总结

这篇博文我们实现了点对点的消息模型以及发送的一个同步消息,是不是非常的简单?

activemq的使用(四)相关推荐

  1. ActiveMQ学习(四)——应用程序接口

    在 Java 里有 JMS的多个实现.其中 apache 下的 ActiveMQ就是不错的选择. 用 ActiveMQ最好还是了解下 JMS JMS 公共 点对点域 发布/订阅域 Connection ...

  2. ActiveMQ应用笔记四:Ajax应用

    环境: apache-activemq-5.8.0 Tomcat7.0.29 jdk1.7.0_03 win7 eclipse(Version: Helios Service Release 2Bui ...

  3. ActiveMQ消息队列安装和使用

    ActiveMQ ActiveMQ介绍 什么是ActiveMQ ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规 ...

  4. 项目之: JMSamp、ActiveMQ

    JMS&ActiveMQ介绍 JMS介绍 Java Message Service(JMS)是SUN提出的旨在统一各种MOM(Message-Oriented Middleware )系统接口 ...

  5. 【ActiveMQ】JMS中间件ActiveMQ详解

    1.JMS介绍 Java Message Service(JMS)是SUN提出的旨在统一各种MOM(Message-Oriented Middleware )系统接口的规范,它包含点对点(Point ...

  6. activeMQ指南针_领域模型分析_V1.0

    图一 activeMQ现在越来越复杂了,就像一个武林高手,会的套路是越来越多了,想要看清他的路数,有点不容易.但是如果能把住他的"脉"也许就看清楚了.activeMQ做为软件也有它 ...

  7. linux 进程自重启,linux 进程监控和自动重启的简单实现

    目的:linux 下服务器程序会因为各种原因dump掉,就会影响用户使用,这里提供一个简单的进程监控和重启功能. 实现原理:由定时任务crontab调用脚本,脚本用ps检查进程是否存在,如果不存在则重 ...

  8. 17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 作者:28cm不含头(来自:知乎) 原文链接: https://www.zhihu.com/qu ...

  9. activemq后台管理 看topic消息_17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列...

    作者:28cm不含头(来自:知乎) 原文链接: https://www.zhihu.com/question/43557507 一.资料文档 二.开发语言 三.支持的协议 四.消息存储 五.消息事务 ...

最新文章

  1. linux日志管理命令详解
  2. 如果让我重做一次研究生--王泛森院士
  3. 使用mcBackup备份Windows 7 Media Center设置
  4. 神经网络与深度学习——TensorFlow2.0实战(笔记)(二)(包管理和环境管理)
  5. 知识点:Mysql 数据库索引优化实战(4)
  6. 苹果cms V8 M1938蓝色自适应模板
  7. jQuery之全选功能
  8. java比较时间戳大小_JAVA中两个String类型的时间戳怎么样比较大小?
  9. TCP实现多线程下文件的上传
  10. Spring-Logback-动态修改日志级别
  11. Zephyr NVS文件系统原理及应用
  12. 2.C#2.0之泛型(完成)
  13. Atitit 定时器timer 总结 目录 1. 定时器 循环定时器 和timeout超时定时器 1 2. Spring定时器 1 2.1. 大概流程 1 2.2. 核心源码springboot 1
  14. freyja 将引入另外一项功能大幅提高服务器性能
  15. 微信怎样诞生:张小龙给马化腾的一封邮件
  16. OpwnWrt 路由器MWAN3多线多拨实现方法
  17. win10 2016 长期服务版的ISO文件中本身就带有KMS激活KEY
  18. markdown文件转RST文件
  19. Oracle查询列重命名问题
  20. 华为手机便签有扫描的功能么

热门文章

  1. 【Boost】boost库中thread多线程详解3——细说lock_guard
  2. cocos2d-x游戏实例(21)-纵版射击游戏(8)
  3. MFC六大核心机制之三:动态创建
  4. c++ template(10)类型函数
  5. 数据结构与算法 | 直接插入排序、希尔排序
  6. 三流面试聊JDK,二流面试聊JVM,一流面试……
  7. 漫画TCP——一个悲伤的故事
  8. RabbitMQ负载均衡(3)——Keepalived+HAProxy实现高可用的负载均衡
  9. Kafka发送超过broker限定大小的消息时Client和Broker端各自会有什么异常?
  10. LiveVideoStack线上分享第三季(一):低延迟线上K歌玩法的思考与实践