消息队列开发记录笔记-ActiveMQ
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的更多相关文章
- 消息队列——RabbitMQ学习笔记
消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...
- 消息队列:快速上手ActiveMQ消息队列的JMS方式使用(两种模式:Topic和Queue的消息推送和订阅)
1.实现功能 希望使用一套API,实现两种模式下的消息发送和接收功能,方便业务程序调用 1.发送Topic 2.发送Queue 3.接收Topic 4.接收Queue 2.接口设计 根据功能设计公共调 ...
- [分布式学习]消息队列之rocketmq笔记
文档地址 RocketMQ架构 哔哩哔哩上的视频 mq有很多,近期买了<分布式消息中间件实践>这本书,学习关于mq的相关知识.mq大致有有4个功能: 异步处理.比如业务端需要给用户发送邮件 ...
- NSQ:分布式消息队列学习记录
参考资料: NSQ:分布式的实时消息平台 初识NSQ分布式实时消息架构 深入NSQ之旅 nsq topic和channel的区别
- 消息队列高手课 -笔记-Kafka高性能的几个关键点
总结下kafka 高性能的几个关键点是: 1:使用批量处理的方式 去提升系统的吞吐能力 2:基于磁盘文件高性能的顺序读写的特性来设计存储结构 3:利用操作系统的PageCache 来缓存数据 减少I ...
- java面试记录三:hashmap、hashtable、concurrentHashmap、ArrayList、linkedList、linkedHashmap、Object类的12个成员方法、消息队列MQ的种类
口述题 1.HashMap的原理?(数组+单向链表.put.get.size方法) 非线程安全:(1)hash冲突:多线程某一时刻同时操作hashmap并执行put操作时,可能会产两个key的hash ...
- lesson5:利用jmeter来压测消息队列(activemq)
本文讲述了利用jmeter来压测消息队列,其中消息队列采用apache的activemq,jmeter本身是支持符合jms标准消息队列的压测,由于jmeter的官方sampler配置比较复杂,本文直接 ...
- 【框架学习与探究之消息队列--EasyNetQ(1)】
前言 本文欢迎转载,实属原创,本文原始链接地址:http://www.cnblogs.com/DjlNet/p/7603554.html 废话 既然都是废话了,所以大家就可以跳过了,这里是博主有事没事 ...
- 深入剖析 RabbitMQ —— Spring 框架下实现 AMQP 高级消息队列协议
前言 消息队列在现今数据量超大,并发量超高的系统中是十分常用的.本文将会对现时最常用到的几款消息队列框架 ActiveMQ.RabbitMQ.Kafka 进行分析对比.详细介绍 RabbitMQ 在 ...
随机推荐
- 4、运行成功的Demo(PyCharm+Selenium)
1.打开PyCharm,新建一个python.file,输入代码“from selenium import webdriver”报错的解决方法 (1)PyCharm没有找到正确的python,在“Fi ...
- electron 安装失败解决办法
1.安装node https://nodejs.org/en/download/2.安装镜像工具npm install -g cnpm --registry=https://registry.npm. ...
- Oracle 内存结构
内存结构 Oracle内存,进程与数据库的图 sga:系统全局区,用来存放操作的数据,库缓存,数据字典等控制信息的内存区域, pga:进程全局区,服务进程专用的内存区域,大多数内容非共享 uga:用 ...
- vue实用难点讲解
此篇文章是我基于研究vue文档三遍的基础上,觉得还有点难理解或者难记的知识点总结 列表渲染 1.渲染组件必须加key,并且属性是手动传递给组件的 <my-component v-for=&quo ...
- PowerDesigner中添加约束
唯一约束 唯一约束与创建唯一索引基本上是一回事,因为在创建唯一约束的时候,系统会创建对应的一个唯一索引,通过唯一索引来实现约束.不过唯一约束更直观的表达了对应列的唯一性,使得对应索引的目的更加清晰,所 ...
- NT AUTHORITY\IUSR登录失败解决方法
NT AUTHORITY\IUSR登录失败解决方法 1 今天打开网站时,突然报这个错误,平时都好好的 Cannot open database "aslkm" requested ...
- spring读取classpath目录下的配置文件通过表达式去注入属性值.txt
spring读取配置文件: 1. spring加载配置文件: <context:property-placeholder location="classpath:config/syst ...
- Linux 压缩文件 和解压文件
.zip 解压:unzip FileName.zip 压缩:zip FileName.zip DirName .rar 解压:rar -x FileName.zip 压缩:rar -a FileNam ...
- iter创建一个可以被迭代的对象
#!/usr/bin/env python obj = iter([11,22,33,44]) #iter 创建一个可以被迭代的对象 print(obj) r1 = next(obj) print(r ...
- CSS框模型:一切皆为框 — 从行框说起
一 行框 看图说话 css 行框 各部分详解 上图代表了框模型中的行框.line-height 属性设置行间的距离(行高).该属性会影响行框的布局.在应用到一个块级元素时,它定义了该元素中基线之间的最 ...