消息系统之Apache ActiveMQ
一、下载运行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、点对点模式
- package com.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 Administrator
- */
- 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;//默认连接地址
- public static void main(String[] args)
- {
- ConnectionFactory connfactory;//连接工厂
- Connection conn = null;//连接
- Session session;//接收或者发送消息的线程
- Destination dest;//消息的目的地
- MessageProducer producer;//消息的生产者
- //创建连接工厂
- connfactory = new ActiveMQConnectionFactory(JMSProducer.USERNAME,JMSProducer.PASSWORD,JMSProducer.BROKEURL);
- try
- {
- conn = connfactory.createConnection();//获取连接
- conn.start();//启动连接
- session = conn.createSession(true, Session.AUTO_ACKNOWLEDGE);//以事务模式获取会话
- dest = session.createQueue("FirstQueue1");//创建消息队列
- producer = session.createProducer(dest);//创建消息生产者
- sendMessage(session, producer);//生产并发送消息
- session.commit();
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- finally
- {
- if (conn != null)
- {
- try
- {
- conn.close();
- }
- catch (JMSException e)
- {
- e.printStackTrace();
- }
- }
- }
- }
- /**
- * 发现哦那个消息
- * @param session
- * @param messageProducer
- * @throws JMSException
- */
- private static void sendMessage(Session session,MessageProducer messageProducer) throws JMSException
- {
- for(int i=1;i<=10;i++)
- {
- TextMessage text = session.createTextMessage("生产消息:"+i);//session用来生产消息
- messageProducer.send(text);//MessageProducer用来发送消息
- }
- }
- }
- package com.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 Administrator
- *
- */
- 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 connfactory;//连接工厂
- Connection conn = null;//连接
- Session session;//接收或者发送消息的线程
- Destination dest;//消息的目的地
- MessageConsumer messageConsumer;//消息消费者
- //创建连接工厂
- connfactory = new ActiveMQConnectionFactory(JMSConsumer.USERNAME,JMSConsumer.PASSWORD,JMSConsumer.BROKEURL);
- try
- {
- conn = connfactory.createConnection();//获取连接
- conn.start();//启动连接
- session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);//以事务模式获取会话
- dest = session.createQueue("FirstQueue1");//创建消息队列
- messageConsumer = session.createConsumer(dest);
- //receive模式
- // while(true)
- // {
- // TextMessage text = (TextMessage)messageConsumer.receive(100000);
- // if (text != null)
- // {
- // System.out.println("receive模式接收:"+text.getText());
- // }
- // else
- // {
- // break;
- // }
- // }
- //监听模式
- messageConsumer.setMessageListener(new Listener());// 注册消息监听
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- //后期不能关闭 要一直处于监听模式 需要conn一直开启
- }
- }
- package com.activemq;
- import javax.jms.JMSException;
- import javax.jms.Message;
- import javax.jms.MessageListener;
- import javax.jms.TextMessage;
- public class Listener implements MessageListener
- {
- @Override
- public void onMessage(Message message)
- {
- try {
- System.out.println("监听模式接收:"+ ((TextMessage)message).getText());
- } catch (JMSException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
2、发布订阅模式
- package com.activemq2;
- 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;
- 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;//默认连接地址
- public static void main(String[] args)
- {
- ConnectionFactory connfactory;//连接工厂
- Connection conn = null;//连接
- Session session;//接收或者发送消息的线程
- Destination dest;//消息的目的地
- MessageProducer producer;//消息的生产者
- //创建连接工厂
- connfactory = new ActiveMQConnectionFactory(JMSProducer.USERNAME,JMSProducer.PASSWORD,JMSProducer.BROKEURL);
- try
- {
- conn = connfactory.createConnection();//获取连接
- conn.start();//启动连接
- session = conn.createSession(true, Session.AUTO_ACKNOWLEDGE);//以事务模式获取会话
- dest = session.createTopic("FirstTopic1");//创建主题 与队列的区别
- producer = session.createProducer(dest);//创建消息生产者
- sendMessage(session, producer);//生产并发送消息
- session.commit();
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- finally
- {
- if (conn != null)
- {
- try
- {
- conn.close();
- }
- catch (JMSException e)
- {
- e.printStackTrace();
- }
- }
- }
- }
- /**
- * 发现哦那个消息
- * @param session
- * @param messageProducer
- * @throws JMSException
- */
- private static void sendMessage(Session session,MessageProducer messageProducer) throws JMSException
- {
- for(int i=1;i<=10;i++)
- {
- TextMessage text = session.createTextMessage("生产消息:"+i);//session用来生产消息
- messageProducer.send(text);//MessageProducer用来发送消息
- }
- }
- }
- package com.activemq2;
- import javax.jms.Connection;
- import javax.jms.ConnectionFactory;
- import javax.jms.Destination;
- import javax.jms.MessageConsumer;
- import javax.jms.Session;
- import org.apache.activemq.ActiveMQConnection;
- import org.apache.activemq.ActiveMQConnectionFactory;
- import com.activemq.Listener;
- public class JMSConsumer1
- {
- 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 connfactory;//连接工厂
- Connection conn = null;//连接
- Session session;//接收或者发送消息的线程
- Destination dest;//消息的目的地
- MessageConsumer messageConsumer;//消息消费者
- //创建连接工厂
- connfactory = new ActiveMQConnectionFactory(JMSConsumer1.USERNAME,JMSConsumer1.PASSWORD,JMSConsumer1.BROKEURL);
- try
- {
- conn = connfactory.createConnection();//获取连接
- conn.start();//启动连接
- session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);//以事务模式获取会话
- dest = session.createTopic("FirstTopic1");//创建消息主题
- messageConsumer = session.createConsumer(dest);
- //监听模式
- messageConsumer.setMessageListener(new Listener1());// 注册消息监听
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- //后期不能关闭 要一直处于监听模式 需要conn一直开启
- }
- }
- package com.activemq2;
- import javax.jms.JMSException;
- import javax.jms.Message;
- import javax.jms.MessageListener;
- import javax.jms.TextMessage;
- public class Listener1 implements MessageListener {
- @Override
- public void onMessage(Message message)
- {
- try {
- System.out.println("监听模式1接收:"+ ((TextMessage)message).getText());
- } catch (JMSException e) {
- e.printStackTrace();
- }
- }
- }
注意:
1、点对点和发布订阅模式的主要区别就是
- dest = session.createQueue("FirstQueue1");//创建消息队列
- dest = session.createTopic("FirstTopic1");//创建消息主题
2、发布订阅模式必须先订阅 再发布才能接收到。
参考
消息系统之Apache ActiveMQ的更多相关文章
- 消息队列MQ - Apache ActiveMQ
Apache ActiveMQ是Apache软件基金会所研发的开放源码消息中间件:由于ActiveMQ是一个纯Jave程式,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行. 1.que ...
- Kafka——分布式消息系统
Kafka——分布式消息系统 架构 Apache Kafka是2010年12月份开源的项目,采用scala语言编写,使用了多种效率优化机制,整体架构比较新颖(push/pull),更适合异构集群. 设 ...
- Apache Kafka:下一代分布式消息系统
[http://www.infoq.com/cn/articles/apache-kafka/]分布式发布-订阅消息系统. Kafka是一种快速.可扩展的.设计内在就是分布式的,分区的和可复制的提交日 ...
- 【转载】Apache Kafka:下一代分布式消息系统
http://www.infoq.com/cn/articles/kafka-analysis-part-1 Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩 ...
- Apache ActiveMQ实战(1)-基本安装配置与消息类型
ActiveMQ简介 ActiveMQ是一种开源的,实现了JMS1.1规范的,面向消息(MOM)的中间件,为应用程序提供高效的.可扩展的.稳定的和安全的企业级消息通信.ActiveMQ使用Apache ...
- 转 Apache Kafka:下一代分布式消息系统
简介 Apache Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kafka是一种快速.可扩展的.设计内在就是分布式的,分区的和可复制的提交 ...
- [kfaka] Apache Kafka:下一代分布式消息系统
简介 Apache Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kafka是一种快速.可扩展的.设计内在就是分布式的,分区的和可复制的提交 ...
- Apache Kafka:下一代分布式消息系统【转载】
简介 Apache Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kafka是一种快速.可扩展的.设计内在就是分布式的,分区的和可复制的提交 ...
- 消息队列(三)Apache ActiveMQ
在Ubuntu上安装ActiveMQ 系统初始化 $ sudo apt update $ sudo apt dist-upgrade $ sudo apt autoremove $ sudo apt ...
随机推荐
- SOA架构商城一
SOA架构: SOA是Service-Oriented Architecture的首字母简称,它是一种支持面向服务的架构样式.从服务.基于服务开发和服务的结果来看,面向服务是一种思考方式.其实SOA架 ...
- React 组件协同关系
组件协同的两种方法,1种是纵向的协同,就是组件嵌套,重点在于代码的封装,2种是横向协同也就是Mixin,组件抽离,重点在于代码复用 1.组件嵌套,父组件通过属性向子组件,子组件可以通过事件处理函数以委 ...
- yii---对数组进行分页
很多时候,我们会对多个数据进行分页处理,例如我最近开发的一个功能,系统消息,系统消息的来源是多个表,而且多个表之间的数据没有任何关联,这个时候,需要对多个表进行查询,查询返回的数据进行分页,而且采用的 ...
- thinkphp----替换写标签的方法
在用thinkphp写cmf的时候,考虑到一些方法的复用,所以考虑使用写标签. 写标签的好处在于:通用,而且比较容易看,但是封装一个标签,个人觉得还是比较麻烦,想了想 thinkcmf 调用文章的方式 ...
- Docker 学习应用篇三:使用docker搭建的环境,安装thinksns
Thinksns 是一个开源的社交网站,因为目前的项目需要用到这个,所以就下载一个安装试试看. 之前在windows上用了wamp,安装的很顺利.但是项目是要部署到linux上的.于是我便用了Dock ...
- Python requests 301/302/303重定向(跨域/本域)cookie、Location问题
今天使用request的get方法获取一个网站的登录页信息,结果使用charles抓包的时候发现该网站登录页303(重定向的问题),网上查了很多资料,原因如下: 一.cookie 原因:利用reque ...
- echarts 数据统计报表
官网 http://echarts.baidu.com/index.html 我们下载好开发包后就可以开始了,第一步引入开发包,和需要的主题文件(可定义自己的主体文件),并定义好页面布局.2.0以 ...
- [python-opencv]超大图像二值化方法
*分块 *全局阈值 VS 局部阈值 import cv2 as cv import numpy as np def big_image_binary(image): print(image.shape ...
- GitLab修改时区
https://yq.aliyun.com/articles/275765 一.背景 今天有同事在GitLab上查看时间的时候,发现GitLab上显示的时间和提交的时间不一致. 本地时间现在为:201 ...
- mysql "order by" "distinct" "group by" "having"
本文用到的表结构 create table stu( stu_id int auto_increment primary key, name ) not null, age smallint, cls ...