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. 1、在Eclipse中安装TestNG(离线方式)

    1.TestNG安装包:链接: https://pan.baidu.com/s/1UXZlJfrp8LM-6XmDLzVXKg 密码: 46y2 2.安装教程: (1).下载testNG 离线安装包[ ...

  2. docker 镜像自动升级脚本

    #!/bin/bash # Let's finish it like a flash ARGS=`getopt -o v:"$@"` echo $# if [ $# != 2 ]; ...

  3. 蘑菇街 IM 项目 TeamTalk

    源码 https://github.com/mogujie/TeamTalk 试用 http://tt.mogu.io/

  4. Linux内核 - 定时器

    #include <linux/timer.h> //头文件 struct timer_list mytimer; //定义变量 static void my_timer(unsigned ...

  5. (转)SC Create 创建一个Windows系统服务

    本文转载自:http://blog.sina.com.cn/s/blog_62b8fc330100l9px.html C:\Users\sophiaX>sc 描述: SC 是用于与服务控制管理器 ...

  6. navicat for mysql ,mysql版本是8.0的版本,连接数据库报错1251,解决办法。

    我的mysql版本是8.0的版本,因为毕竟新的mysql采用新的保密方式,所以就的似乎不能用,改密码方式: 用管理员身份打开cmd mysql -uroot -p(输入密码)            进 ...

  7. sql语句优化方案

    1. 为查询缓存优化你的查询 NOW() 和 RAND() 或是其它的诸如此类的SQL函数都不会开启查询缓存,因为这些函数的返回是会不定的易变的. 所以,你所需要的就是用一个变量来代替MySQL的函数 ...

  8. 1.《Spring学习笔记-MVC》系列文章,讲解返回json数据的文章共有3篇,分别为:

    转自:https://www.cnblogs.com/ssslinppp/p/4528892.html [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://w ...

  9. 没有dig命令的结觉方法

    -bash: dig: command not found rpm -qa bind-utils 查看没有没安装 bind-utils 包 yum install -y bind-utils 解决

  10. opencv相关

    http://opencv.org/ ================== 不错的博客: 图像处理(小魏的修行路):http://blog.csdn.net/xiaowei_cqu/article/c ...