一、下载运行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的更多相关文章

  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. 【CF917D】Stranger Trees 树形DP+Prufer序列

    [CF917D]Stranger Trees 题意:给你一棵n个点的树,对于k=1...n,问你有多少有标号的n个点的树,与给出的树有恰好k条边相同? $n\le 100$ 题解:我们先考虑容斥,求出 ...

  2. django之admin设置

    Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理数据.后台管理可以在各个app的admin.py文件中进行控制.以下是我最近摸索总结出比较实用的配置.若你有什么比较好的配置 ...

  3. hdu3038 How many answers are wrong【并查集】

    TT and FF are ... friends. Uh... very very good friends -________-b  FF is a bad boy, he is always w ...

  4. Taking a peek inside with the Actuator

    Taking a peek inside with the Actuator <dependency> <groupId>org.springframework.boot< ...

  5. JS security

    下文本文将结合代码向读者展示常见这些 JavaScript 安全漏洞,以便读者在实际编码过程中注意到这些安全问题,及早规避这些风险. 基于 DOM 的跨站点脚本编制 我们都听说过 XSS(Cross ...

  6. python中url解析 or url的base64编码

    目录 from urllib.parse import urlparse, quote, unquote, urlencode1.解析url的组成成分:urlparse(url)2.url的base6 ...

  7. sql批量修改wordpress网站的文章发布状态

    wordpress批量导入文章的时候,有些文章的状态可能会缺失,例如“mis scheduled”.draft.future等几种状态,如何用sql批量修改wordpress网站的文章发布状态呢? 点 ...

  8. 万恶之源 - Python基础知识补充

    编码转换 编码回顾: 1. ASCII : 最早的编码. ⾥⾯有英⽂⼤写字⺟, ⼩写字⺟, 数字, ⼀些特殊字符. 没有中⽂, 8个01代码, 8个bit, 1个byte 2. GBK: 中⽂国标码, ...

  9. PAT 1028 List Sorting[排序][一般]

    1028 List Sorting (25)(25 分) Excel can sort records according to any column. Now you are supposed to ...

  10. angular.element 动态添加和删除元素

    addClass()-为每个匹配的元素添加指定的样式类名after()-在匹配元素集合中的每个元素后面插入参数所指定的内容,作为其兄弟节点append()-在每个匹配元素里面的末尾处插入参数内容att ...