第一篇博文JMS【一】--JMS基本概念,我们介绍了JMS的两种消息模型:点对点和发布订阅模型,以及消息被消费的两个方式:同步和异步,JMS编程模型的对象,最后说了JMS的优点。

第二篇博文JMS【二】--ActiveMQ简单介绍以及安装,我们介绍了消息中间件ActiveMQ,安装,启动,以及优缺点。

这篇博文,我们使用ActiveMQ为大家实现一种点对点的消息模型。如果你对点对点模型的认识较浅,可以看一下第一篇博文的介绍。

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

1、开发环境

  我们使用的是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的实现。

2、搭建开发环境

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

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

  • 编写生产者
  1. package com.tgb.activemq;
  2.  
  3. import javax.jms.Connection;
  4. import javax.jms.ConnectionFactory;
  5. import javax.jms.Destination;
  6. import javax.jms.JMSException;
  7. import javax.jms.MessageProducer;
  8. import javax.jms.Session;
  9. import javax.jms.TextMessage;
  10.  
  11. import org.apache.activemq.ActiveMQConnection;
  12. import org.apache.activemq.ActiveMQConnectionFactory;
  13. /**
  14. * 消息的生产者(发送者)
  15. * @author liang
  16. *
  17. */
  18. public class JMSProducer {
  19.  
  20. //默认连接用户名
  21. private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
  22. //默认连接密码
  23. private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
  24. //默认连接地址
  25. private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL;
  26. //发送的消息数量
  27. private static final int SENDNUM = 10;
  28.  
  29. public static void main(String[] args) {
  30. //连接工厂
  31. ConnectionFactory connectionFactory;
  32. //连接
  33. Connection connection = null;
  34. //会话 接受或者发送消息的线程
  35. Session session;
  36. //消息的目的地
  37. Destination destination;
  38. //消息生产者
  39. MessageProducer messageProducer;
  40. //实例化连接工厂
  41. connectionFactory = new ActiveMQConnectionFactory(JMSProducer.USERNAME, JMSProducer.PASSWORD, JMSProducer.BROKEURL);
  42.  
  43. try {
  44. //通过连接工厂获取连接
  45. connection = connectionFactory.createConnection();
  46. //启动连接
  47. connection.start();
  48. //创建session
  49. session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
  50. //创建一个名称为HelloWorld的消息队列
  51. destination = session.createQueue("HelloWorld");
  52. //创建消息生产者
  53. messageProducer = session.createProducer(destination);
  54. //发送消息
  55. sendMessage(session, messageProducer);
  56.  
  57. session.commit();
  58.  
  59. } catch (Exception e) {
  60. e.printStackTrace();
  61. }finally{
  62. if(connection != null){
  63. try {
  64. connection.close();
  65. } catch (JMSException e) {
  66. e.printStackTrace();
  67. }
  68. }
  69. }
  70.  
  71. }
  72. /**
  73. * 发送消息
  74. * @param session
  75. * @param messageProducer 消息生产者
  76. * @throws Exception
  77. */
  78. public static void sendMessage(Session session,MessageProducer messageProducer) throws Exception{
  79. for (int i = 0; i < JMSProducer.SENDNUM; i++) {
  80. //创建一条文本消息
  81. TextMessage message = session.createTextMessage("ActiveMQ 发送消息" +i);
  82. System.out.println("发送消息:Activemq 发送消息" + i);
  83. //通过消息生产者发出消息
  84. messageProducer.send(message);
  85. }
  86.  
  87. }
  88. }
  • 编写消费者
  1. package com.tgb.activemq;
  2.  
  3. import javax.jms.Connection;
  4. import javax.jms.ConnectionFactory;
  5. import javax.jms.Destination;
  6. import javax.jms.JMSException;
  7. import javax.jms.MessageConsumer;
  8. import javax.jms.Session;
  9. import javax.jms.TextMessage;
  10.  
  11. import org.apache.activemq.ActiveMQConnection;
  12. import org.apache.activemq.ActiveMQConnectionFactory;
  13. /**
  14. * 消息的消费者(接受者)
  15. * @author liang
  16. *
  17. */
  18. public class JMSConsumer {
  19.  
  20. private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;//默认连接用户名
  21. private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;//默认连接密码
  22. private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL;//默认连接地址
  23.  
  24. public static void main(String[] args) {
  25. ConnectionFactory connectionFactory;//连接工厂
  26. Connection connection = null;//连接
  27.  
  28. Session session;//会话 接受或者发送消息的线程
  29. Destination destination;//消息的目的地
  30.  
  31. MessageConsumer messageConsumer;//消息的消费者
  32.  
  33. //实例化连接工厂
  34. connectionFactory = new ActiveMQConnectionFactory(JMSConsumer.USERNAME, JMSConsumer.PASSWORD, JMSConsumer.BROKEURL);
  35.  
  36. try {
  37. //通过连接工厂获取连接
  38. connection = connectionFactory.createConnection();
  39. //启动连接
  40. connection.start();
  41. //创建session
  42. session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
  43. //创建一个连接HelloWorld的消息队列
  44. destination = session.createQueue("HelloWorld");
  45. //创建消息消费者
  46. messageConsumer = session.createConsumer(destination);
  47.  
  48. while (true) {
  49. TextMessage textMessage = (TextMessage) messageConsumer.receive(100000);
  50. if(textMessage != null){
  51. System.out.println("收到的消息:" + textMessage.getText());
  52. }else {
  53. break;
  54. }
  55. }
  56.  
  57. } catch (JMSException e) {
  58. e.printStackTrace();
  59. }
  60.  
  61. }
  62. }

3、运行

  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。

4、总结

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

  下面博文,我们将实现一个ActiveMQ和Spring整合的实例。

  源码下载

  git下载:git@github.com:changbingbing/ActiveMQ.git

JMS【三】--ActiveMQ简单的HelloWorld实例的更多相关文章

  1. 深入浅出JMS(三)--ActiveMQ简单的HelloWorld实例

    第一篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了JMS的两种消息模型:点对点和发布订阅模型,以及消息被消费的两个方式:同步和异步,JMS编程模型的对象,最后说了JMS的优点. 第二篇博文深入 ...

  2. 【转】深入浅出JMS(三)--ActiveMQ简单的HelloWorld实例

    这篇博文,我们使用ActiveMQ为大家实现一种点对点的消息模型.如果你对点对点模型的认识较浅,可以看一下第一篇博文的介绍. JMS其实并没有想象的那么高大上,看完这篇博文之后,你就知道什么叫简单,下 ...

  3. ActiveMQ简单的HelloWorld实例

    我们使用ActiveMQ为大家实现一种点对点的消息模型. 开发时候,要将apache-activemq-5.12.0-bin.zip解压缩后里面的activemq-all-5.12.0.jar包加入到 ...

  4. 深入浅出 JMS(三) - ActiveMQ 安全机制

    深入浅出 JMS(三) - ActiveMQ 安全机制 一.认证 认证(Authentication):验证某个实体或者用户是否有权限访问受保护资源. MQ 提供两种插件用于权限认证: (一).Sim ...

  5. 深入浅出JMS(二)--ActiveMQ简单介绍以及安装

    现实的企业中,对于消息通信的应用一直都非常的火热,而且在J2EE的企业应用中扮演着特殊的角色,所以对于它研究是非常有必要的. 上篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了消息通信的规范JM ...

  6. 基于注解配置的Spring MVC 简单的HelloWorld实例应用

    2.1 问题 使用注解的方式重构helloworld应用案例. 2.2 方案 1. @RequestMapping注解应用 @RequestMapping可以用在类定义和方法定义上,它标明这个类或方法 ...

  7. 基于XML配置的Spring MVC 简单的HelloWorld实例应用

    1.1 问题 使用Spring Web MVC构建helloworld Web应用案例. 1.2 方案 解决本案例的方案如下: 1. 创建Web工程,导入Spring Web MVC相关开发包. Sp ...

  8. 深入浅出JMS(四)--Spring和ActiveMQ整合的完整实例

    第一篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了JMS的两种消息模型:点对点和发布订阅模型,以及消息被消费的两个方式:同步和异步,JMS编程模型的对象,最后说了JMS的优点. 第二篇博文深入 ...

  9. JMS【四】--Spring和ActiveMQ整合的完整实例

    第一篇博文JMS[一]--JMS基本概念,我们介绍了JMS的两种消息模型:点对点和发布订阅模型,以及消息被消费的两个方式:同步和异步,JMS编程模型的对象,最后说了JMS的优点. 第二篇博文JMS[二 ...

随机推荐

  1. armv8(aarch64)linux内核中flush_dcache_all函数详细分析【转】

    转自:http://blog.csdn.net/qianlong4526888/article/details/12062809 版权声明:本文为博主原创文章,未经博主允许不得转载. /* *  __ ...

  2. expdp impdp中 exclude/include 的使用

    exclude和include参数能够在使用expdp或impdp是对特定的对象或对象类型进行筛选或过滤.比如因工作的需要导出特定的表或不导出特定 的表.视图以及存储过程.索引.约束.授权统计信息等等 ...

  3. activeMQ下载,安装,启动,关闭

    1.新建一个文件夹activeMQ   mkdir /server 2.授权    chmod 777 /server 3.下载activeMQ安装包,拷贝到/activeMQ目录下 apache-a ...

  4. php中的curl】php中curl的详细解说

    本文我来给大家详细介绍下cURL的简单的使用方法,下文我将会给大家详细介绍cURL的高级应用, cURL可以使用URL的语法模拟浏览器来传输数据, FTP, FTPS, HTTP, HTTPS, GO ...

  5. pipe row的用法, Oracle split 函数写法.

    为了让 PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行 ...

  6. java面试每日一题13

    题目:有一个分数数列2/1.3/2.5/3.8/5.13/8........求出这个数列的前20项之和.运行结果如下32.660263 public class Page80 { /** * * @p ...

  7. string xml json格式区别

    string 是一种最普通的储存一串字符的数据格式 xml 是一种可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. 它非常适合万维网传输,提供统一的方 ...

  8. 在IE6下使用filter设置png背景

    今天帮别人解决问题学会了一个在IE6下使用filter设置png背景,具体css写法如下: .login_form_wrap { width: 778px; height: 360px; backgr ...

  9. 关于sql状态值

    C = CHECK 约束D = 默认值或 DEFAULT 约束F = FOREIGN KEY 约束L = 日志FN = 标量函数IF = 内嵌表函数P = 存储过程PK = PRIMARY KEY 约 ...

  10. SQL Server中常用的SQL语句

    1.概述 名词 笛卡尔积.主键.外键 数据完整性 实体完整性:主属性不能为空值,例如选课表中学号和课程号不能为空 参照完整性:表中的外键取值为空或参照表中的主键 用户定义完整性:取值范围或非空限制,例 ...