消息系统之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 ...
随机推荐
- CentOS 6安装并开启telnet服务
一.安装telnet yum install telnet telnet-server //安装telnet server捎带手把客户端也装了 二.配置xinetd telnet server默认会安 ...
- python开发环境搭建(python2.7.5+pyCharm2.7.3)【原创】
1.下载python 官网下载最新版python http://www.wingide.com/downloads 2.下载PyCharm 官网可下载最新版pyCharm-professional h ...
- js原型浅谈理解
之前在学习原型(prototype)的时候,一直对原型的理解不是很清晰,只是知道每个对象都有一个原型,然后在js中万物又皆对象.在这里谈一下自己对于js原型的简单理解吧. 原型可以实现属性和方法的共享 ...
- HDU 1083 - Courses - [匈牙利算法模板题]
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1083 Time Limit: 20000/10000 MS (Java/Others) M ...
- UVA 11768 - Lattice Point or Not
首先本题需要用到扩展欧几里得算法…… 关于exgcd算法的一点简略证明: 那么,对于函数exgcd(a,b)=(d,x,y),其中d满足d=gcd(a,b); (x,y)满足ax+by=d; 则exg ...
- pandas2
1.Series创建的方法统一为pd.Series(data,index=)(1,2,3)Series可以通过三种形式创建:python的dict.numpy当中的ndarray(numpy中的基本数 ...
- 浅谈CSRF攻击方式(转)
add by zhj: 在看Django开发的应用时,看到了CSRF,然后搜到了这篇文章,讲的不错.其实CSRF 攻击也蛮简单的.当你登陆网站A后,会在本地存有cookie,在cookie没有过期的情 ...
- oracle(九)索引扫描
(1)索引唯一扫描(index unique scan) (2)索引范围扫描(index range scan) (3)索引全扫描(index full scan) (4)索引快速扫描(index f ...
- hibernate注解(二)mappedBy
1.双向关系中使用mappedBy避免生成中间表 (1).只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性: (2).mappe ...
- dedecms获取当前文章所在栏目URL
我们知道dedecms有一个面包屑导航的调用函数,{dede:field name='position'/},这个样式是固定的,有时要个性化一些的话需要修改很多地方,那么织梦cms有没其他方法获取当前 ...