Activemq的持久化部署与验证

简介:

Activemq是著名的消息队列产品,而持久化指的是在mq挂掉的时候,消息不会被抛弃,而是会被继续保存,等待进程复活。这个Activemq的持久化功能必须在5.9版本以上才会实现,而现在官方最新的mq版本是5.14.1,笔者的这个实验也是使用5.14.1版本,实验工具是金山云服务器,规格是2核4G无外网。


#wget http://www.apache.org/dyn/closer.cgi?filename=/activemq/5.14.1/apache-activemq-5.14.1-bin.tar.gz,然后解压缩到指定的文件夹里,我选择的就是根目录,#tar -zxvf  /activemq。


首先需要更改activemq文件夹里的conf/activemq.xml,重点改的是截图里的内容:

wKiom1gujjrBhAAYAACyOFWgvGs413.png


其中zkaddress写的是对应的zk机器的"内网地址:端口号",多台机器用逗号隔开,默认zk的端口是2181。同时我设定在zk会给mq生成一个叫lctimermq这样一个节点。


这里一定要注意!!!有些童鞋可能出于职业习惯或者思维贯式就把线上环境正在使用的配置文件拿来直接就用,以为线上的东西就是OK的,但是这一条在mq这里绝对不好使!因为mq这里的zk填写的是线上的zk,如果你这时候启动了mq,那么正式线上的消息队列就会转成这台实验机,后果也是灾难性的,这是一个大坑,一定要切记切记~~~~


插播结束,上面那一段里hostname里面对应填写本地的内网ip地址即可。


下面的80指的是“非持久化消息所占内存的百分比”,10GB是“持久化消息所占硬盘大小”,5GB是“临时消息所占硬盘大小”,以上几个值可以根据实际情况调整。


wKioL1guj-mS4nIqAAFhgh9wE6s106.png

这里是端口定义和用户验证的密码等等,61616是mq的工作监听端口,8161是web端的端口,一般来说mq与服务是一对一搭配的,一个mq已经开了61616给A服务,再开一个61615端口给B服务,这样做是有风险的,在生产环境里不推荐。


如果真的由于业务需要一台机器上运行多个ActiveMq,这里主要说一下有什么地方不重复:


1、brokerName名称不能重复

2、端口号不能重复uri = tcp://localhost:50509

3、kahadb路径不能重复

4、管理端口不能重复contextPort = 2019


言归正传,这个activemq.xml保存退出之后,打开同文件夹的credentials.properties,这里是设定mq密码的地方,mq是有两个密码的,一个消息传递用的,另外一个是给web界面用的,这里的密码是给消息传递用的。这里设定好了之后,要记住,同时在zk里也要有这样的一个节点。

wKiom1guk1ih4ifdAAAXzHyU7fw155.png

wKioL1guk6WC6A8rAAATohSTOiY932.png


uris的地方是写mq内网地址的地方,同时在密码下面我们规定了一个消息通道的名称,这个通道会在web 界面里体现出来。


改完了mq工作的密码,为了安全,我们还要改一下web界面的密码,mq默认的web界面账号密码都是admin,现在我们把账号还是设定为admin,密码更改一下,那么就需要打开conf/jetty-realm.properties,然后如图:

wKiom1gvM8XhtyyhAAAcoFLfUIA814.png

这里把密码改成了mq1118lc,保存退出,启动就会生效。


这还没有完,在5.9以上的版本,要需要更改一个环境变量,这个环境变量是在bin/env里,打开env文件,有ACTIVEMQ_OPTS_MEMORY的字段,本实验机是4G内存,所以我写成ACTIVEMQ_OPTS_MEMORY="-Xms64M -Xmx3G",这句话的意思是:分给activemq最小是64M、最大为3G的可用内存。保存退出。


这里也要注意一下,如果机器使用了3G效果不理想的话,是需要提升内存的,如果提升了物理内存,但是不更改这个env文件对于mq是无效的,所以再提升了物理内存之后别忘了更改env这个文件同时restart  activemq。


至于启动mq,就是在bin文件夹里,./activemq start即可,然后使用./activemq status查看进程情况。搭配好其他的进程服务项,启动mq完毕之后,在浏览器地址栏里输入"外网地址:8161/admin"来到web界面,输入我们刚刚设定的admin/mq1118lc之后就能看见mq的web界面了。选择第一行的queue,就会看到mq的信息总况:

wKiom1gvNuSw1wVnAAB91iQxlc0594.png


MQ有时候会进程存在,但是却不能正常工作,而来到mq的服务器上使用#netstat -ntpl|grep 61616的时候,发现其61616端口根本没有在监听,那么这种情况证明mq的启动其实是失败的,所以这个时候应该来到日志,查看一下日志的信息,从而对症下药。


第一种情况:

wKioL1i2KLWSdZyHAABNm-yEwyw398.png

这是一个ERROR信息,主要问题就是hostname里面带有中文,这里需要更改/etc/hosts文件,把中文去掉。


注意一下,java类型的软件,比如activemq,比如storm,比如zookeeper,他们在识别中文上是很不友好的,所以请避免起中文名!


第二种情况:

如果在启动mq出现如下错误:

3c0e32b19c050b618ba81ae0a7424895.png


那就是activemq的env文件里JAVA_HOME为空,这个时候我们需要先查看一下/etc/profile文件,看到java home的地址,如下:

d38788c65972aab7ea76a037e8e5085e.png


那么就把/usr/jdk1.7.0_79 添加到env文件的JAVA_HOME那一栏里,然后重启MQ即可。



强文推荐!http://blog.csdn.net/yinwenjie/article/details/50991443


 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1874225


相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
12月前
|
消息中间件 存储 Kubernetes
k8s1.20版本部署RabbitMQ集群(持久化)——2023.05
k8s1.20版本部署RabbitMQ集群(持久化)——2023.05
588 1
|
消息中间件 NoSQL Java
【RabbitMQ】RabbitMQ如何做到保证消息100%不丢失?
【RabbitMQ】RabbitMQ如何做到保证消息100%不丢失?
367 0
|
消息中间件 负载均衡 网络协议
ActiveMQ详细配置方案
本文总结ActiveMQ重要的一些配置,包括高可用failover配置、消息策略等。
932 0
|
消息中间件 数据库
如何保证 RabbitMQ 消费者端在更新数据库时可以成功
如何保证 RabbitMQ 消费者端在更新数据库时可以成功
185 0
|
10月前
|
消息中间件 存储 NoSQL
SpringBoot项目整合Redis,Rabbitmq发送、消费、存储邮件
SpringBoot项目整合Redis,Rabbitmq发送、消费、存储邮件
631 7
|
5月前
|
消息中间件 存储 Java
RabbitMQ中的消息持久化是如何实现的?
RabbitMQ中的消息持久化是如何实现的?
104 0
|
消息中间件 数据库
RabbitMQ保证消息的一致性解决方案RabbitMQ保证消息的一致性解决方案
RabbitMQ保证消息的一致性解决方案RabbitMQ保证消息的一致性解决方案
|
消息中间件 存储 Java
RabbitMQ消息持久化机制
RabbitMQ消息持久化机制
160 0
|
消息中间件 存储 NoSQL
springcloud:springboot整合RabbitMQ|RabbitMQ保证消息可靠性(三)
上一章我们讲解了rabbitmq的四种交换机类型、七种通讯方式。本章我们将整合springboot来向大家完整演示rabbitmq的使用,并说明如何保证消息的可靠性。
540 0
springcloud:springboot整合RabbitMQ|RabbitMQ保证消息可靠性(三)
|
存储 消息中间件 缓存
ActiveMQ系列:ActiveMQ的持久化机制
为了避免意外宕机以后丢失信息,需要做到重启后可以恢复消息队列,消息系统一般都会采用持久化机制。ActiveMQ的消息持久化机制有JDBC,AMQ,KahaDB和LevelDB,无论使用哪种持久化方式,消息的存储逻辑都是一致的 就是在发送者将消息发送出去后,消息中心首先将消息存储到本地数据文件、内存数据库或者远程数据库等再试图将消息发送给接收者,成功则将消息从存储中删除,失败则继续尝试发送。
258 0
ActiveMQ系列:ActiveMQ的持久化机制