共计 2599 个字符,预计需要花费 7 分钟才能阅读完成。
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,重点改的是截图里的内容:
其中 zkaddress 写的是对应的 zk 机器的 ” 内网地址: 端口号 ”,多台机器用逗号隔开,默认 zk 的端口是 2181。同时我设定在 zk 会给 mq 生成一个叫 lctimermq 这样一个节点。
这里一定要注意!!! 有些童鞋可能出于职业习惯或者思维贯式就把线上环境正在使用的配置文件拿来直接就用,以为线上的东西就是 OK 的,但是这一条在 mq 这里绝对不好使!因为 mq 这里的 zk 填写的是线上的 zk,如果你这时候启动了 mq,那么正式线上的消息队列就会转成这台实验机,后果也是灾难性的,这是一个大坑,一定要切记切记~~~~
插播结束,上面那一段里 hostname 里面对应填写本地的内网 ip 地址即可。
下面的 80 指的是“非持久化消息所占内存的百分比”,10GB 是“持久化消息所占硬盘大小”,5GB 是“临时消息所占硬盘大小”,以上几个值可以根据实际情况调整。
这里是端口定义和用户验证的密码等等,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 里也要有这样的一个节点。
uris 的地方是写 mq 内网地址的地方,同时在密码下面我们规定了一个消息通道的名称,这个通道会在 web 界面里体现出来。
改完了 mq 工作的密码,为了安全,我们还要改一下 web 界面的密码,mq 默认的 web 界面账号密码都是 admin,现在我们把账号还是设定为 admin,密码更改一下,那么就需要打开 conf/jetty-realm.properties,然后如图:
这里把密码改成了 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 的信息总况:
MQ 有时候会进程存在,但是却不能正常工作,而来到 mq 的服务器上使用 #netstat -ntpl|grep 61616 的时候,发现其 61616 端口根本没有在监听,那么这种情况证明 mq 的启动其实是失败的,所以这个时候应该来到日志,查看一下日志的信息,从而对症下药。
第一种情况:
这是一个 ERROR 信息,主要问题就是 hostname 里面带有中文,这里需要更改 /etc/hosts 文件,把中文去掉。
注意一下,Java 类型的软件,比如 activemq,比如 storm,比如 zookeeper,他们在识别中文上是很不友好的,所以请避免起中文名!
推荐阅读:
Spring+Log4j+ActiveMQ 实现远程记录日志——实战 + 分析 http://www.linuxidc.com/Linux/2015-12/126163.htm
Spring 下 ActiveMQ 实战 http://www.linuxidc.com/Linux/2015-11/124854.htm
Java 消息队列 –ActiveMQ 实战 http://www.linuxidc.com/Linux/2016-12/138848.htm
CentOS 6.5 启动 ActiveMQ 报错解决 http://www.linuxidc.com/Linux/2015-08/120898.htm
ActiveMQ 部署步骤和后台管理网站 Service Unavailable 问题解决 http://www.linuxidc.com/Linux/2016-11/137050.htm
Linux 环境下面 ActiveMQ 端口号设置和 WEB 端口号设置 http://www.linuxidc.com/Linux/2012-01/51100.htm
ActiveMQ 的详细介绍 :请点这里
ActiveMQ 的下载地址 :请点这里
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-03/141814.htm