准备工作
RabbitMQ 介绍
参考文章:RabbitMQ 基本概念详解
安装 RabbitMQ
首先需要安装 RabbitMQ,这里使用 docker 进行安装,只需要一行命令:
docker run -d --hostname my-rabbit --restart always --name rabbit -P rabbitmq:3-management
解释
-P
表示随机映射到本机端口;
rabbitmq:3-management
指定用该镜像生成容器,不需要提前 pull 镜像。
--restart always
表示该容器常驻运行。
--name rabbit
表示该容器的名字为 rabbit。
查看容器
使用命令 :
docker ps
如下图
RabbitMQ 端口解释
RabbitMQ 共有 6 个端口,各个端口的区别如下图:
其中,15672 是 UI 界面的端口,由上图可知,它被映射到 32771;
5672 是通信端的端口,由上图可知,它被映射到 32773;
浏览器访问:http://146.56.200.244:32771
, 默认的用户名和密码都是 guest
,登录后如下图;
在 Spring Boot 中使用 RabbitMQ
所需依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
application。properties 配置
spring.rabbitmq.host=146.56.xxx.xxx
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.port=32773
RabbitMQ 常用的 Exchange Type 有如下四种:
-
fanout
-
direct
-
topic
-
headers
下面使用 direct 类型作为示例:
DirectReceiver(消费者)
@Component
public class DirectReceiver {
/**
* 定义一个消费者方法
* @param msg
*/
@RabbitListener(queues = "hello.fanqie")
public void handler1(String msg){
System.out.println("handler1>>>" + msg);
}
}
解释
这里定义了一个消费者方法 handler1
。
使用注解 @RabbitListener(queues = "hello.fanqie")
,声明该 queue 的 routing key 为 hello.fanqie
。
接收 Exchange 路由到的消息 msg ,并打印出来。
RabbitDirectConfig(配置类)
@Configuration
public class RabbitDirectConfig {
public final static String DIRECTNAME = "queue1";
@Bean
Queue queue(){
return new Queue(DIRECTNAME, true);
}
}
解释
当 Exchange Type 为 direct 时,配置文件十分简洁,只需要定义一个 Queue 即可。
这里定义的静态变量 queue1
指的是该 Queue 的名字,第二个参数为 true 表示开启持久化。
生产者
在单元测试类中定义一个生产者:
@SpringBootTest
class RabbitmqApplicationTests {
@Autowired
RabbitTemplate rabbitTemplate;
@Test
void contextLoads() {
// 发送消息给 Exchange
rabbitTemplate.convertAndSend("hello.fanqie", "hello fanqie hahaha!");
}
}
解释
RabbitTemplate 是在 Spring Boot 中整合 RabbitMQ 的关键模板。
该类提供了丰富的发送消息的方法,如 convertAndSend、回调监听消息接口 ConfirmCallback、返回值确认接口 ReturnCallback 等。
参考资源:RabbitTemplate 官方文档
rabbitTemplate.convertAndSend 方法,接受两个参数:
-
routing key ,这里是 hello.fanqie
-
object,这里指发送给 Exchange 的消息内容
测试
先运行生产者,再运行消费者,效果如下图:
参考资源
每天学习一点点,每天进步一点点。