应用环境
- 阿里云服务器:近期双十一阿里云服务器很便宜所以我买了一个服务器来自己动手试试看(腾讯云之前没看到所以没考虑)
- linux :CentOS7 64
- linux :jdk8
- linux :activemq
- 本地 window jdk8
- 使用jconsole进行jmx连接
进行activemq配置参考链接
- 网络上有很多activemq的下载安装,自行百度。如果要进行jmx连接,直接启动bin目录下的activemq,不需要进去相关linux目录。
- 在/conf目录下修改activemq.xml 在broker标签中添加 userJmx=“true” (这个必须配置,官方文档也有)
- 在/conf目录下修改activemq.xml 的broker标签下面的 (改动了createConnector为true 还有connectorHost=“120.25.237.138” connectorPort=“11099”)(官方文档并不是这么做的,不过我成功了,现在没时间研究了以后有机会会深入理解的)
<managementContext> <managementContext createConnector="true" connectorHost="120.25.237.138" connectorPort="11099"/> </managementContext> - 一旦使用jmx监控则会需要用到conf目录下的jmx.access(记录账号的权限)以及jmx.password(记录账号密码).那么你需要把这两个文件通过一下命令设置成只读模式,这样启动activemq才不会报错(原本不使用两个文件所以就算你不设置也不会报错)
chmod -400 /"你的activemq安装目录“/conf/jmx.* - 修改bin目录下的activemq启动文件。需要在里面的invoke_start方法里面添加
以下代码(官方文档也有),当然网上乱七八糟的写法很多。ACTIVEMQ_HOME=/usr/local/activemq ACTIVEMQ_BASE=${ACTIVEMQ_HOME} ACTIVEMQ_SUNJMX_START="-Dcom.sun.management.jmxremote.port=11099 - Dcom.sun.management.jmxremote.ssl=false \-Dcom.sun.management.jmxremote.password.file=${ACTIVEMQ_BASE}/conf/jmx.password \-Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_BASE}/conf/jmx.access"
其实结果大同小异,都是启动jmx 和 设置密码验证文件,以及取消ssl。设置到了就可以了 - 由于阿里云貌似自己做了安全组管理,所以防火墙作用不大就默认关闭了。所以防火墙的设置都去安全组设置
在开启activemq之后,会开启很多相关的端口,其中有2个额外的随机端口,是jmx链接的关键,因为这两个额外的端口会影响jmx链接,需要在安全组里面打开这两个端口。当然,其他相关端口也需要打开的。下面是相关命令ps -ef | grep activemq | grep -v grep netstat -tunlp | grep “对应pid” - 最后一个很坑的问题:由于阿里云服务器有着2个ip,所以他的hostname默认为私网ip,可是我需要公网访问,所以他的启动绑定了私网ip导致无法远程链接。使用 hostname -i 命令可以查看。在/etc/hosts文件中修改hostname,之后启动,才能正常连接。
重点来了:网上很多人都说修改hosts文件,没说为什么,而且修改的地方其实也不起作用(或者是我理解错了)。
下面贴上我的hosts文件(当然不是7777啦 我自己瞎改改的 不给你看哈哈哈)
很多博客都说是把127.0.0.1修改成本机ip,可是笔者改了没作用,最后在这里找到了灵感网页链接,然后修改了下面的ip地址(从178.XXX.XXX.XXX到120.25.XXX.XXX)。改完可以进行jmx链接了。笔者也去百度了一下这几个ip的作用。最后总算是理解了。::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 120.25.XXX.XXX 77777777777777777777777 77777777777777777777
总结
- 笔者花了很多时间,2、3天把,在弄这件事,本以为不需要很多时间所以想一步到位,最后还是自己虚拟机搭载然后一步步排查问题,果然什么事情都急不来的,还是应该一步一步来。(搭了虚拟机进度可快多了)
- 由于这几天都在搞linux所以对linux的命令熟悉了不少吧。
番外
- 进行java代码获取jmx属性时。可以修改activemq.xml里面的borker端口的borkername,因为默认为localhost,我是读取本机ip然后读取的,所以出错了,由此记录。
tomcat
- 再/bin目录下的catalina.sh文件添加内容(在# ----- Execute The Requested Command -----------------------------------------前添加)
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true"
如果设置安全验证为true后,比如将jdk目录下的/jdk8/jre/lib/manamger/目录下面的jmxromate.access 和 jmxromate.password两个文件 (分别是权限和密码)设置为600 ,如果没有 jmxromate.password 就把 jmxromate.password。temlate变成 jmxromate.password
然后启动
版权声明:本文为l547319765原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。