RabbitMQ使用教程
1、基础性知识文档介绍
- 关系RabbitMQ的一些使用场景和使用背景,基础性的概念知识,请参考这篇文章 消息队列之 RabbitMQ 。
2、如何在MacOS 上安装RabbitMQ
-
关于安装,请参考这篇文章,亲测有效。在MacOS 上安装RabbitMQ
-
这里我使用的是macOS 10.13 版本,启动的时候需要找到RabbitMQ在本地的位置。
-
启动rabbitmq-server
cd /usr/local/Cellar/rabbitmq/3.7.2/sbin
sudo ./rabbitmq-server
打开浏览器并访问:http://localhost:15672/,并使用默认用户guest登录,密码也为guest。我们可以看到如下图的管理页面:
点击Admin标签,在这里可以进行用户的管理。
3、Springboot集成RabbitMQ
-
通过在Spring Boot应用中整合RabbitMQ,并实现一个简单的发送、接收消息的例子来对RabbitMQ有一个直观的感受和理解。
-
在Spring Boot中整合RabbitMQ是一件非常容易的事,因为之前我们已经介绍过Starter POMs,其中的AMQP模块就可以很好的支持RabbitMQ,下面我们就来详细说说整合过程:
-
在pom.xml中引入如下依赖内容,其中spring-boot-starter-amqp用于支持RabbitMQ。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
-
在application.properties中配置关于RabbitMQ的连接和用户信息,用户可以回到上面的安装内容,在管理页面中创建用户。
-
队列配置
- 发送者
- 接收者
- 测试类中
- 运行结果:
注意事项:
-
发送者和接收者的queue name必须一致,不然不能接收。
-
多个发送者和接收者,接收端仍然会均匀接收到消息。
-
springboot以及完美的支持对象的发送和接收,不需要格外的配置。
//发送者
public void send(User user) {
System.out.println("Sender object: " + user.toString());
this.rabbitTemplate.convertAndSend("object", user);
}
//接收者
@RabbitHandler
public void process(User user) {
System.out.println("Receiver object : " + user);
}
-
Topic Exchange
- topic 是RabbitMQ中最灵活的一种方式,可以根据routing_key自由的绑定不同的队列。 首先对topic规则配置,这里使用两个队列来测试
-
使用queueMessages同时匹配两个队列,queueMessage只匹配”topic.message”队列
-
发送send1会匹配到topic.#和topic.message 两个Receiver都可以收到消息,发送send2只有topic.#可以匹配所有只有Receiver2监听到消息
- 接收者
-
Fanout Exchange
- Fanout 就是我们熟悉的广播模式或者订阅模式,给Fanout交换机发送消息,绑定了这个交换机的所有队列都收到这个消息。
这里使用了A、B、C三个队列绑定到Fanout交换机上面,发送端的routing_key写任何字符都会被忽略:
- 发送者
- 接收者
- 结果如下:
结果说明,绑定到fanout交换机上面的队列都收到了消息
微信扫码关注java架构,获取Java面试题和架构师相关题目和视频。