一、下载运行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. [SQL] SQL 日常检查脚本

    --sqlserver 日常检查脚本 print '----------------------------' print ' 0.sqlserver all information ' print ...

  2. Thinkphp---自定义服务类!

    考虑到有些功能是复用的,可以将一些复用的功能放到一个服务里面公用! 例如:公共模块新建一个服务类: 示例: <?php namespace Common\Service; // use Thin ...

  3. Laravel 中的异常处理

    这篇文章里,我们将研究 Laravel 框架中最重要也最少被讨论的功能 -- 异常处理. Laravel 自带了一个异常处理类,它能够让你以简单.优雅的方式 report 和 render 异常. 文 ...

  4. SVN Hook造成SVN提交速度慢的问题

    单就个人感情来说,我其实喜欢git.但显然subversion才是更普遍的版本控制管理工具,适合用在团队开发中. 那么,有一个很常见的需求就是把工程师提交的代码,更新到htdocs目录,这时候需要用s ...

  5. ubuntu16.04下笔记本电脑扩展双屏安装过程

    想给笔记本电脑外界一个显示屏,因为科研需要,我的笔记本是windows10加Ubuntu16.04双系统,主要使用Ubuntu系统. 首先是硬件 一个外置显示屏是必须的了,然后我的笔电上只有HDMI接 ...

  6. CodeForces - 583D Once Again... LIS 循环

    题意:给你n个数(n<=100,ai<=300)  一个T,求n重复T次的最长非递减子序列. 题解:我直接考虑4 3 2 1 的例子,当其重复4次时会出现1 2 3 4 的子序列 ,此时再 ...

  7. CodeForces - 55C Pie or die 想法题(猜程序)

    http://codeforces.com/problemset/problem/55/C 题意:一个博弈. 题解:瞎猜,目前不清楚原理 #include<iostream> #inclu ...

  8. cordova-ios 升级到4.4.0 无法真机跑iOS8 报错: dyld`dyld_fatal_error: -> 0x120085088 <+0>: brk #0x3

    项目进入测试阶段,马上要上线了,同事拿了自己的iOS8系统5s跑真机,无缘无故报错,之前跑她的手机完全没有问题的.Xcode 8.x中最低部署版本是iOS8.0,按理说完全能够跑真机的. 但是报了一个 ...

  9. GUID Partition Table (GPT)

    https://en.wikipedia.org/wiki/GUID_Partition_Table https://zh.wikipedia.org/wiki/全局唯一标识分区表 GUID Part ...

  10. OKEX API

    本文介绍OKEX API Rest 开始使用 REST,即Representational State Transfer的缩写,是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方 ...