一、下载运行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. Unity3D如何有效地组织代码?(转)

    问题: Unity3D可以说是高度的Component-Based Architecture,同时它的库提供了大量的全局变量.如何来组织代码呢? 答: - Unity有一些自身的约定,譬如项目里的Ed ...

  2. Windows Server 2008 R2之一活动目录服务部署

    测试环境: 服务器:计算机名Win2008R2CNDC,已安装Windows Server 2008 R2.IPV4:192.168.1.13,255.255.255.0,网关地址192.168.1. ...

  3. pandas生成时间列表(某段连续时间或者固定间隔时间段)

    python生成一个日期列表 首先导入pandas import pandas as pd def get_date_list(begin_date,end_date): date_list = [x ...

  4. 9.20 session

    2018-9-20 13:14:40 Cookie session 参考 :http://www.cnblogs.com/liwenzhou/p/8343243.html 类视图  cbv 注册 ur ...

  5. php代码不支持多维数组,注释和没有缓存功能。

    php代码:simplet.class.php<?phpclass SimpleT {private $t_vars;private $templates_dir;private $templa ...

  6. PAT甲1038 Recover the smallest number

    1038 Recover the Smallest Number (30 分) Given a collection of number segments, you are supposed to r ...

  7. java 中静态变量(类变量)与实例变量 静态方法与实例方法

    静态变量: 在类内部中,方法的外部声明的对象而且加上static; 实例变量: 在类内部中,声明不需要加static; 比如: public class Demo{ int i1=0; static ...

  8. 最长回文 HDU - 3068 manacher 模板题

    题意:找串的最长回文字串(连续) 题解:manacher版题 一些理解:首位加上任意两个字符是为了判断边界. 本算法主要是为了 1.省去奇偶分类讨论. 2.防止形如aaaaaaa的串使得暴力算法蜕化为 ...

  9. python3学习笔记(4)_function-参数

    #python学习笔记 17/07/10 # !/usr/bin/evn python3 # -*- coding:utf-8 -*- import math #函数 函数的 定义 #定义一个求绝对值 ...

  10. Minimalist GNU for Windows

    MinGW | Minimalist GNU for Windows http://www.mingw.org/ MinGW, a contraction of "Minimalist GN ...