RabbitMQ-工作队列

news2024/11/17 23:51:01
接上文 RabbitMQ-死信队列

1 工作队列模式

xx模式只是一种设计思路,并不是指具体的某种实现,可理解为实现XX模式需要怎么去写业务代码。

之前的是简单的一个消费者一个生产者模式,下边是一个生产者多个消费者的情况:

在这里插入图片描述

这里先定义两个监听器

    @RabbitListener(queues = "yyds")
    public void receiver(String data){   //这里直接接收String类型的数据
        System.out.println("一号消息队列监听器 "+data);
    }

    @RabbitListener(queues = "yyds")
    public void receiver2(String data){
        System.out.println("二号消息队列监听器 "+data);
    }

在这里插入图片描述
把配置类的JSON转换和死信队列定义删掉
在这里插入图片描述
在rabbitmq网页管理端把死信队列和yyds队列都删除,死信交换机也删除
在这里插入图片描述
在这里插入图片描述
启动服务
在这里插入图片描述
出现队列
在这里插入图片描述
然后在amq.direct交换机发送消息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以发现默认是轮询方式发送的。

此时若将服务关闭,先在交换机发送几条信息,然后再启动服务,那么这几条信息会首先给一号监听器。

关闭服务
在这里插入图片描述
发送3条消息,
在这里插入图片描述
启动服务器
在这里插入图片描述

进入队列详情,可以看到每个消费者都有prefetch count =250。这代表若开启服务前预先有消息在队列,然后开启了监听,会将前250个预存的消息给一号,251-500给二号这样轮询。
这样的话若一开始存在消息,会被一个消费者一次性全部消耗,因为没有对prefetch count(预获取数量,一次性获取消息的最大数量)进行限制,若希望消费者一次只拿一个消息,而不是将所有消息全部获取,可进行配置。

在这里插入图片描述

在配置类定义一个自定义的ListenerContainerFactory,可以在这里设定消费者Channel的PrefetchCount的大小

@Resource
private CachingConnectionFactory connectionFactory;

@Bean(name = "listenerContainer")
public SimpleRabbitListenerContainerFactory listenerContainer(){
    SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory);
    factory.setPrefetchCount(1);   //将PrefetchCount设定为1表示一次只能取一个
    return factory;
}

在这里插入图片描述

监听器指定工厂

在这里插入图片描述

然后关闭服务,在第二个交换机amq.direct发送3条数据

在这里插入图片描述在这里插入图片描述

启动服务,出现轮询效果,二号连着两条还是因为没有添加休眠

在这里插入图片描述

此时队列详情的一次最大获取数量变为1

在这里插入图片描述
除了定义连个相同的监听方法,还可以在注解中定义,比如定义10个同样的消费者:

  @RabbitListener(queues = "yyds",  containerFactory = "listenerContainer", concurrency = "10")
    public void receiver(String data){
        System.out.println("一号消息队列监听器 "+data);
    }

在这里插入图片描述
重启服务,出现10个消费者
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1060009.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

想要精通算法和SQL的成长之路 - 最长连续序列

想要精通算法和SQL的成长之路 - 最长连续序列 前言一. 最长连续序列1.1 并查集数据结构创建1.2 find 查找1.3 union 合并操作1.4 最终代码 前言 想要精通算法和SQL的成长之路 - 系列导航 并查集的运用 一. 最长连续序列 原题链接 这个题目,如何使用并查集是一个小难…

带你10分钟学会红黑树

前言: 我们都知道二叉搜索树,是一种不错的用于搜索的数据结构,如果二叉搜索树越接近完全二叉树,那么它的效率就会也高,但是它也存在的致命的缺陷,在最坏的情况下,二叉搜索树会退化成为单链表&am…

Spring三大核心组件

Spring架构图 Spring三大核心组件分别为:Core、Beans和Context 1. Core(核心): 思想:Core组件的核心思想是控制反转(IoC)和依赖注入(DI)。它将对象的创建、组装和管理的…

【图像处理】使用各向异性滤波器和分割图像处理从MRI图像检测脑肿瘤(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

番外--Task2:

任务:root与普通用户的互切(区别),启动的多用户文本见面与图形界面的互切命令(区别)。 输入图示命令,重启后就由图形界面转成文本登录界面; 输入图示命令,重启后就由文本…

Netron【.pt转.torchscript模型展示】

Netron是一个模型的展示工具,它有网页版和app版: 网页版:Netron app版:GitHub - lutzroeder/netron: Visualizer for neural network, deep learning, and machine learning models 直接用网页版吧,还不用安装。 它可…

【kubernetes】CRI OCI

1 OCI OCI(Open Container Initiative):由Linux基金会主导,主要包含容器镜像规范和容器运行时规范: Image Specification(image-spec)Runtime Specification(runtime-spec)runC image-spec定义了镜像的格式,镜像的格式有以下几…

竞赛选题 机器视觉的试卷批改系统 - opencv python 视觉识别

文章目录 0 简介1 项目背景2 项目目的3 系统设计3.1 目标对象3.2 系统架构3.3 软件设计方案 4 图像预处理4.1 灰度二值化4.2 形态学处理4.3 算式提取4.4 倾斜校正4.5 字符分割 5 字符识别5.1 支持向量机原理5.2 基于SVM的字符识别5.3 SVM算法实现 6 算法测试7 系统实现8 最后 0…

【SpringBoot】配置文件详解

配置文件详解 一. 配置文件作用二. 配置文件的格式1. properties 配置文件说明①. properties 基本语法②. 读取配置⽂件③. properties 缺点 2. yml 配置⽂件说明①. yml 基本语法②. yml 使用进阶 3. properties VS yml 三. 设置不同环境的配置⽂件 一. 配置文件作用 整个项…

jsbridge实战1:xcode swift 构建iOS app

[[toc]] 环境安装 macOs: 10.15.5 xcode: 11.6 demo:app 创建 hello world iOS app 创建工程步骤 选择:Create a new Xcode project选择:iOS-> single View App填写: project name: swift-app-helloidentifer: smile 包名language: s…

基于Android的香格里拉美食分享APP/美食分享平台/基于android的美食平台

摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的APP应运而生,各行各业相继进入信息管理时代&#x…

Youtube视频下载工具分享-油管视频,音乐,字幕下载方法汇总

YouTube视频下载方法简介 互联网上存在很多 YouTube 下载工具,但我们经常会发现自己收藏的工具没过多久就会失效,我们为大家整理的这几种方法,是存在时间较久并且亲测可用的。后续如果这些工具失效或者有更好的工具,我们也会分享…

【多线程进阶】死锁问题

文章目录 前言1. 什么是死锁1.1 死锁的三种典型情况 2. 死锁产生的必要条件3.如何解决死锁问题总结 前言 上文锁策略中, 当谈到可重入锁和不可重入锁时, 我们引入了一个 “死锁” 的概念, 当针对一把不可重入锁进行连续两次的加锁行为时, 就会产生死锁. 本文就重点来讲解一下…

QT调用python程序出现问题Failed to get function

问题描述: 1.python中程序运行正常但在QTC的配置中使用Python.h调用python程序时出现Failed to get function问题,去掉python中某个包的应用就可以,比如: python部分程序: import os.path import pandas as pd如果在…

第十二届2023软件杯国家二等奖赛后感想总结

一,相关链接 软件杯官网:软件杯大赛官网 (cnsoftbei.com) 金蝶赛道:金蝶云苍穹开发者门户 (kingdee.com) 二,个人介绍 首先我是个双非院校的学生,专业为计算机科学与技术,打这个比赛是在大二下的暑假开始的…

【10】c++设计模式——>依赖倒转原则

关于依赖倒转原则,对应的是两条非常抽象的描述: 1.高层模块不应该依赖低层模块,两个都应该依赖抽象。 2.抽象不应该依赖细节,细节应该依赖抽象。 先用人话解释一下这两句话中的一些抽象概念: 1.高层模块:可…

【算法练习Day11】滑动窗口最大值前 K 个高频元素

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 滑动窗口最大值前 K 个高频…

stm32之HAL库操作PAJ75620

一、模块简介 手势模块PAJ7620主要利用IIC或SPI协议来实现数据的传输,本实验用的模块是以IIC来进行信息传输。支持电压从2.8v到3.6v, 正常可以选择3.3v。检测的距离从5到15cm, 可以检测9种手势,包括 右:编码为 0x01左:编码为 0x0…

FDM3D打印系列——黄金弗利萨

大家好,我是阿赵。   国庆期间,在家打印了一个黄金弗利萨的3D模型,和大家分享一下。模型在创想云上面下载的。 使用的设备依然是创想三维的Sermoon V1 Pro,使用的打印材料是创想三维的PLA高速打印素材。 不得不说,…

经典场的量子化

专栏目录: 高质量文章导航-持续更新中-CSDN博客 前置:复指数引起的思考 往指数函数e上丢一个复矢量出来的也是一个复矢量 其定义参考之前的文章群论-李代数_GZVIMMY的博客-CSDN博客 进一步了解下复矢量空间 首先了解下复球面(用一个球表示了所有的复数) 形如[x,y]的二维实…