1.下载ActiveMQ

去官方网站下载:http://activemq.apache.org/

2.运行ActiveMQ

解压缩apache-activemq-5.5.1-bin.zip,然后双击apache-activemq-5.5.1\bin\activemq.bat运行ActiveMQ程序。

3.代码: 

  需要参数:消息队列IP、端口默认61616,用户名,密码,queue。写在配置文件中。

  消费消息代码,项目启动开启一条线程,线程执行以下代码。一直监听消息队列,有数据就消费。

  //连接消息队列
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616"); //消息队列的地址
Connection connection = null;
Session session = null;
try {
//根据用户名和密码创建连接消息队列服务器的连接
connection = factory.createConnection("1014", "1014");
connection.start();
//创建客户端确认的会话
session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
//确定目标队列
Destination dest = new ActiveMQQueue("skyform.queue.1014");
MessageConsumer consumer = session.createConsumer(dest);
//接受处理消息
while(true){
Message msg = consumer.receive();
if (msg instanceof TextMessage) {
String body = null;
try {
body = ((TextMessage) msg).getText();
//TODO:接受到消息以后的业务处理,业务需求,接收消息后,放到自己的队列里调用下面的sender.供别人消费。
msg.acknowledge();//事物处理
} catch (JMSException e) {
e.printStackTrace();
}
}else{
Throw new RuntimeException(“非法的消息”);
}
}
} catch (JMSException e) {
e.printStackTrace();
} finally {
if (session != null) {
Try{session.close();}catch(Exception e){e. printStackTrace()}
}
if (connection != null) {
Try{ connection.close();}catch(Exception e){e. printStackTrace()}
}
}

发送代码:把消息放到自己的消息队列,供别人消费

 

   // ConnectionFactory :连接工厂,JMS 用它创建连接
ConnectionFactory connectionFactory;
// Connection :JMS 客户端到JMS Provider 的连接
Connection connection = null;
// Session: 一个发送或接收消息的线程
Session session;
// Destination :消息的目的地;消息发送给谁.
Destination destination;
// MessageProducer:消息发送者
MessageProducer producer;
// TextMessage message;
// 构造ConnectionFactory实例对象,此处采用ActiveMq的实现jar try { connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); // 构造从工厂得到连接对象
connection = connectionFactory.createConnection("1072","1072");
// 启动
connection.start();
// 获取操作连接
session = connection.createSession(Boolean.TRUE,
Session.CLIENT_ACKNOWLEDGE);
// 获取session注意参数值xingbo.xu-queue是一个服务器的queue,须在在ActiveMq的console配置
destination = session.createQueue("skyform.queue.1072");
// 得到消息生成者【发送者】
producer = session.createProducer(destination);
// 构造消息,此处写死,项目就是参数,或者方法获取
sendMessage(session, producer); session.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != connection)
connection.close();
} catch (Throwable ignore) {
}
}
}

4.队列情况查看

发送队列通过 http://localhost:8161/admin 可监听队列情况以及发送测试数据,如下图:

5.常见异常

开发中常见的2个异常以及解决方法:

javax.jms.IllegalStateException: The Session is closed

网络异常时客户端会报出这个错误

javax.jms.JMSException: Channel was inactive for too long

服务器消息较长时间没有消息发送时,客户端会报这个错误

可以把连接mq的url修改成下面的样子

failover:(tcp://127.0.0.1:61616?wireFormat.maxInactivityDuration=10000)&maxReconnectDelay=10000

failover 失效备援

maxInactivityDuration 允许最大静止(消息服务器无消息)时间

maxReconnectDelay 最大重连间隔

解决方法参考:http://hi.baidu.com/hontlong/blog/item/d475a916ffc8e65df3de32c8.html

 

6.安全配置

1、控制台安全配置,打开conf/jetty.xml文件,找到

<bean id="securityConstraint" class="org.eclipse.jetty.http.security.Constraint">

<property name="name" value="BASIC" />

<property name="roles" value="admin" />

<property name="authenticate" value="false" />

</bean>

将“false”改为“true”即可。用户名和密码存放在conf/jetty-realm.properties文件中。

  

2.连接和消费队列的用户名密码配置

apache-activemq-5.5.1-bin\apache-activemq-5.5.1\conf

credentials.properties文件配置用户名、密码

activemq.username=1091
activemq.password=aL^PbQInrzUUY^m9

activemq.xml文件配置:

<simpleAuthenticationPlugin>

<users>

<authenticationUser username="${activemq.username}" password="${activemq.password}" groups="users,admins"/>

</users>

</simpleAuthenticationPlugin>

安全配置参考网站:http://www.cnblogs.com/CopyPaster/archive/2012/04/27/2473179.html

7.ActiveMQ通过JAAS实现的安全机制

参考博客《转载-ActiveMQ通过JAAS实现的安全机制》

消息队列开发记录笔记-ActiveMQ的更多相关文章

  1. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  2. 消息队列:快速上手ActiveMQ消息队列的JMS方式使用(两种模式:Topic和Queue的消息推送和订阅)

    1.实现功能 希望使用一套API,实现两种模式下的消息发送和接收功能,方便业务程序调用 1.发送Topic 2.发送Queue 3.接收Topic 4.接收Queue 2.接口设计 根据功能设计公共调 ...

  3. [分布式学习]消息队列之rocketmq笔记

    文档地址 RocketMQ架构 哔哩哔哩上的视频 mq有很多,近期买了<分布式消息中间件实践>这本书,学习关于mq的相关知识.mq大致有有4个功能: 异步处理.比如业务端需要给用户发送邮件 ...

  4. NSQ:分布式消息队列学习记录

    参考资料: NSQ:分布式的实时消息平台 初识NSQ分布式实时消息架构 深入NSQ之旅 nsq topic和channel的区别

  5. 消息队列高手课 -笔记-Kafka高性能的几个关键点

    总结下kafka 高性能的几个关键点是: 1:使用批量处理的方式 去提升系统的吞吐能力 2:基于磁盘文件高性能的顺序读写的特性来设计存储结构 3:利用操作系统的PageCache 来缓存数据  减少I ...

  6. java面试记录三:hashmap、hashtable、concurrentHashmap、ArrayList、linkedList、linkedHashmap、Object类的12个成员方法、消息队列MQ的种类

    口述题 1.HashMap的原理?(数组+单向链表.put.get.size方法) 非线程安全:(1)hash冲突:多线程某一时刻同时操作hashmap并执行put操作时,可能会产两个key的hash ...

  7. lesson5:利用jmeter来压测消息队列(activemq)

    本文讲述了利用jmeter来压测消息队列,其中消息队列采用apache的activemq,jmeter本身是支持符合jms标准消息队列的压测,由于jmeter的官方sampler配置比较复杂,本文直接 ...

  8. 【框架学习与探究之消息队列--EasyNetQ(1)】

    前言 本文欢迎转载,实属原创,本文原始链接地址:http://www.cnblogs.com/DjlNet/p/7603554.html 废话 既然都是废话了,所以大家就可以跳过了,这里是博主有事没事 ...

  9. 深入剖析 RabbitMQ —— Spring 框架下实现 AMQP 高级消息队列协议

    前言 消息队列在现今数据量超大,并发量超高的系统中是十分常用的.本文将会对现时最常用到的几款消息队列框架 ActiveMQ.RabbitMQ.Kafka 进行分析对比.详细介绍 RabbitMQ 在 ...

随机推荐

  1. 洛谷【P1140】相似基因

    浅谈\(DP\):https://www.cnblogs.com/AKMer/p/10437525.html 题目传送门:https://www.luogu.org/problemnew/show/P ...

  2. rabbitmq -- networking

    RabbitMQ大名鼎鼎, 其networking 部分经常被众多Erlang 程序员, 爱好者分析. 小的时候就见到很多人写过这方面的blog, 比如: 1, http://www.blogjava ...

  3. 配置进程外Session

    配置进程外Session: (1)将服务器Session信息存储在进程外           <1> 首先,开启asp.net state 服务: 控制面板 -> 程序和功能 -&g ...

  4. vijos1906:联合权值

    描述 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 WiWi, 每条边的长度均为 1.图上两点(u, v)的距离定义为 u 点到 v 点的最短距离. ...

  5. 第十课 go语言函数

    1 内置函数 len() 函数可以接受不同类型参数并返回该类型的长度. 如果我们传入的是字符串则返回字符串的长度, 如果传入的是数组,则返回数组中包含的元素个数. 2  自定义函数 // 函数返回单个 ...

  6. S2-045漏洞利用工具&解决方案

    简单的重复造一个轮子,漏洞危害蛮大的 影响版本:Struts 2.3.5 - Struts 2.3.31,Struts 2.5 - Struts 2.5.10 仅供学习测试使用,严禁非法操作! 下载链 ...

  7. 2016.7.10 SqlServer语句中类似decode、substr、instr、replace、length等函数的用法

    Decode() 对应 case when函数 case CHARINDEX('/',start_point_name) when 0 then start_point_name else subst ...

  8. 初识python notes

    python数据类型 数字 字符串 列表 元祖 字典 1.为什么要编程 编程的目的是解放人力,这就需要人通过编写程序的方式计算机代替人去自动干活 2.什么是编程语言 编程语言就是人与计算机之间沟通的介 ...

  9. fontconfig

    vlc-android 默认是 禁用 fontconfig 的 如果想要使用的话需要手动修改 compile.sh

  10. DAY9-python并发之多进程

    一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程.P ...