RabbitMQ-扇形交换机(Fanout )
扇形交换机:Fanout Exchange扇形交换机是最基本的交换机类型,它所能做的事情非常简单———广播消息。扇形交换机会把能接收到的消息全部发送给绑定在自己身上的队列。因为广播不需要“思考”,所以扇形交换机处理消息的速度也是所有的交换机类型里面最快的。 这个交换机没有路由键概念,就算你绑了路由键也是无视的。 =======================创建扇形交换机=============================================
@Autowired AmqpAdmin amqpAdmin;
/*** 创建扇形交换机* @return*/
@GetMapping("/createFanout")
public void createFanout() {//交换机String exchangeName = "EW_EXCHANGE_FANOUT";//国内版队列String queueProductName = "EW_PRODUCT_ZH_FANOUT";//国际版队列String queueProductNameTwo = "EW_PRODUCT_EN_FANOUT";//交换机FanoutExchange exchange = new FanoutExchange(exchangeName, true, false);amqpAdmin.declareExchange(exchange);//产品队列Queue queue = new Queue(queueProductName, true, false, false);amqpAdmin.declareQueue(queue);Queue queue2 = new Queue(queueProductNameTwo, true, false, false);amqpAdmin.declareQueue(queue2);//交换机与设备绑定Binding bindingProduct = BindingBuilder.bind(queue).to(exchange);amqpAdmin.declareBinding(bindingProduct);Binding bindingProduct2 = BindingBuilder.bind(queue2).to(exchange);amqpAdmin.declareBinding(bindingProduct2);}
=======================发送消息===============================
/*** rabbitmq 管理组件*/private final RabbitTemplate rabbitTemplate;
/*** @param vo 发送消息* @param topExchange 交换机* @param routingKey 路由 扇形交换机不识别路由* @return*/
public static void syncDataChange(byte[] vo, String topExchange, String routingKey, RabbitTemplate rabbitTemplate) {try {if (null != vo) {Message message = MessageBuilder.withBody(vo).setContentType(MessageProperties.CONTENT_TYPE_JSON).setContentEncoding("UTF-8").setMessageId(UUID.randomUUID().toString()).build();rabbitTemplate.convertAndSend(topExchange, routingKey, message, new CorrelationData(UUID.randomUUID().toString()));}} catch (Exception e) {e.printStackTrace();}
}
==========================接收消息===================================
//缓存 private StringRedisTemplate redisTemplate;
@RabbitListener(bindings = {@QueueBinding(value = @Queue(value ="EW_PRODUCT_ZH_FANOUT"),exchange = @Exchange(value = "EW_EXCHANGE_FANOUT" type = ExchangeTypes.FANOUT))})@RabbitHandlerpublic void onMessage(Channel channel, Message message) throws IOException {//唯一标识String messageId = message.getMessageProperties().getMessageId();//接收消息String msg = new String(message.getBody(), "UTF-8");try {if (StringUtils.isNotBlank(msg)) {//判断messageId在redis中是否存在boolean flage = stringRedisTemplate(messageId, msg);if (!flage) {log.error("消息已重复处理,拒绝再次接收...");
// channel.basicReject(message.getMessageProperties().getDeliveryTag(), false); // 拒绝消息} else {//如果要防止 重复消费,则需要将 id值存在 redis,每次 都要去redis中拿id比对,是否存在,存在则消费过->messageId
// channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);log.info("接收到的消息{}->" + redisTemplate.opsForValue().get(messageId));}} else {log.info("消息为空拒绝接收...");
// channel.basicReject(message.getMessageProperties().getDeliveryTag(), false); // 拒绝消息}} catch (Exception e) {if (message.getMessageProperties().getRedelivered()) {log.error("消息已重复处理,拒绝再次接收...");
// channel.basicReject(message.getMessageProperties().getDeliveryTag(), false); // 拒绝消息} else {log.error("消息即将再次返回队列处理...");
// channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);}}log.info("===消费端Payload============ " + msg);}/*** 判断Key是否存在** @param messageId 唯一表示key* @param msg value值* @return*/private boolean stringRedisTemplate(String messageId, String msg) {log.info("messageId=" + messageId);//判断Key是否存在 有则返回true,没有则返回falseif (redisTemplate.hasKey(messageId)) {return false;} else {redisTemplate.opsForValue().setIfAbsent(messageId, msg);}return true;}
相关文章:
RabbitMQ-扇形交换机(Fanout )
扇形交换机:Fanout Exchange扇形交换机是最基本的交换机类型,它所能做的事情非常简单———广播消息。扇形交换机会把能接收到的消息全部发送给绑定在自己身上的队列。因为广播不需要“思考”,所以扇形交换机处理消息的速度也是所有的交换机类…...
Python 学习曲线 从 Python 新手到 Pro
Python 学习曲线 从 Python新手到 Pro 使用代码片段介绍: Python 是世界上最通用和使用最广泛的编程语言之一,以其简单性、可读性和多功能性而闻名。 在本文中,我们将探讨一系列示例场景,其中代码由具有三个不同专业知识水平的程序…...
薪资18K需要什么水平?来看看98年测试工程师的面试全过程…
我的情况 大概介绍一下个人情况,男,本科,三年多测试工作经验,懂python,会写脚本,会selenium,会性能,然而到今天都没有收到一份offer!从年后就开始准备简历,年…...
基于趋动云的 Stable Diffusion Webui 环境搭建
Stable Diffusion Webui 环境搭建,首先新建一个项目: 然后,选择镜像。注意点公开的,已近做好的这个镜像,superx创建,集成了miniconda3的镜像。 然后选择添加数据源,一样,还是点公开&…...
备忘录设计模式解读
目录 问题引进 游戏角色状态恢复问题 传统方案解决游戏角色恢复 传统的方式的问题分析 备忘录模式基本介绍 基本介绍 备忘录模式的原理类图 对原理类图的说明 游戏角色恢复状态实例 应用实例要求 思路分析和图解(类图) 代码实战 备忘录模式的注意事项和细节 问题引…...
股票期货模拟交易有用吗?股票期货模拟交易心得
股票期货市场为了满足新用户的需求,有专门的股票期货模拟交易平台,大家可以在这个平台上进行股票期货的模拟交易,这样可以通过不断总结,丰富我们的知识。下面整理的股票期货模拟交易实验心得,从股票期货模拟交易与实盘…...
2023年五月份图形化三级打卡试题
活动时间 从2023年5月1日至5月21日,每天一道编程题。 本次打卡的规则如下: 小朋友每天利用10~15分钟做一道编程题,遇到问题就来群内讨论,我来给大家答疑。 小朋友做完题目后,截图到朋友圈打卡并把打卡的截图发到活动群…...
【华为OD机试真题】字母组合(javapython)100%通过率 详细代码注释
字母组合 知识点回溯 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 每个数字对应多个字母,对应关系如下: 0: a,b,c 1: d,e,f 2: g,hi 3: j,k,l 4: m,n,o 5: p,q,r 6: s,t 7:u,v 8: w,x 9: y,z 输入一串数字后,通过数字和字母的对应关系可以得到多个字母字符串 (要…...
精彩!openEuler 社区年度顶级会议发生了啥?
2023年4月20-21日,万涓汇流,奔涌向前,openEuler Developer Day2023(以下简称“ODD2023”)在上海以线上线下的方式圆满举办。 本次大会由开放原子开源基金会指导,中国软件行业协会、openEuler社区、边缘计算产业联盟共同主办&#…...
Confidential Containers发布0.5.0版本,龙蜥将基于八大特性构建开箱即用的机密容器解决方案
文/段勇帅 01 前言 机密容器(Confidential Containers,简称CoCo)是 Cloud Native Computing Foundation(CNCF)Sandbox 项目。目前机密容器项目的核心参与者包括阿里云、AMD、ARM、IBM、Intel、Microsoft、Red Hat、R…...
独立储能的现货电能量与调频辅助服务市场出清协调机制(Matlab代码实现)
💥 💥 💞 💞 欢迎来到本博客 ❤️ ❤️ 💥 💥 🏆 博主优势: 🌞 🌞 🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 …...
使用 Luckysheet 可实现 Web 的 Excel
一、写在前面 工作中会遇到excel的导入和导出,换个角度看,假如有个 web 版本的excel ,且能上传现有的,修改编辑后再下载也是个不错的方案。 Luckysheet 是实现 web版Excel的一个优秀的框架。 Luckysheet ,一款纯前端类…...
时间序列预测(一)基于Prophet的销售额预测
时间序列预测(一)基于Prophet的销售额预测 小O:小H,有没有什么方法能快速的预测下未来的销售额啊 小H:Facebook曾经开源了一款时间序列预测算法fbprophet,简单又快速~ 传统的时间序列算法很多&a…...
【电科复试第一名】23上交819考研经验分享
笔者来自通信考研小马哥23上交819全程班学员 819,上岸经验贴,知无不言 初试第十一,复试第一,总分第七(与第六同分) 考研经历:本科就读与湖南某末985,大学时间没好好学习,天天打王者,玩steam上…...
每日学术速递4.24
CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Collaborative Diffusion for Multi-Modal Face Generation and Editing(CVPR 2023) 标题:多模态人脸生成和编辑的协同扩散 作者:Ziqi Huang, Kelvin C.K. …...
怎么把mkv文件转成mp4格式,3招立马处理
怎么把mkv文件转成mp4格式的方法你知道吗?我想很多朋友会遇到这样的情况,下载视频后发现无法打开。原来我们下载的视频格式是mkv,也许这个格式大家不是很熟悉的。那么今天就来认识一下,mkv是Matroska的一种媒体文件,mk…...
SEO机制算是让我玩明白了
获取当前时间时间戳,返回遵循ISO 8601扩展格式的日期 new Date(Date.now()).toISOString() 使用moment库转换回来 this.moment(new Date(Date.now()).toISOString()).format("YYYY-MM-DD") js去掉富文本中html标签和图片 filterHtmlTag(val) {if(!val){…...
JDBC连接数据库详细教程指南
目录 一、JDBC介绍 二、JDBC环境的搭建 三、JDBC的开发步骤 1、加载JDBC驱动程序 2、建立数据库连接 3、创建Statement对象 4、执行SQL语句 5、处理结果集 6、关闭连接 7、示例程序 8、注意 一、JDBC介绍...
换个花样玩C++(2)柔性数组怎么玩
如果你涉足网络传输方向的开发,我想你对这段类似的代码应该不会很陌生,先看代码: int check_msg(svr_proto_t* pkg, uint32_t bodylen, fdsession_t* fdsess) {struct report_msg {uint32_t gameid;uint32_t userid;uint32_t recvid;uint32_t onlineid;uint32_t …...
【前端】一个好看的前端页面
序言 突发奇想,看到这个特效还不错,就加工了一下,如果也能帮到你,很开心 先上效果图 部分代码讲解 前端生成uuid function getUUID(len, radix) {var chars 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.s…...
win挂载liunx目录
服务器能 SSH 登录时,在 Windows 上把远程目录映射成盘符。 步骤: 安装 WinFsp (https://winfsp.dev/rel/) 安装 SSHFS-Win(或商店版 WinFsp SSHFS)资源管理器地址栏输入,或命令行:…...
Taotoken在应对大模型API服务波动时的路由与容灾机制体验
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken在应对大模型API服务波动时的路由与容灾机制体验 1. 背景与观测场景 在开发实践中,我们时常会遇到依赖的某个…...
终极指南:如何解锁光猫全部性能?RTL960x开源方案深度解析
终极指南:如何解锁光猫全部性能?RTL960x开源方案深度解析 【免费下载链接】RTL960x Hacking & Reverse Engineering RTL960x-based xPON ONTs to suit your OLT 项目地址: https://gitcode.com/gh_mirrors/rt/RTL960x RTL960x开源光猫固件是基…...
别再乱建索引了!用进销存系统的真实案例,聊聊MySQL索引优化与视图设计的那些坑
MySQL索引优化与视图设计实战:进销存系统的避坑指南 当你的进销存系统从几百条记录增长到数百万条时,那些曾经瞬间完成的查询开始变得迟缓,收银台前的顾客开始不耐烦地敲击柜台,而老板的脸色也随着系统响应时间的增加而越发阴沉。…...
FlicFlac音频格式转换工具:Windows平台轻量级音频处理终极指南
FlicFlac音频格式转换工具:Windows平台轻量级音频处理终极指南 【免费下载链接】FlicFlac Tiny portable audio converter for Windows (WAV FLAC MP3 OGG APE M4A AAC) 项目地址: https://gitcode.com/gh_mirrors/fl/FlicFlac 还在为不同设备间的音频格式兼…...
别再滥用Promise.all了!聊聊Vue/React项目中用p-limit控制并发请求的实战心得
别再滥用Promise.all了!聊聊Vue/React项目中用p-limit控制并发请求的实战心得 在Vue/React项目中处理批量数据请求时,许多开发者会条件反射地使用Promise.all,认为这是最高效的方案。直到某次线上事故——用户尝试导出500条订单数据时浏览器直…...
Unity Figma Bridge:设计-开发一体化协同的技术架构解决方案
Unity Figma Bridge:设计-开发一体化协同的技术架构解决方案 【免费下载链接】UnityFigmaBridge Easily bring your Figma Documents, Components, Assets and Prototypes to Unity 项目地址: https://gitcode.com/gh_mirrors/un/UnityFigmaBridge Unity Fig…...
OPPO Pad 6 官宣!3K 柔光屏,5 月 25 日发布
5月18日,OPPO 正式官宣全新平板 OPPO Pad 6,定档 5月25日与 Reno16 系列同台发布。作为迭代款,它没有激进改款,而是在成熟设计上精准升级 —— 核心芯片、屏幕、续航、存储与手写体验全面优化,瞄准学生网课、大屏娱乐、…...
3分钟学会在Windows上安装安卓应用:APK-Installer完整指南
3分钟学会在Windows上安装安卓应用:APK-Installer完整指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想在Windows电脑上直接运行安卓应用,…...
FreeRTOS-Plus-TCP vs LwIP:在GD32F450上如何选择?附LAN8720A驱动避坑指南
FreeRTOS-Plus-TCP与LwIP在GD32F450上的深度对比与实战选型指南 当工程师在资源受限的GD32F450平台上构建网络功能时,FreeRTOS-Plus-TCP和LwIP这两个轻量级TCP/IP协议栈往往成为主要候选。本文将基于实际项目经验,从内存占用、性能表现、开发效率等维度进…...
