docker 安装 RabbitMQ & 安装 rabbitmq

docker 安装 RabbitMQ

1. 获取镜像

指定版本,该版本包含了web控制页面

docker pull rabbitmq:management

2. 运行镜像

方式一:默认guest 用户,密码也是 guest

docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq:management

方式二:设置用户名和密码

docker run -d --hostname my-rabbit --name rabbit -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAULT_PASS=password -p 15672:15672 -p 5672:5672 rabbitmq:management

3. 访问URL页面

使用浏览器访问 http://localhost:15672/,显示RabbitMQ标志说明安装成功。

下载延迟插件

查看镜像的信息以获取版本号

docker inspect rabbitmq:management

根据版本号下载延迟插件,前往 Community Plugins

笔者的RabbitMQ 版本是3.13.0,所以这里选择下载3.13.0版本的插件

将插件文件上传到服务器,笔者是直接上传到/root下了

安装延迟插件并启用

将刚刚上传的插件拷贝到容器内plugins目录下

docker cp /root/rabbitmq_delayed_message_exchange-3.13.0.ez rabbit:/plugins

我刚刚是将插件上传到/root下了; rabbit是容器的name,也可以使用容器id

进入到RabbitMQ容器内部

docker exec -it rabbit /bin/bash

查看插件是否存在

root@my-rabbit:/# cd plugins
root@my-rabbit:/plugins# ls | grep delay

启用插件(注意是在plugins内)

root@my-rabbit:/plugins# rabbitmq-plugins enable rabbitmq_delayed_message_exchange

从容器中退出

root@my-rabbit:/plugins# exit

重启RabbitMQ容器

docker restart rabbit

容器启动成功之后,登录RabbitMQ的管理界面(IP:15672 访问web界面),找到ExchangesTab页。点击Add a new exchange,在Type里面查看是否有x-delayed-message选项,如果存在就代表插件安装成功。

测试程序(核心部分)

监听端

@RabbitListener(bindings = @QueueBinding(
        value = @Queue(value = "delay.queue", durable = "true"),
        exchange = @Exchange(value = "delay.direct", delayed = "true"),
        key = "hi"
))
public void listenDelayQueue(String msg) { log.info("消费者接收到delay.queue的消息:[" + msg + "]");
}

消息发送端

@Test
public void testSendDelayMessage() { rabbitTemplate.convertAndSend("delay.direct", "hi", "hello", new MessagePostProcessor() { @Override
         public Message postProcessMessage(Message message) throws AmqpException { message.getMessageProperties().setDelay(10000);
             return message;
         }
     });
     log.info("消息发送成功!");
 }

参考链接:Docker安装RabbitMQ并安装延迟插件