springboot整合rabbitmq入门(三)

news2025/1/10 23:31:31

在上一篇文章中介绍了rabbitmq的fanout模式。今天继续学习另一种模式——direct模式。这种模式是rabbitmq的最简单一种模式。

首先创建一个名为helloDirect1的对列

@Configuration
public class DirectRabbitConfig {

    @Bean
    public Queue directA(){
        return  new Queue("helloDirect1");
    }
}

创建发送端

@Component
public class DirectSend {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void send(String context){
        System.out.println("Sender:" + context);
        // 这里需要指定发送的消息队列
        this.rabbitTemplate.convertAndSend("helloDirect1",context);
    }
}

接受端

@Component
@RabbitListener(queues = "helloDirect1")
public class DirectReceiveA {

    @RabbitHandler
    public void receive(String context){
        System.out.println("direct.A"+context);
    }
}

在这里,我有点不是特别清楚的地方,就是rabbitmq中说的是direct模式不需要exchange,只需要绑定routingKey即可,即

this.rabbitTemplate.convertAndSend("helloDirect1",context);中第一个参数为routingKey,但是我在写代码过程发现其实这块应该写的是你想发送到哪个对列,就写这个对列名称。不知道这样理解对不对,如果有不对的地方请指出。

控制台打印:

说明我们接受成功。

在写代码过程中突然想到,@RabbitListener注解是不是可以同时监听到多个对列呢?

在创建一个为ceshi的对列

@Bean
    public Queue directB(){
        return  new Queue("ceshi");
    }

同时监听多个对列

@Component
@RabbitListener(queues = {"helloDirect1","ceshi"})
public class DirectReceiveA {

    @RabbitHandler
    public void receive(String context){
        System.out.println("direct.A"+context);
    }
}

发送端

@Component
public class DirectSend {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void send(String context){
        System.out.println("Sender:" + context);
        // 这里需要指定发送的消息队列
        this.rabbitTemplate.convertAndSend("ceshi",context);
        this.rabbitTemplate.convertAndSend("helloDirect1",context);
    }
}

控制台打印

成功

当生产者和消费者是一对多时,会是什么样的效果呢?

在创建一个消费端同时监听helloDirect1对列

@Component
@RabbitListener(queues = "helloDirect1")
public class DirectReceiveB {

    @RabbitHandler
    public void receive(String context){
        System.out.println("direct.B"+context);
    }
}

改一下测试类,循环发送10遍,看效果

@Test
	public void DirectSend(){
		for (int i=0;i<10;i++){
			directSend.send("测试"+i);
		}
	}

但是如果一个消费者消费快,另一个慢的话回怎么样呢?

我们对消费者B休眠2秒,看效果


@Component
@RabbitListener(queues = "helloDirect1")
public class DirectReceiveB {

    @RabbitHandler
    public void receive(String context){
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("direct.B"+context);
    }
}

会发现A消费者消费结束了,但B消费者还没有完成。这就造成了A消费者空闲下来了,资源浪费。

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

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

相关文章

【翻译】NCLS: Neural Cross-Lingual Summarization

Abstract 跨语言摘要&#xff08;CLS&#xff09;是为不同语言的源文件生成特定语言摘要的任务。现有方法通常将此任务分为两个步骤&#xff1a;摘要和翻译&#xff0c;导致错误传播的问题。为了解决这个问题&#xff0c;我们首次提出了一种端到端的CLS框架&#xff0c;我们称…

淘宝商品销量数据接口,淘宝商品销量数据API接口

淘宝商品销量数据接口是淘宝开放平台提供的一种API接口&#xff0c;通过该接口&#xff0c;商家可以获取到淘宝平台上某一商品的销量数据&#xff0c;包括商品的总销量、近期销量、销售趋势等。 该接口的使用方法是&#xff0c;商家先注册淘宝开放平台账号&#xff0c;申请App…

体会jdk17对于空指针的增强

jdk17 // 可以清楚的看出来a.b.c.num中由于c是空指针&#xff0c;所以导致异常 jdk11 // 只报第6行空指针了&#xff0c;但是因为哪个变量&#xff0c;不知道

打exit_hook,如何找exit_hook的偏移

最近在打比赛的时候&#xff0c;一眼就知道咋做了&#xff0c;打exit_hook为one_gadget 但是泄露出libc之后&#xff0c;没法找到exit_hook的偏移&#xff0c;所以没能拿到一血。搜了好多&#xff0c; 总结大概就是exit_hook不是真实存在的&#xff0c;而是函数指针&#xff0c…

ansible - Role

1、简介&#xff1a; Ansible 中的角色&#xff08;Role&#xff09;是一种组织和封装Playbook的方法&#xff0c;用于管理和组织 Ansible代码。它可以将任务和配置逻辑模块化&#xff0c;以便在不同的Playbook中共享和重用。 2、通过 role 远程部署并配置 nginx (1) 准备目…

【FISCO-BCOS】十七、角色的权限控制

目录 一、角色定义 二、账户权限控制 1.委员新增、撤销与查询 2.委员权重修改 3.委员投票生效阈值修改 4. 运维新增、撤销与查询 一、角色定义 分为治理方、运维方、监管方和业务方。考虑到权责分离&#xff0c;治理方、运维方和开发方权责分离&#xff0c;角色互斥。 治理…

pytorch_神经网络构建2(数学原理)

文章目录 深层神经网络多分类深层网络反向传播算法优化算法动量算法Adam 算法 深层神经网络 分类基础理论: 交叉熵是信息论中用来衡量两个分布相似性的一种量化方式 之前讲述二分类的loss函数时我们使用公式-(y*log(y_)(1-y)*log(1-y_)进行概率计算 y表示真实值,y_表示预测值 …

MyBatisPlus(十五)分页查询

说明 MyBatisPlus 提供了分页查询的功能。 MyBatisPlus 的分页功能&#xff0c;是通过分页插件实现的。要使用分页功能&#xff0c;需要配置分页插件的拦截器。 MyBatisPlus 的分页功能&#xff0c;可以通过内置的API接口实现&#xff1b;也可以通过自定义的 mapper#method …

第七章 正交实验法用例评审bug管理流程

一、正交试验法 利用因果图来设计测试用例时,作为输入条件的原因与输出结果之间的因果关系,有时很难从软件需求规格说明中得到。往往因果关系非常庞大,以至于据此因果图得到的测试用例数目多的惊人,给软件测试带来沉重的负担,为了有效地合理地减少测试的工时与费用,可利…

合并不同门店数据-上下合并

项目背景&#xff1a;线下超市分店&#xff0c;统计产品的销售数量和销售额&#xff0c;并用透视表计算求和 merge()函数可以根据链接键横向连接两张不同表&#xff0c;concat()函数可以上下合并和左右合并2种不同的合并方式。merge()函数只能横向连接两张表&#xff0c;而con…

海信电视U8“死磕”技术,家庭影音娱乐的体验突围

最近《奥本海默》上映&#xff0c;导致我无心工作&#xff0c;沉迷抢票。因为北京能播放该片IMAX 1.43画幅的影院只有一家&#xff0c;场场爆满&#xff0c;一票难求。 这次经历也让我对科技产业多了一点思考。流媒体火爆之后&#xff0c;电影发烧友还是会去影院看电影&#xf…

企业信息查询平台:天眼销正式上线!

在团队的不断努力下&#xff0c;天眼销平台终于和大家见面了&#xff01;总所周知我们是一家数据服务提供商&#xff0c;作为西南数据交易所的数据提供商之一&#xff0c;之前主要是面向B端客户提供数据服务。现在&#xff0c;我们上线的天眼销&#xff08;tianyanxiao.)主要面…

Android ncnn-android-yolov8-seg源码解析 : 实现人像分割

1. 前言 上篇文章&#xff0c;我们已经将人像分割的ncnn-android-yolov8-seg项目运行起来了&#xff0c;后续文章我们会抽取出Demo中的核心代码&#xff0c;在自己的项目中&#xff0c;来接入人体识别和人像分割功能。 先来看下效果&#xff0c;整个图像的是相机的原图&#…

增强现实抬头显示AR-HUD

增强现实抬头显示&#xff08;AR-HUD&#xff09;可以将当前车身状态、障碍物提醒等信息3D投影在前挡风玻璃上&#xff0c;并通过自研的AR-Creator算法&#xff0c;融合实际道路场景进行导航&#xff0c;使驾驶员无需低头即可了解车辆实时行驶状况。结合DMS系统&#xff0c;可以…

【C++】C++11(万能模版、完美转发,可变参数模版,lambda表达式,包装器function+bind绑定)

前言&#xff1a; 我们上一章一节已经接触了C11的一些特性&#xff0c;本章将继续更深入介绍C11中其他使用且重要的一些功能。 目录 &#xff08;一&#xff09;万能模版和完美转发 1、万能模版 2、完美转发 &#xff08;二&#xff09;可变参数模版 1、可变参数模版的使…

【Node.js】NPM 和 package.json

NPM npm 是 Node.js 的包管理工具&#xff0c;基于命令行&#xff0c;用于安装、升级、移除、管理依赖项。 常用命令&#xff1a; npm init&#xff1a;初始化一个新的 npm 项目&#xff0c;创建 package.json 文件。&#xff08;括号里为默认值&#xff09; description&am…

信息可视化和数据可视化的异同和其他比较,到底怎么区分呢?

什么是数据可视化? 根据维塔利弗里德曼的说法&#xff1a; “数据可视化的主要目标是通过图形方式清晰有效地传达数据。” 数据可视化是将数据转化为图表、图形、地图等视觉元素的过程&#xff0c;以便人们更容易理解数据的趋势、关系和模式。它通常强调的是对数据的视觉呈…

Git开发环境使用

目录 git简单介绍 问题 在Git Bash下的操作 在工具idea中使用git 创建分支 合并分支 部分命令合集 git简单介绍 Linux发布了一套属于自己的版本控制系统&#xff0c;运用git可以实现&#xff0c; 代码回溯 &#xff0c; 版本切换 因为是Git是分布式版本控制系统&#x…

unity脚本_Time c#

Time 用于游戏中参与位移 计时 时间暂停等 时间缩放比例&#xff1a; 首先在场景上新建一个空物体 将脚本挂载到空物体上运行 另外重要的两点

从「博客园」的困境,到「用爱发电」~

听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…