这篇博客不会长篇大论介绍消息中间件,以及JMS规范。
其实,一开始我又在纠结第一个消息中间件应该选择什么。后来一想,RocketMQ文档有点简陋,而且并未良好地遵守jms规范;RabbitMQ虽好,可惜不是用java编写的。
最终,我选择了 ActiveMQ作为自己学习的第一个消息中间件。
当然,以后应该还会使用其他的吧。
Linux下安装
官网下载链接
下载 Unix/Linux/Cygwin apache-activemq-5.16.1-bin.tar.gz (5.16、5.15版本有点差异)
- 解压。
tar -xzvf apache-activemq-5.16.1-bin.tar.gz
- 进入安装的目录
songyangji@SongyangJi-Ubuntu-DeskStop:/opt/apache-activemq-5.16.1$ ls
bin conf data docs examples lib LICENSE NOTICE README.txt tmp webapps webapps-demo
- 启动
先进入到/bin
目录,然后执行命令
sudo ./activemq start
songyangji@SongyangJi-Ubuntu-DeskStop:/opt/apache-activemq-5.16.1/bin$ sudo ./activemq start
INFO: Loading '/opt/apache-activemq-5.16.1//bin/env'
INFO: Using java '/usr/bin/java'
INFO: Starting - inspect logfiles specified in logging.properties and log4j.properties to get details
INFO: pidfile created : '/opt/apache-activemq-5.16.1//data/activemq.pid' (pid '5982')
songyangji@SongyangJi-Ubuntu-DeskStop:/opt/apache-activemq-5.16.1/bin$ lsof -i:61616
检查一下
5302 是进程号
songyangji@SongyangJi-Ubuntu-DeskStop:/opt/apache-activemq-5.16.1/bin$ ps -ef | grep activemq
root 5982 1010 4 20:45 pts/0 00:00:02 /usr/bin/java -Xms64M -Xmx1G -Djava.util.logging.config.file=logging.properties -Djava.security.auth.login.config=/opt/apache-activemq......
activemq服务器默认监听 61616端口。
songyangji@SongyangJi-Ubuntu-DeskStop:/opt/apache-activemq-5.16.1/bin$ sudo lsof -i:61616
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 5982 root 129u IPv6 62195 0t0 TCP *:61616 (LISTEN)
在Web端可以直接以管理员的身份去管理消息队列、主题、订阅等等。
访问http://localhost:8161/admin/
账号密码都是admin、admin。
关闭
./activemq stop
Mac下安装
homebrew安装就很方便。(当然生产环境不要做,不过生产环境当然不可能是MacOS)
- 安装
sudo brew install activemq
- 启动
sudo activemq start
- 关闭
sudo activemq stop
其余的区别不大。
两台机器通信
如果你想在另一台机器访问ActiveMQ的Web控制台,可能失败。
可能有两种,一是防火墙的问题,详细的可以看Ubuntu下防火墙相关这篇博客。
另一种原因是,在5.16版,默认配置是只允许Web端只能在本地访问。
如果需要在另一台机器上配置。
进入 conf
sudo vim jetty.xml
编辑成
<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start">
<!-- the default port number for the web console -->
<!-- 相当于允许任何地址访问 -->
<property name="host" value="0.0.0.0"/>
<property name="port" value="8161"/>
</bean>