一、下载运行MQ服务

1、下载ActiveMQ :http://activemq.apache.org/

2、解压缩:

进入bin目录 win32和win64对应不同位的操作系统,选择进入 点击activemq.bat 运行即可启动ActiveMQ服务。

在浏览器输入ActiveMQ 服务地址:http://127.0.0.1:8161/admin/         默认用户名/密码 admin/admin

二、开发

jar:activemq-all-5.11.1.jar   在ActiveMQ安装目录下面就有  拷贝到工程即可

1、点对点模式

  1. package com.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. * 消息生产者
  16. * @author Administrator
  17. */
  18. public class JMSProducer
  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. {
  26. ConnectionFactory connfactory;//连接工厂
  27. Connection conn = null;//连接
  28. Session session;//接收或者发送消息的线程
  29. Destination dest;//消息的目的地
  30. MessageProducer producer;//消息的生产者
  31.  
  32. //创建连接工厂
  33. connfactory = new ActiveMQConnectionFactory(JMSProducer.USERNAME,JMSProducer.PASSWORD,JMSProducer.BROKEURL);
  34. try
  35. {
  36. conn = connfactory.createConnection();//获取连接
  37. conn.start();//启动连接
  38. session = conn.createSession(true, Session.AUTO_ACKNOWLEDGE);//以事务模式获取会话
  39. dest = session.createQueue("FirstQueue1");//创建消息队列
  40. producer = session.createProducer(dest);//创建消息生产者
  41. sendMessage(session, producer);//生产并发送消息
  42. session.commit();
  43. }
  44. catch (Exception e)
  45. {
  46. e.printStackTrace();
  47. }
  48. finally
  49. {
  50. if (conn != null)
  51. {
  52. try
  53. {
  54. conn.close();
  55. }
  56. catch (JMSException e)
  57. {
  58. e.printStackTrace();
  59. }
  60. }
  61. }
  62. }
  63.  
  64. /**
  65. * 发现哦那个消息
  66. * @param session
  67. * @param messageProducer
  68. * @throws JMSException
  69. */
  70. private static void sendMessage(Session session,MessageProducer messageProducer) throws JMSException
  71. {
  72. for(int i=1;i<=10;i++)
  73. {
  74. TextMessage text = session.createTextMessage("生产消息:"+i);//session用来生产消息
  75. messageProducer.send(text);//MessageProducer用来发送消息
  76. }
  77. }
  78.  
  79. }
  1. package com.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. * 消息消费者
  16. * @author Administrator
  17. *
  18. */
  19. public class JMSConsumer
  20. {
  21. private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;//默认连接用户名
  22. private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;//默认连接密码
  23. private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL;//默认连接地址
  24.  
  25. public static void main(String[] args)
  26. {
  27. ConnectionFactory connfactory;//连接工厂
  28. Connection conn = null;//连接
  29. Session session;//接收或者发送消息的线程
  30. Destination dest;//消息的目的地
  31. MessageConsumer messageConsumer;//消息消费者
  32. //创建连接工厂
  33. connfactory = new ActiveMQConnectionFactory(JMSConsumer.USERNAME,JMSConsumer.PASSWORD,JMSConsumer.BROKEURL);
  34.  
  35. try
  36. {
  37. conn = connfactory.createConnection();//获取连接
  38. conn.start();//启动连接
  39. session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);//以事务模式获取会话
  40. dest = session.createQueue("FirstQueue1");//创建消息队列
  41. messageConsumer = session.createConsumer(dest);
  42. //receive模式
  43. // while(true)
  44. // {
  45. // TextMessage text = (TextMessage)messageConsumer.receive(100000);
  46. // if (text != null)
  47. // {
  48. // System.out.println("receive模式接收:"+text.getText());
  49. // }
  50. // else
  51. // {
  52. // break;
  53. // }
  54. // }
  55. //监听模式
  56. messageConsumer.setMessageListener(new Listener());// 注册消息监听
  57. }
  58. catch (Exception e)
  59. {
  60. e.printStackTrace();
  61. }
  62. //后期不能关闭 要一直处于监听模式 需要conn一直开启
  63. }
  64.  
  65. }
  1. package com.activemq;
  2.  
  3. import javax.jms.JMSException;
  4. import javax.jms.Message;
  5. import javax.jms.MessageListener;
  6. import javax.jms.TextMessage;
  7.  
  8. public class Listener implements MessageListener
  9. {
  10.  
  11. @Override
  12. public void onMessage(Message message)
  13. {
  14. try {
  15. System.out.println("监听模式接收:"+ ((TextMessage)message).getText());
  16. } catch (JMSException e) {
  17. // TODO Auto-generated catch block
  18. e.printStackTrace();
  19. }
  20. }
  21.  
  22. }

2、发布订阅模式

  1. package com.activemq2;
  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. public class JMSProducer
  15. {
  16. private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;//默认连接用户名
  17. private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;//默认连接密码
  18. private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL;//默认连接地址
  19.  
  20. public static void main(String[] args)
  21. {
  22. ConnectionFactory connfactory;//连接工厂
  23. Connection conn = null;//连接
  24. Session session;//接收或者发送消息的线程
  25. Destination dest;//消息的目的地
  26. MessageProducer producer;//消息的生产者
  27.  
  28. //创建连接工厂
  29. connfactory = new ActiveMQConnectionFactory(JMSProducer.USERNAME,JMSProducer.PASSWORD,JMSProducer.BROKEURL);
  30. try
  31. {
  32. conn = connfactory.createConnection();//获取连接
  33. conn.start();//启动连接
  34. session = conn.createSession(true, Session.AUTO_ACKNOWLEDGE);//以事务模式获取会话
  35. dest = session.createTopic("FirstTopic1");//创建主题 与队列的区别
  36. producer = session.createProducer(dest);//创建消息生产者
  37. sendMessage(session, producer);//生产并发送消息
  38. session.commit();
  39. }
  40. catch (Exception e)
  41. {
  42. e.printStackTrace();
  43. }
  44. finally
  45. {
  46. if (conn != null)
  47. {
  48. try
  49. {
  50. conn.close();
  51. }
  52. catch (JMSException e)
  53. {
  54. e.printStackTrace();
  55. }
  56. }
  57. }
  58. }
  59.  
  60. /**
  61. * 发现哦那个消息
  62. * @param session
  63. * @param messageProducer
  64. * @throws JMSException
  65. */
  66. private static void sendMessage(Session session,MessageProducer messageProducer) throws JMSException
  67. {
  68. for(int i=1;i<=10;i++)
  69. {
  70. TextMessage text = session.createTextMessage("生产消息:"+i);//session用来生产消息
  71. messageProducer.send(text);//MessageProducer用来发送消息
  72. }
  73. }
  74.  
  75. }
  1. package com.activemq2;
  2.  
  3. import javax.jms.Connection;
  4. import javax.jms.ConnectionFactory;
  5. import javax.jms.Destination;
  6. import javax.jms.MessageConsumer;
  7. import javax.jms.Session;
  8.  
  9. import org.apache.activemq.ActiveMQConnection;
  10. import org.apache.activemq.ActiveMQConnectionFactory;
  11.  
  12. import com.activemq.Listener;
  13.  
  14. public class JMSConsumer1
  15. {
  16.  
  17. private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;//默认连接用户名
  18. private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;//默认连接密码
  19. private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL;//默认连接地址
  20.  
  21. public static void main(String[] args)
  22. {
  23. ConnectionFactory connfactory;//连接工厂
  24. Connection conn = null;//连接
  25. Session session;//接收或者发送消息的线程
  26. Destination dest;//消息的目的地
  27. MessageConsumer messageConsumer;//消息消费者
  28. //创建连接工厂
  29. connfactory = new ActiveMQConnectionFactory(JMSConsumer1.USERNAME,JMSConsumer1.PASSWORD,JMSConsumer1.BROKEURL);
  30.  
  31. try
  32. {
  33. conn = connfactory.createConnection();//获取连接
  34. conn.start();//启动连接
  35. session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);//以事务模式获取会话
  36. dest = session.createTopic("FirstTopic1");//创建消息主题
  37. messageConsumer = session.createConsumer(dest);
  38. //监听模式
  39. messageConsumer.setMessageListener(new Listener1());// 注册消息监听
  40. }
  41. catch (Exception e)
  42. {
  43. e.printStackTrace();
  44. }
  45. //后期不能关闭 要一直处于监听模式 需要conn一直开启
  46. }
  47. }
  1. package com.activemq2;
  2.  
  3. import javax.jms.JMSException;
  4. import javax.jms.Message;
  5. import javax.jms.MessageListener;
  6. import javax.jms.TextMessage;
  7.  
  8. public class Listener1 implements MessageListener {
  9.  
  10. @Override
  11. public void onMessage(Message message)
  12. {
  13. try {
  14. System.out.println("监听模式1接收:"+ ((TextMessage)message).getText());
  15. } catch (JMSException e) {
  16. e.printStackTrace();
  17. }
  18. }
  19.  
  20. }

注意:

1、点对点和发布订阅模式的主要区别就是

  1. dest = session.createQueue("FirstQueue1");//创建消息队列
  2. dest = session.createTopic("FirstTopic1");//创建消息主题

2、发布订阅模式必须先订阅 再发布才能接收到。

  1.  

参考

常见开源消息系统

消息系统之Apache ActiveMQ的更多相关文章

  1. 消息队列MQ - Apache ActiveMQ

    Apache ActiveMQ是Apache软件基金会所研发的开放源码消息中间件:由于ActiveMQ是一个纯Jave程式,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行. 1.que ...

  2. Kafka——分布式消息系统

    Kafka——分布式消息系统 架构 Apache Kafka是2010年12月份开源的项目,采用scala语言编写,使用了多种效率优化机制,整体架构比较新颖(push/pull),更适合异构集群. 设 ...

  3. Apache Kafka:下一代分布式消息系统

    [http://www.infoq.com/cn/articles/apache-kafka/]分布式发布-订阅消息系统. Kafka是一种快速.可扩展的.设计内在就是分布式的,分区的和可复制的提交日 ...

  4. 【转载】Apache Kafka:下一代分布式消息系统

    http://www.infoq.com/cn/articles/kafka-analysis-part-1 Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩 ...

  5. Apache ActiveMQ实战(1)-基本安装配置与消息类型

    ActiveMQ简介 ActiveMQ是一种开源的,实现了JMS1.1规范的,面向消息(MOM)的中间件,为应用程序提供高效的.可扩展的.稳定的和安全的企业级消息通信.ActiveMQ使用Apache ...

  6. 转 Apache Kafka:下一代分布式消息系统

    简介 Apache Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kafka是一种快速.可扩展的.设计内在就是分布式的,分区的和可复制的提交 ...

  7. [kfaka] Apache Kafka:下一代分布式消息系统

    简介 Apache Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kafka是一种快速.可扩展的.设计内在就是分布式的,分区的和可复制的提交 ...

  8. Apache Kafka:下一代分布式消息系统【转载】

    简介 Apache Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kafka是一种快速.可扩展的.设计内在就是分布式的,分区的和可复制的提交 ...

  9. 消息队列(三)Apache ActiveMQ

    在Ubuntu上安装ActiveMQ 系统初始化 $ sudo apt update $ sudo apt dist-upgrade $ sudo apt autoremove $ sudo apt ...

随机推荐

  1. SOA架构商城一

    SOA架构: SOA是Service-Oriented Architecture的首字母简称,它是一种支持面向服务的架构样式.从服务.基于服务开发和服务的结果来看,面向服务是一种思考方式.其实SOA架 ...

  2. React 组件协同关系

    组件协同的两种方法,1种是纵向的协同,就是组件嵌套,重点在于代码的封装,2种是横向协同也就是Mixin,组件抽离,重点在于代码复用 1.组件嵌套,父组件通过属性向子组件,子组件可以通过事件处理函数以委 ...

  3. yii---对数组进行分页

    很多时候,我们会对多个数据进行分页处理,例如我最近开发的一个功能,系统消息,系统消息的来源是多个表,而且多个表之间的数据没有任何关联,这个时候,需要对多个表进行查询,查询返回的数据进行分页,而且采用的 ...

  4. thinkphp----替换写标签的方法

    在用thinkphp写cmf的时候,考虑到一些方法的复用,所以考虑使用写标签. 写标签的好处在于:通用,而且比较容易看,但是封装一个标签,个人觉得还是比较麻烦,想了想 thinkcmf 调用文章的方式 ...

  5. Docker 学习应用篇三:使用docker搭建的环境,安装thinksns

    Thinksns 是一个开源的社交网站,因为目前的项目需要用到这个,所以就下载一个安装试试看. 之前在windows上用了wamp,安装的很顺利.但是项目是要部署到linux上的.于是我便用了Dock ...

  6. Python requests 301/302/303重定向(跨域/本域)cookie、Location问题

    今天使用request的get方法获取一个网站的登录页信息,结果使用charles抓包的时候发现该网站登录页303(重定向的问题),网上查了很多资料,原因如下: 一.cookie 原因:利用reque ...

  7. echarts 数据统计报表

    官网   http://echarts.baidu.com/index.html 我们下载好开发包后就可以开始了,第一步引入开发包,和需要的主题文件(可定义自己的主体文件),并定义好页面布局.2.0以 ...

  8. [python-opencv]超大图像二值化方法

    *分块 *全局阈值 VS 局部阈值 import cv2 as cv import numpy as np def big_image_binary(image): print(image.shape ...

  9. GitLab修改时区

    https://yq.aliyun.com/articles/275765 一.背景 今天有同事在GitLab上查看时间的时候,发现GitLab上显示的时间和提交的时间不一致. 本地时间现在为:201 ...

  10. mysql "order by" "distinct" "group by" "having"

    本文用到的表结构 create table stu( stu_id int auto_increment primary key, name ) not null, age smallint, cls ...