目录
一、ActiveMQ 是什么?为何要学?
在当今分布式系统大行其道的技术浪潮中,消息中间件宛如幕后英雄,默默支撑着系统间高效、稳定的通信。ActiveMQ,作为其中一款备受瞩目的开源消息中间件,基于 Java 语言开发,实现了 Java 消息服务(JMS)规范,犹如一座桥梁,让不同应用程序或服务之间能够进行异步通信 。
ActiveMQ 之所以如此重要,是因为它解决了分布式系统中的诸多痛点。比如,在传统的系统架构里,服务之间的通信往往是同步的,一个服务调用另一个服务时,需要等待对方响应才能继续执行,这就像打电话,必须等对方接听并回应后才能进行下一步交流,效率较低。而 ActiveMQ 引入了异步通信模式,就好比发邮件,发送方无需等待接收方立即查看邮件,便可继续做其他事情,极大地提高了系统的响应速度和吞吐量。同时,它还能实现应用解耦,各个服务通过 ActiveMQ 来传递消息,彼此之间不需要了解对方的具体实现细节,修改其中一个服务的代码,不会对其他服务产生直接影响,就像不同部门通过公司内部的邮件系统沟通工作,部门内部的调整不影响其他部门的运作 。
与其他消息中间件相比,ActiveMQ 有着独特的优势。像 RabbitMQ 基于 Erlang 语言开发,虽然性能出色、可靠性高,但学习曲线较陡,对于 Java 开发者来说,语言门槛是个挑战;Kafka 则更侧重于大数据领域的实时流处理,在消息的可靠性和事务性方面相对较弱 。而 ActiveMQ 对 Java 开发者十分友好,它完全支持 JMS 规范,这意味着 Java 开发者可以利用熟悉的 JMS API 来操作 ActiveMQ,上手难度低。并且,ActiveMQ 功能丰富,支持多种消息协议,如 OpenWire、STOMP、AMQP 等,能适应不同的应用场景,就像一把多功能工具,在各种开发场景中都能发挥作用。
对于 Java 开发者而言,学习 ActiveMQ 是提升技术能力的关键一步。掌握 ActiveMQ,不仅能深入理解异步通信、解耦等分布式系统核心概念,还能在实际项目中优化系统架构,提升系统性能。无论是开发大型企业级应用,还是构建分布式微服务架构,ActiveMQ 都能成为强大的助力 。
二、环境搭建,开启学习第一步
在深入学习 ActiveMQ 的使用之前,我们得先把环境搭建好,就像盖房子要先打好地基一样。下面,我就一步步带着大家完成 ActiveMQ 的安装与启动。
(一)下载 ActiveMQ
首先,我们要去 ActiveMQ 的官网下载安装包。官网地址是:http://activemq.apache.org/components/classic/download/ 。进入官网后,你会看到各种版本的下载链接 。在下载时,要根据自己的操作系统来选择合适的安装包。如果你使用的是 Windows 系统,就下载.zip 格式的文件;要是用 Linux 系统,那就下载.tar.gz 格式的文件 。比如,我这里使用的是 Windows 10 系统,就下载了 apache-activemq-5.17.1-bin.zip 这个文件。
(二)安装与启动
下载完成后,接下来就是安装和启动 ActiveMQ 了。以 Windows 系统为例,我们把下载好的压缩包解压到自己喜欢的目录,比如我解压到了 D 盘的根目录下,解压后得到一个名为 apache-activemq-5.17.1 的文件夹 。
解压完成后,进入 apache-activemq-5.17.1 文件夹,找到 bin 目录。在 bin 目录下,有两个子目录:win32 和 win64,这是分别对应 32 位和 64 位系统的启动脚本目录。根据你的系统位数,进入相应的目录。我是 64 位系统,就进入 win64 目录 。在这个目录里,找到 activemq.bat 文件,双击它来启动 ActiveMQ。
在启动过程中,可能会遇到一些问题,最常见的就是端口冲突。ActiveMQ 默认使用 61616 端口进行通信,8161 端口作为管理界面的访问端口 。如果这两个端口被其他程序占用了,ActiveMQ 就无法启动。比如,当你启动 ActiveMQ 时,看到类似 “java.net.BindException: Address already in use: JVM_Bind” 这样的错误信息,就说明端口被占用了 。这时候,我们有两种解决办法。一种是找到占用端口的程序,把它关闭。可以使用命令 “netstat -ano | findstr 端口号” 来查看是哪个程序占用了端口,然后通过任务管理器找到对应的进程并结束它 。比如,我要查看 61616 端口被哪个程序占用,就在命令提示符中输入 “netstat -ano | findstr 61616”,然后根据显示的结果找到对应的进程 ID,再到任务管理器中结束该进程 。另一种办法是修改 ActiveMQ 的端口配置。找到 ActiveMQ 安装目录下的 conf 目录,打开 activemq.xml 文件 。在这个文件中,找到类似下面这样的配置:
<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
把其中的 “tcp://0.0.0.0:61616” 改成你想要的端口号,比如 “tcp://0.0.0.0:61617”,只要这个端口没有被其他程序占用就行 。同样地,如果你要修改管理界面的端口,就在 activemq.xml 文件中找到下面这段配置:
<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start">
<property name="host" value="0.0.0.0"/>
<property name="port" value="8161"/>
</bean>
把 “” 中的 8161 改成你想要的端口号 。修改完成后,保存文件,再重新启动 ActiveMQ 就可以了 。
(三)检查安装是否成功
当我们成功启动 ActiveMQ 后,怎么知道它是否安装成功呢?很简单,打开浏览器,在地址栏中输入 “http://localhost:8161/ad