前言
系统架构中一个很大的环节,是采用消息队列,进行消息的异步转发、消费。解耦系统,实现系统的高可用。
ActiveMQ介绍
Apache ActiveMQ是一个用Java编写的开源消息队列中间件,同时具有完整的Java Message Service(JMS)客户端。它提供“企业功能”,在这种情况下,这意味着促进来自多个客户端或服务器的通信。受支持的客户端包括通过JMS 1.1的Java以及其他几个“跨语言”客户端。使用虚拟机,缓存和日记持久性等功能,通过计算机群集等功能以及使用任何数据库作为JMS持久性提供程序的功能来管理通信。
ActiveMQ项目最初是由LogicBlaze的创始人于2004年创建的,它是由CodeHaus托管的开源消息队列中间件。该代码和ActiveMQ商标于2007年捐赠给Apache软件基金会,该基金会的创始人继续与扩展的Apache社区一起开发代码库。
ActiveMQ采用几种模式来实现高可用性,包括文件系统和数据库行级锁定机制,通过共享文件系统共享持久性存储或使用Apache ZooKeeper进行真正的复制。开箱即用地支持一种强大的水平扩展机制。在企业中,ActiveMQ因其配置的灵活性以及对相对大量传输协议(包括OpenWire,STOMP,MQTT,AMQP,REST和WebSockets)的支持而受到赞誉。
ActiveMQ用于企业服务总线实现中,例如Apache ServiceMix和Mule。使用ActiveMQ的其他项目包括SOA基础结构项目中的Apache Camel和Apache CXF。
安装
演示环境:Centos7、jdk8、activemq5.15.8 下载地址:https://activemq.apache.org/解压:tar -zxvf apache-activemq-5.15.8-bin.tar.gz -C /var
修改目录名称 mv /var/apache-activemq-5.15.8/ /var/activemq/
启动:./bin/activemq start
停止:./bin/activemq stop
创建一个systemd服务文件:vi /usr/lib/systemd/system/activemq.service
放入内容
[Unit] Description=ActiveMQ service After=network.target [Service] Type=forking ExecStart=/var/activemq/bin/activemq start ExecStop=/var/activemq/bin/activemq stop User=root Group=root Restart=always RestartSec=9 StandardOutput=syslog StandardError=syslog SyslogIdentifier=activemq [Install] WantedBy=multi-user.target
找到java命令所在的目录 whereis java
设置activemq配置文件/var/activemq/bin/env中的JAVA_HOME
xxxxxxxxxx
# Location of the java installation
# Specify the location of your java installation using JAVA_HOME, or specify the
# path to the "java" binary using JAVACMD
# (set JAVACMD to "auto" for automatic detection)
JAVA_HOME="/usr/local/java/jdk1.8.0_181"
JAVACMD="auto"
通过systemctl管理activemq启停
- 启动activemq服务:
systemctl start activemq
- 查看服务状态:
systemctl status activemq
- 创建软件链接:
ln -s /usr/lib/systemd/system/activemq.service /etc/systemd/system/multi-user.target.wants/activemq.service
- 开机自启:
systemctl enable activemq
- 检测是否开启成功(enable):
systemctl list-unit-files |grep activemq
防火墙配置,Web管理端口默认为8161,通讯端口默认为61616
- 添加并重启防火墙
firewall-cmd --zone=public --add-port=8161/tcp --permanent
firewall-cmd --zone=public --add-port=61616/tcp --permanent
systemctl restart firewalld.service
- 或者直接关闭防火墙:
systemctl stop firewalld.service