docker 安装 RabbitMQ
1. 获取镜像
指定版本,该版本包含了web控制页面
bash
docker pull rabbitmq:management
2. 运行镜像
方式一:默认guest 用户,密码也是 guest
bash
docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq:management
方式二:设置用户名和密码
bash
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标志说明安装成功。
下载延迟插件
查看镜像的信息以获取版本号
bash
docker inspect rabbitmq:management
根据版本号下载延迟插件,前往 Community Plugins
笔者的RabbitMQ 版本是3.13.0,所以这里选择下载3.13.0版本的插件
将插件文件上传到服务器,笔者是直接上传到/root下了
安装延迟插件并启用
将刚刚上传的插件拷贝到容器内plugins目录下
bash
docker cp /root/rabbitmq_delayed_message_exchange-3.13.0.ez rabbit:/plugins
我刚刚是将插件上传到/root下了; rabbit是容器的name,也可以使用容器id
进入到RabbitMQ容器内部
bash
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容器
bash
docker restart rabbit
容器启动成功之后,登录RabbitMQ的管理界面(IP:15672 访问web界面),找到ExchangesTab页。点击Add a new exchange,在Type里面查看是否有x-delayed-message选项,如果存在就代表插件安装成功。
测试程序(核心部分)
监听端
java
@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 + "]");
}
消息发送端
java
@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("消息发送成功!");
}