入门概述
MQ 种类和对比
MQ 就是消息中间件。MQ 是一种理念,ActiveMQ 是 MQ 的落地产品。不管是哪款消息中间件,都有如下一些技术维度:
MQ 消息的详细比较
各类 MQ 的擅长领域
MQ 种类 | 变成语言 | 擅长领域 |
---|---|---|
kafka | scala | 大数据领域的主流 MQ。 |
rabbitmq | erlang | 基于 erlang 语言,不好修改底层,不好查找问题的原因,不建议选用 |
rocketmq | java | 适用于大型项目。适用于集群 |
activemq | java | 适用于中小型项目 |
是什么
面向消息的中间件(message-oriented middleware)MOM 能够很好的解决以上问题。是指利用高效可靠的消息传递机制与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型在分布式环境下提供应用解耦,弹性伸缩,冗余存储、流量削峰,异步通信,数据同步等功能。
大致的过程是这样的:发送者把消息发送给消息服务器,消息服务器将消息存放在若干队列/主题 topic 中,在合适的时候,消息服务器回将消息转发给接受者。在这个过程中,发送和接收是异步的,也就是发送无需等待,而且发送者和接受者的生命周期也没有必然的关系;尤其在发布 pub/订阅 sub 模式下,也可以完成一对多的通信,即让一个消息有多个接受者。
如何安装与查看控制台
Linux 系统直接安装
检查 JAVA 环境
由于 ActiveMQ 是 java 编写的,因此需要有 jdk 的运行环境,检查 Java 版本
java -version
官网下载安装包
凡遇技术,必定官网 ActiveMQ (apache.org)
注意:5.16.x 版本及以下支持 java8,5.17.x-5.18.x 需要 java11,6 版本则需要 java17
下图中左侧是稳定版,右侧是开发版。
按需要查找版本,此处贴一个 5.14.5 版本的链接 ActiveMQ --- ActiveMQ (apache.org),由于后续涉及集群的搭建,建议下载 Linux 的版本,毕竟没有见过 window 搭建集群的
上传安装包到 Linux 服务器
安装包放到/opt 目录下,放在哪个目录没有硬性要求
创建软件安装文件夹
软件安装文件夹,没有路径要求
# 创建软件安装的文件夹 -p 父目录不存在,则循环创建
mkdir -p /software/activeMQ/
解压缩安装包
tar -zxvf apache-activemq-5.14.5-bin.tar.gz
拷贝解压文件
拷贝解压的软件到指定的安装文件夹,直接解压过去也是可以的
cp -r apache-activemq-5.14.5 /software/activeMQ/
普通启动
# 首先要跳转到 %软件的安装目录%/bin 目录下
cd /software/activeMQ/apache-activemq-5.14.5/bin
# 执行启动命令
./activemq start
启动时指定日志输出文件(重要)
activemq 日志默认的位置是在:%activemq 安装目录%/data/activemq.log
# activemq start > %指定路径%
activemq start > /usr/local/raohao/activemq.log
Docker 安装
前情提要:Docker 需要已经安装,Docker 的使用参考 Docker小册
查询镜像
官方并没有为 ActiveMq 制作镜像,我们只能选择点赞数最多的一个下载使用。版本 5.14.3
docker search activemq
拉取镜像
docker pull webcenter/activemq
查看镜像
docker images webcenter/activemq
启动容器
也可以直接执行该指令,省去前面查询的步骤
- 61616 是 activemq 的容器使用端口(映射为 61617)
- 8161 是 web 页面管理端口(对外映射为 8161)
docker run --name='activemq5.14.3' \
-d \
-p 8161:8161 \
-p 61616:61616 \
-e ACTIVEMQ_ADMIN_LOGIN=admin \
-e ACTIVEMQ_ADMIN_PASSWORD=123456 \
-v /app/activemq/data:/data/activemq \
-v /app/activemq/log:/var/log/activemq \
webcenter/activemq:latest
检查服务是否启动
方式 1:检查进程
ps -ef | grep activemq
方式 2:检查端口是否被占用
ActiveMQ 默认端口是 61616
netstat -anp | grep 61616
方式 3:换种方式查看端口是否被占用
lsof -i:61616
启动异常排查
JDK 版本不满足当前 MQ 的需求
现象描述:linux 系统直接安装的方式下,项目迟迟启动不起来,activemq.log 中也没有任何异常的抛出
排查结果: activeMQ5.17.x 版本要求的 JDK 版本为 11,而本地当前的 java 版本为 java8,因此导致的启动失败,这也是前面截图中部分操作的指令使用的是 6.1.1 做演示的原因
权限不够导致的 Web 页面无法启动
现象描述:无法连接控制页面,但是服务确已经启动,
activemq console
爆出权限不够的异常
解决办法: 使用拥有足够权限的用户启动服务
外部访问不到
现象描述:
curl 127.0.0.1:8161
有返回的网页数据,但是在外部计算机中通过域名加端口,浏览器访问不到
查看是否是 linux 防火墙导致 linux系统中查看防火墙以及开放端口号命令_linux查看加入防火墙端口-CSDN博客
# 查看防火墙状态
systemctl status firewalld
# 开启防火墙
systemctl start firewalld
# 关闭防火墙
systemctl stop firewalld
访问控制台
访问地址:http://% 主机 IP%:8161,默认用户名密码均为 admin,