消息系统之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 ...
随机推荐
- Redmine插件的安装与卸载,知识库插件安装。
本文介绍linux版本的Redmine插件安装,通常Redmine安装在Linux系统,/var/www/redmine/路径. 安装: 复制插件到 2.X版本 #{RAILS_ROOT}/plugi ...
- SOA架构商城一
SOA架构: SOA是Service-Oriented Architecture的首字母简称,它是一种支持面向服务的架构样式.从服务.基于服务开发和服务的结果来看,面向服务是一种思考方式.其实SOA架 ...
- Flask详解
Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...
- python----并发编程之IO模型
一:IO模型介绍 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个 ...
- Django实现微电影网站
主要实现功能: 注册,登陆,播放视频,评论视频,xadmin实现后台提供视频管理,权限管理等等 首页(搜索,筛选) 搜索页面 播放页面 个人中心 后台 源码下载 环境配置:python2.7 pip ...
- Python 字典 dict() 函数
描述 Python 字典 dict() 函数用于创建一个新的字典,用法与 Pyhon 字典 update() 方法相似. 语法 dict() 函数函数语法: dict(key/value) 参数说明: ...
- Photoshop制作倒影的两种方法
图片加了倒影,画面立刻变得生动起来.而用PS,制作倒影是如此的方便. 素材1 将素材1导入文档,ctrl+J复制图层,编辑-变换-垂直翻转将翻转的图层拖至下方 为翻转的图层添加图层蒙版,选中渐变工具, ...
- bootstrap弹出模态框
(1)引入jquery, bootstrap相关的 jquery下载地址: https://jquery.com/download/ bootstrap下载地址: https://v3.bootcss ...
- Best Cow Line---poj3617(贪心)
题目链接:http://poj.org/problem?id=3617 题意:有n头牛.刚开始有一个序列.现在想要重新排列.每次从原始的序列头部和尾部取出一个取出一个放到新的序列尾部.最后使得得到的新 ...
- 【python-opencv】19-Canny边缘检测
Canny 边缘提取的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是: 好的检测- 算法能够尽可能多地标识出图像中的实际边缘. 好的定位- 标识出的边缘要尽可能与实际图像中的实际边缘尽可能接近 ...