Docker 运行 RabbitMQ
镜像由daocloud官网拉取,运行指令:
1 | docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672 -p 5672:5672 daocloud.io/rabbitmq:3-management |
指定了两个端口号的映射,一个是应用访问时的5672,一个是服务端的15672。
运行成功后访问 localhost:15672,使用默认的 guest 账号进入(账号:guest,密码:guest)
RabbitMQ概念
RabbitMQ是采用 Erlang 语言实现的 AMQP 协议的消息中间件,应用于当生产者大量生产数据,而消费者无法快速消费时,RabbitMQ可以作为一个中间层,保存这些消息。首先需要知道3个概念
生产者:发送消息的程序
交换机,队列:即RabbitMQ的部分。交换机用于接收来自生产者的消息并转发,不会存储数据,如果没有绑定到队列的话,会直接丢弃消息。交换机与队列的绑定由路由健完成,交换机会根据路由键(routing_key)
决定消息发到哪个队列。
消费者:接收消息的程序
Springboot 与 RabbitMQ 整合
添加依赖
springboot 提供了对多种消息队列的支持,引入spring-boot-starter-amqp 包即可。
1 | <dependency> |
引入的依赖里有对 RabbitMQ 的默认配置,因此如果使用默认配置,就不需要在配置文件中添加内容啦。
添加配置类
这里主要是配置交换机和队列,使用Topic的方式,根据routing_key按规则匹配队列。
1 | /** |
listenerAdapter 向 container中注册了一个消息监听,会监听来自于 “spring-boot” 队列的消息。根据源码可以看到 ,MessageListenerAdapter 的构造方法,传入的是一个消费者对象,以及消费者对象中的接收消息的方法名。
添加生产者
1 | /** |
rabbitTemplate也可以发送object的类型,方便自定义消息内容,具体可以参考源码。
添加消费者
1 | /** |
推送消息
1 |
|
可以看到控制台打印的内容,消费者成功消费了消息。
打开mq的服务端页面,能看到被消费的记录