RabbitMQ六种队列模式之简单队列模式

2021-03-09 15:16:38 浏览数 (1)

点击“蓝字”关注我们吧

前言

RabbitMQ官网提供了七种队列模型,分别是:简单队列、工作队列、发布订阅、路由模式、主题模式、RPC模式,因为RPC模式不是MQ,所以文章系列中不会介绍RPC模式了。

那么接下来的几篇文章一起来看看这几种队列模式,本篇文章为简单队列模式

简单队列模式

什么是简单队列模式

简单队列模式从字面上理解,乍看就是一种非常简单的队列模式,其实实际也是如此,该队列模式分为两种角色,一个是消息生产者,另外一个是消息消费者,最后还有一个队列,俗称点对点模式。

功能介绍

功能描述:一个生产者 "P" 发送消息到 "Q" 队列 由消费者 "C" 接受消息

P:生产者、红色:队列(可以缓存消息)、C:消费者

代码演示

本文是基于SpringBoot框架去集成的RabbitMQ,所以最好会SpringBoot基础,再跟着本文一起大家简单队列Demo

创建一个简单的maven项目

导入依赖

首先在我的父工程 pom.xml 导入maven依赖

代码语言:javascript复制
<parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>2.0.0.RELEASE</version></parent>
<dependencies>    <!-- 添加springboot对amqp的支持 -->    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-amqp</artifactId>    </dependency></dependencies>

生产者

生产者项目结构

pom文件

代码语言:javascript复制
<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-web</artifactId></dependency>

yml文件

代码语言:javascript复制
server:  port: 8081
spring:  rabbitmq:    ####连接地址    host: 192.168.137.5    ####端口号    port: 5672    ####账号    username: sunny    ####密码    password: sunny    ### 交换机    virtual-host: /sunny_vm

生产者配置类

代码语言:javascript复制
@Componentpublic class RabbitMqConfig {
    /**     * 队列名称     */    public static final String QUEUE_NAME = "sunny_simple_queue";        @Bean    public Queue simpleQueue() {        return new Queue(QUEUE_NAME);    }}

生产者发送消息

代码语言:javascript复制
@RestControllerpublic class ProducerController {
    @Autowired    private RabbitTemplate rabbitTemplate;
    @GetMapping("/send")    public void send(){        String message = "sunny发送爱心小礼包消息";
        rabbitTemplate.convertAndSend(QUEUE_NAME, message);
        System.out.println("生产者发送消息我:"   message   "成功");    }}

在简单队列模型中,发送消息的时候是不需要指定交换机的名称,它会将消息发送到"默认交换机"上,默认的Exchange不进行Binding操作,任何发送到该Exchange的消息都会被转发到"Queue名字和Routing key相同的队列"中,如果vhost中不存在和Routing key同名的队列,则该消息会被抛弃。

这里我们在发送消息的时候设置的Routing key为"sunny_simple_queue",那么就会将消息发送到队列名字为"sunny_simple_queue"的队列上去。

生产者测试发送消息

打开浏览器,访问指定网址

代码语言:javascript复制
http://localhost:8081/send

登陆Mangerment界面,可以看到队列中阻塞了一条消息未消费

消费者

消费者项目结构

yml文件

代码语言:javascript复制
spring:  rabbitmq:    ####连接地址    host: 192.168.137.5    ####端口号    port: 5672    ####账号    username: sunny    ####密码    password: sunny    ### 交换机    virtual-host: /sunny_vm
server:  port: 8080

消费类

代码语言:javascript复制
@Component@RabbitListener(queues = "sunny_work_queue")public class ConsumerTwoController {
    /**     * @RabbitListener 和 @RabbitHandler 搭配使用     * 可以标注在类上面,需配合 @RabbitHandler 注解一起使用     * 标注在类上面表示当有收到消息的时候,就交给 @RabbitHandler 的方法处理,     * 具体使用哪个方法处理,根据 MessageConverter 转换后的参数类型     **/    @RabbitHandler    public void accept(String message) {        System.out.println("消费者接受消息:"   message   "成功");    }
}

启动消费者项目,项目启动后会自动消费消息

队列中积压的消息被成功消费

到此SpringBoot整合RabbitMQ实现简单队列代码Demo就结束拉

总结

简单队列也称为点对点,即一个生产者对应一个消费者,生产者发送消息到队列,消费者在队列中取出消息消费。

我是黎明大大,我知道我没有惊世的才华,也没有超于凡人的能力,但毕竟我还有一个不屈服,敢于选择向命运冲锋的灵魂,和一个就是伤痕累累也要义无反顾走下去的心。

●Redis哨兵架构搭建以及详解

●Redis主从架构的搭建

●深入理解Redis的持久化机制

●Redis集群搭建及原理解剖

●我们所了解的Redis分布式锁真的就万无一失吗?

●手把手教你如何在CentOS7环境下安装部署Redis

●Spring5.0源码深度解析之Spring是如何利用三级缓存解决循环依赖的问题

0 人点赞