前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RabbitMQ六种队列模式之简单队列模式

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

作者头像
黎明大大
发布2021-03-09 15:16:38
5860
发布2021-03-09 15:16:38
举报
文章被收录于专栏:java相关资料java相关资料

点击“蓝字”关注我们吧

前言

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是如何利用三级缓存解决循环依赖的问题

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 黎明大大 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 总结
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档