RabbitMQ指南(3)-安装部署

本文介绍了RabbitMQ消息中间件在Windows和Unix系统下的安装步骤,包括Erlang环境的搭建、服务启动方式及基本配置管理等内容。

1、下载

官方RabbitMQ下载地址:http://www.rabbitmq.com/download.html,选择相应的系统版本,进行下载。

Erlang版本的选择尽量选择最新版本即可。

2、Windows下安装

如果你需要手动在Windows平台下安装,下面是安装方法:

2.1、下载Server

Windows下的安装包(zip):rabbitmq-server-windows-3.4.3.zip

2.2、安装Erlang

Erlang官方下载地址:Erlang下载,根据系统版本选择32位或64位进行下载,然后执行安装,安装完成后,Erlang将会出现在开始菜单中,并且执行程序\erlx.x.x\bin\erl.exe会存在于C:\Program Files (x86)或C:\Program Files中(当然是可以自定义选择的)。

2.3、设置ERLANG_HOME

如果已经安装了RabbitMQ,并将Broker作为一个服务,那么就需要单独使用Erlang的归档文件来安装一个Erlang VM,然后在设置ERLANG_HOME之前必须卸载服务。

设置ERLANG_HOME为Erlang的实际安装目录,如C:\Program Files\erlx.x.x全路径,RabbitMQ将会执行%ERLANG_HOME%\bin\erl.exe。

2.4、安装RabbitMQ Server

将下载的RabbitMQ文件解压至合适的目录即可,如:D:\Application\rabbitmq_server-3.4.3。

2.5、命令

可执行命令均在目录rabbitmq_server-3.4.3\sbin中:

  • rabbitmq-server.bat 作为应用程序启动Broker。
  • rabbitmq-service.bat 作为系统服务,并启动Broker。
  • rabbitmqctl.bat 管理运行时Broker。

注意:在Windows Vista之后的系统版本下,需要使用Administrator来启动。

如果为了方便运行这些命令,可将其加入到系统环境变量Path中,以方便直接调用,而不必每次都进入到sbin目录才能执行。

应用程序的数据存储:在Windows中,默认情况下,RabbitMQ将日志和Mnesia数据库存储在用户的数据目录,如C:\Documents and Settings\%USERNAME%\Application Data或C:\Users\%USERNAME%\AppData\Roaming(vista之后版本)。可以在docs中执行echo %APPDATA%查看数据目录位置。

2.6、启动

以应用方式启动RabbitMQ服务:

启动之前可以自定义配置,在此使用默认配置启动:

rabbitmq-server -detached

-detached选项表示以后台方式启动。

rabbitmq-server仅能够启动Broker。管理Broker需使用rabbitmqctl命令来执行。

以服务的方式来启动RabbitMQ服务:

使用rabbitmq-service.bat命令将RabbitMQ安装为一个服务,如果修改了环境变量,需要重新安装。执行以下命令可以将RabbitMQ安装为一个服务:

rabbitmq-service install

执行完成后,一个以RABBITMQ_SERVICENAME命名的服务将会出现在Windows的服务面板中(开始->运行 services.msc),即可以使用Windows服务面板中提供的功能来管理服务,也可以使用rabbitmq-service命令来管理,如要启动服务,可执行:

rabbitmq-service start

可以打开Windows的服务面板,确认服务是否启动起来。

rabbitmqctl stop停止Broker;rabbitmqctl status检查Broker的状态。

3、通用Unix下安装

3.1、下载安装包

Unix下的安装包(tar.gz):rabbitmq-server-generic-unix-3.4.3.tar.gz

Erlang源码包下载可以从Erlang官站,如:otp_src_17.4.tar.gz

3.2、从源码安装Erlang

详细安装过程可参见官方原文档:http://www.erlang.org/doc/installation_guide/INSTALL.html

安装依赖

# yum install unixODBC unixODBC* erlang-odbc wxWidgets wx* *curses* fop -y

# tar -xzvf otp_src_17.4.tar.gz

# cd otp_src_17.4/

# ./configure,默认情况下,会将Erlang/OTP安装在/usr/local/{bin,lib/erlang}目录中,可以使用参数–prefix来指定安装目录。

# make && make install

3.3、安装RabbitMQ

将下载的rabbitmq-server-generic-unix-3.4.3.tar.gz解压至合适的目录即可。如 /usr/local/rabbitmq。

# tar -xzvf rabbitmq-server-generic-unix-3.4.3.tar.gz
# mv rabbitmq_server-3.4.3/ /usr/local/rabbitmq

3.4、启动RabbitMQ

启动命令均在sbin目录下:

./rabbitmq-server -detached。-detached表示后台启动。注意,启动时,必须进入当前目录下以./方式启动。

RabbitMQ环境变量配置:$RABBITMQ_HOME/etc/rabbitmq/rabbitmq-env.conf。

RabbitMQ组件配置文件:$RABBITMQ_HOME/etc/rabbitmq/rabbitmq.config。

 

4、配置管理

4.1、文件位置设置

通用Unix的安装包,被设计为尽可能不需要修改配置。默认情况下,产生的日志及数据文件均保存在RabbitMQ的安装目录下。

如果需要整体修改日志、数据、插件等的保存目录,可以修改sbin/rabbitmq-defaults文件:

SYS_PREFIX=${RABBITMQ_HOME}

4.2、端口占用

  • 4369 (epmd), 25672 (Erlang distribution)
  • 5672, 5671 (AMQP 0-9-1 without and with TLS)
  • 15672 (if management plugin is enabled)
  • 61613, 61614 (if STOMP is enabled)
  • 1883, 8883 (if MQTT is enabled)

4.3、访问权限

RabbitMQ 服务 Broker 会自动创建一个用户名和密码均为 guest 的用户,默认情况下,此用户只能在本机(localhost)可连接,此用户也可以配置为可远程访问。

建议创建一个新的管理员账户,如 admin :

# rabbitmqctl add_user admin 123456

设置标签,rabbitmq支持一些有权限意义的标签,如 administrator,monitoring,policymaker,management。

# rabbitmqctl set_user_tags admin administrator

设置用户权限:

# rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

4.3、管理服务 Broker

查看运行状态:

# rabbitmqctl status

停止:

# rabbitmqctl stop
<think>我们正在使用RabbitMQ的延时插件`rabbitmq-delayed-message-exchange`,该插件允许我们使用一种新的交换机类型(x-delayed-message)来实现延时队列,从而避免使用死信队列+TTL带来的队头阻塞问题。 在Dubbo环境中安装该插件,实际上与Dubbo本身无关,因为Dubbo是一个RPC框架,而RabbitMQ是独立的消息中间件。因此,安装插件是在RabbitMQ服务端进行的。我们假设RabbitMQ是以Docker容器方式运行的(这是常见部署方式)。 ### 步骤1:下载插件 首先,我们需要下载插件。注意:插件的版本必须与RabbitMQ的版本兼容。可以从以下地址下载: https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases 例如,对于RabbitMQ 3.7.x,可以下载`rabbitmq_delayed_message_exchange-20171201-3.7.x.ez`。 ### 步骤2:将插件复制到容器中 假设RabbitMQ的容器名称为`rabbitmq`(通过`docker ps`查看实际名称),我们将插件文件复制到容器的插件目录中。 ```bash docker cp rabbitmq_delayed_message_exchange-20171201-3.7.x.ez rabbitmq:/plugins ``` ### 步骤3:在容器内启用插件 进入容器内部,启用插件: ```bash docker exec -it rabbitmq bash ``` 在容器内执行: ```bash rabbitmq-plugins enable rabbitmq_delayed_message_exchange ``` ### 步骤4:重启RabbitMQ容器 退出容器并重启: ```bash docker restart rabbitmq ``` ### 步骤5:验证插件 重新进入容器,查看插件列表: ```bash docker exec -it rabbitmq rabbitmq-plugins list ``` 应该能看到`rabbitmq_delayed_message_exchange`插件已启用。 ### 在Dubbo项目中使用延时交换机 安装插件后,我们就可以在Dubbo服务中(生产者或消费者端)通过RabbitTemplate发送延时消息了。注意:这里我们使用`x-delayed-message`类型的交换机。 #### 配置延时交换机(Java Config) ```java @Configuration public class DelayedRabbitConfig { public static final String DELAYED_EXCHANGE = "delayed.exchange"; public static final String DELAYED_QUEUE = "delayed.queue"; public static final String DELAYED_ROUTING_KEY = "delayed.routingkey"; // 声明延时交换机(自定义类型) @Bean public CustomExchange delayedExchange() { Map<String, Object> args = new HashMap<>(); args.put("x-delayed-type", "direct"); // 底层交换机的类型,可以是direct, topic, fanout等 return new CustomExchange(DELAYED_EXCHANGE, "x-delayed-message", true, false, args); } // 声明队列 @Bean public Queue delayedQueue() { return new Queue(DELAYED_QUEUE); } // 绑定 @Bean public Binding bindingDelayedQueue(Queue delayedQueue, CustomExchange delayedExchange) { return BindingBuilder.bind(delayedQueue) .to(delayedExchange) .with(DELAYED_ROUTING_KEY) .noargs(); } } ``` #### 发送延时消息 ```java rabbitTemplate.convertAndSend(DelayedRabbitConfig.DELAYED_EXCHANGE, DelayedRabbitConfig.DELAYED_ROUTING_KEY, message, msg -> { // 设置延时时间(毫秒) msg.getMessageProperties().setHeader("x-delay", 30 * 60 * 1000); // 30分钟 return msg; }); ``` ### 注意事项 1. **插件兼容性**:确保插件版本与RabbitMQ版本匹配,否则可能导致RabbitMQ无法启动。 2. **交换机类型**:创建交换机时,类型必须为`x-delayed-message`,并且通过参数指定底层交换机类型(如direct)。 3. **延时时间**:发送消息时,通过消息头`x-delay`设置延时时间(毫秒)。 4. **队列声明**:延时交换机的绑定队列无需特殊参数,与普通队列一致。 通过上述步骤,我们在Dubbo环境中集成了RabbitMQ的延时队列插件,可以实现更精确的延时消息发送[^3]。这种方案避免了传统死信队列的队头阻塞问题,每条消息都可以有自己的延时时间。 §§相关问题§§ 1. RabbitMQ延时队列插件与死信队列方案有什么区别? 2. 如何确保RabbitMQ插件安装后的高可用性? 3. 在分布式事务中如何可靠地发送延时消息? </think>### Dubbo 环境中安装 RabbitMQ 延时插件指南 #### 一、安装插件核心步骤 1. **下载插件** 根据 RabbitMQ 版本下载对应插件(需匹配主要版本号): ```bash # RabbitMQ 3.8.x 版本 wget https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/v3.8.17/rabbitmq_delayed_message_exchange-3.8.17.8f537ac.ez ``` 2. **复制插件到容器** 通过 `docker cp` 将插件复制到容器内: ```bash docker cp rabbitmq_delayed_message_exchange-3.8*.ez rabbitmq-container:/plugins ``` 3. **启用插件** 进入容器执行启用命令: ```bash docker exec -it rabbitmq-container bash rabbitmq-plugins enable rabbitmq_delayed_message_exchange ``` 4. **重启服务** ```bash docker restart rabbitmq-container ``` #### 二、Dubbo 项目集成配置 在 Dubbo 服务中配置延时交换机(XML 方式): ```xml <!-- 1. 声明延时交换机 --> <rabbit:exchange name="delayed.exchange" type="x-delayed-message"> <rabbit:exchange-arguments> <!-- 底层实际交换类型 --> <entry key="x-delayed-type" value="direct" /> </rabbit:exchange-arguments> </rabbit:exchange> <!-- 2. 绑定队列 --> <rabbit:queue name="dubbo.delay.queue" /> <rabbit:binding queue="dubbo.delay.queue" exchange="delayed.exchange" key="delay.key" /> ``` #### 三、Dubbo 服务发送延时消息 ```java @Service public class OrderServiceImpl implements OrderService { @Autowired private RabbitTemplate rabbitTemplate; public void createOrder(Order order) { // Dubbo 服务方法内发送延时消息 rabbitTemplate.convertAndSend("delayed.exchange", "delay.key", order, message -> { // 设置30分钟延迟(单位毫秒) message.getMessageProperties().setHeader("x-delay", 30 * 60 * 1000); return message; }); } } ``` #### 四、验证插件安装成功 ```bash # 查看已启用插件列表 docker exec rabbitmq-container rabbitmq-plugins list # 预期输出应包含 [E*] rabbitmq_delayed_message_exchange ``` #### 五、注意事项 1. **版本兼容性** - RabbitMQ 3.7.x 需使用插件版本 `3.7.*` - RabbitMQ 3.8.x 需使用 `3.8.*` - 版本不匹配会导致启动失败[^3] 2. **集群环境** 集群中所有节点需同步安装插件: ```bash # 将插件复制到所有节点 for node in node1 node2 node3; do docker cp plugin.ez ${node}:/plugins done ``` 3. **消息可靠性** Dubbo 服务需添加生产者确认机制确保消息投递: ```yaml spring: rabbitmq: publisher-confirm-type: correlated publisher-returns: true ``` #### 六、插件原理示意图 ```mermaid graph LR A[Dubbo服务] -->|发送延时消息| B[x-delayed-message交换机] B -->|消息暂存| C[RabbitMQ内部存储] C -->|到期后投递| D[目标队列] D -->|消费| E[Dubbo消费者服务] ``` > 此方案直接使用 RabbitMQ 官方插件,避免了传统 TTL+DLX 方案的队头阻塞问题,每条消息可独立设置延迟时间[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值