RabbitMQ--04--发布订阅模式 (fanout)-案例
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 发布订阅模式 (fanout)---案例
- 前言
- @RabbitListener和@RabbitHandler的使用
- 1.通过Spring官网快速创建一个RabbitMQ的生产者项目
- 2.导入项目后在application.yml文件中配置
- 3.创建一个RabbitMqConfig配置类
- 4. 生产者
- 5.测试生产者创建mq是否成功
- 访问网址: http://localhost:15672/#/queues
- 6.再创建一个消费者项目
- 7. 创建消费者
- 8.测试消费者接收信息
发布订阅模式 (fanout)—案例
前言


@RabbitListener和@RabbitHandler的使用


1.通过Spring官网快速创建一个RabbitMQ的生产者项目

2.导入项目后在application.yml文件中配置
# 服务端口
server:port: 8081#配置rabbitmq服务 测试不用写,默认本机
spring:rabbitmq:username: guest #默认账号password: guest #默认密码virtual-host: /host: localhostport: 5672#消息确认配置项#确认消息已发送到交换机: Exchangepublisher-confirm-type: correlated#确认消息已发送到队列: Queuepublisher-returns: true
3.创建一个RabbitMqConfig配置类
package com.exam.RebbitMQ.config;import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RabbitMqConfig {//1:声明注册fanout模式的交换机,参数1:对应的service的fanoutName,参数2:持久化(true,false),参数3:自动删除(false/true)@Beanpublic FanoutExchange fanoutExchange(){return new FanoutExchange("fanout_order_exchang", true, false);}//2:声明队列 sms.fanout.queue,email.fanout.queue,duanxin.fanout.queue//参数1:名字,参数2:持久化队列true//短信队列@Beanpublic Queue smsQueue() {System.err.println("执行了sms");return new Queue("sms.fanout.queue",true);}@Beanpublic Queue duanxinQueue() {System.err.println("执行了duanxin");return new Queue("duanxin.fanout.queue",true);}//邮箱队列@Beanpublic Queue emailQueue() {System.err.println("执行了email");return new Queue("email.fanout.queue",true);}//3:完成绑定关系(队列和交换机完成绑定关系)@Beanpublic Binding smsBinding() {//把smsQueue放到fanoutExchange交换机上面return BindingBuilder.bind(smsQueue()).to(fanoutExchange());}@Beanpublic Binding duanxinBinding() {//把duanxinQueue放到fanoutExchange交换机上面return BindingBuilder.bind(duanxinQueue()).to(fanoutExchange());}@Beanpublic Binding emailBinding() {//把emailQueue放到fanoutExchange交换机上面return BindingBuilder.bind(emailQueue()).to(fanoutExchange());}}
4. 生产者
- OrderService
package com.exam.RebbitMQ.service;public interface OrderService {void makeOrder(String userid,String productid,int num);
}
- OrderServiceImpl

package com.exam.RebbitMQ.service.Impl;import java.util.UUID;import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import com.exam.RebbitMQ.service.OrderService;@Service
public class OrderServiceImpl implements OrderService{@Autowiredprivate RabbitTemplate rabbitTemplate;/*** 模拟用户下单 **/public void makeOrder(String userid,String productid,int num) {//1.根据商品ID查询商品是否充足//2.保存订单String orderId = UUID.randomUUID().toString();System.err.println("订单生成成功"+orderId);//3.通过MQ来完成消息的分发//参数1:交换机 参数二:路由key/queue队列名称 参数三:消息内容String exchangName ="fanout_order_exchang";String routingKey = "";rabbitTemplate.convertAndSend(exchangName, routingKey, orderId);}}
5.测试生产者创建mq是否成功
- 在项目的test中发送请求
package com.huyi.rabbitmq;import com.huyi.rabbitmq.service.OrderService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class RabbitMqApplicationTests {@Autowiredprivate OrderService orderService;@Testvoid contextLoads() {orderService.makeOrder("1","1", 18);}}

访问网址: http://localhost:15672/#/queues



6.再创建一个消费者项目

- yml配置
# 服务端口
server:port: 8082#配置rabbitmq服务 测试不用写,默认本机
spring:rabbitmq:username: guest #默认账号password: guest #默认密码virtual-host: /host: localhostport: 5672#消息确认配置项#确认消息已发送到交换机: Exchangepublisher-confirm-type: correlated#确认消息已发送到队列: Queuepublisher-returns: true
7. 创建消费者
- SmsConsumerService、SmsConsumerServiceImpl
package com.huyi.rabbitmq_consumber.service;public interface SmsConsumerService {void reviceMessage(String message);
}
package com.huyi.rabbitmq_consumber.service.Impl;import com.huyi.rabbitmq_consumber.service.SmsConsumerService;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;@Component
public class SmsConsumerServiceImpl implements SmsConsumerService {//注意:这里要和生产者RabbitMqConfig文件中的名字对应起来@RabbitListener(queues = {"sms.fanout.queue"})public void reviceMessage(String message) {System.err.println("sms_fanout--接收到了订单信息");}
}
- EmailConsumerService、EmailConsumerServiceImpl
package com.huyi.rabbitmq_consumber.service;public interface EmailConsumerService {void reviceMessage(String message);
}
package com.huyi.rabbitmq_consumber.service.Impl;import com.huyi.rabbitmq_consumber.service.EmailConsumerService;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;@Component
@RabbitListener(queues = {"email.fanout.queue"})
public class EmailConsumerServiceImpl implements EmailConsumerService {@RabbitHandlerpublic void reviceMessage(String message) {System.err.println("Email_fanout--接收到了订单信息"+message);}
}
- DuanxinConsumerService、DuanxinConsumerServiceImpl
package com.huyi.rabbitmq_consumber.service;public interface DuanxinConsumerService {void reviceMessage(String message);
}
package com.huyi.rabbitmq_consumber.service.Impl;import com.huyi.rabbitmq_consumber.service.DuanxinConsumerService;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;@Component
@RabbitListener(queues = {"duanxin.fanout.queue"})
public class DuanxinConsumerServiceImpl implements DuanxinConsumerService {@RabbitHandlerpublic void reviceMessage(String message) {System.err.println("Duanxin_fanout--接收到了订单信息"+message);}}
8.测试消费者接收信息
- 启动消费者项目

- 启动生产者项目

- 查看消费者项目是否监听到了生产者的信息

相关文章:
RabbitMQ--04--发布订阅模式 (fanout)-案例
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 发布订阅模式 (fanout)---案例前言RabbitListener和RabbitHandler的使用 1.通过Spring官网快速创建一个RabbitMQ的生产者项目2.导入项目后在application.yml文件中配…...
基于java+SpringBoot+Vue的网上书城管理系统设计与实现
基于javaSpringBootVue的网上书城管理系统设计与实现 开发语言: Java 数据库: MySQL技术: SpringBoot MyBatis工具: IDEA/Eclipse、Navicat、Maven 系统展示 前台展示 后台展示 系统简介 整体功能包含: 网上书城管理系统是一个基于互联网的在线购书平台&#…...
PCL点云处理之M估计样本一致性(MSAC)平面拟合(二百三十六)
PCL点云处理之M估计样本一致性(MSAC)平面拟合(二百三十五六) 一、算法介绍二、使用步骤1.代码2.效果一、算法介绍 写论文当然用RANSAC的优化变种算法MSAC啊,RANSAC太土太LOW了哈哈 MSAC算法(M-estimator Sample Consensus)是RANSAC(Random Sample Consensus)的一种…...
通过WSL在阿里云上部署Vue项目
参考: 阿里云上搭建网站-CSDN博客 云服务器重装 关闭当前运行实例 更换操作系统,还有其他的进入方式。 选择ubuntu系统(和WSL使用相同的系统)。 设置用户和密码。发送短信验证码。 新系统更新。秒速干净的新系统设置完成。 这…...
240330-大模型资源-使用教程-部署方式-部分笔记
A. 大模型资源 Models - Hugging FaceHF-Mirror - Huggingface 镜像站模型库首页 魔搭社区 B. 使用教程 HuggingFace HuggingFace 10分钟快速入门(一),利用Transformers,Pipeline探索AI。_哔哩哔哩_bilibiliHuggingFace快速入…...
uni-app 富文本编辑器
<template><view class"container"><view>标题:<u-input placeholder"请输入标题"></u-input></view><view class"page-body"><view classwrapper><view classtoolbar tap"…...
3D汽车模型线上三维互动展示提供视觉盛宴
VR全景虚拟看车软件正在引领汽车展览行业迈向一个全新的时代,它不仅颠覆了传统展览的局限,还为参展者提供了前所未有的高效、便捷和互动体验。借助于尖端的vr虚拟现实技术、逼真的web3d开发、先进的云计算能力以及强大的大数据处理,这一在线展…...
如何在Flutter中进行网络请求?
Hello!大家好,我是咕噜铁蛋,你们的好朋友!今天,我想和大家分享一下在Flutter中如何进行网络请求。Flutter作为一个跨平台的开发框架,网络请求是其实现数据交互的重要一环。下面,我将详细介绍几种…...
node:ReferenceError: XMLHttpRequest is not defined
node:ReferenceError: XMLHttpRequest is not defined 1 前言 node执行如下代码: new XMLHttpRequest()报错提示:ReferenceError: XMLHttpRequest is not defined 2 解决 2.1 可能原因是没有安装xmlhttprequest npm install xmlhttpreq…...
PHP定时任务框架taskPHP3.0的学习记录1(TaskPHP、执行任务类的实操代码实例)
TaskPHP是一个基于PHP的定时任务框架,它提供了一个简单、灵活且易于使用的解决方案,用于在PHP环境中执行定时任务。下面是对TaskPHP框架的简要介绍: 简单易用:TaskPHP的设计目标是让定时任务的创建和管理变得简单。通过简单的配置…...
图腾柱PFC:HP1010为您的电动两轮车之旅提供绿色,高效,安全的动力
电动两轮车不仅为当今生活提供了便利,更是一种健康和绿色的出行方式。想象一下,在经过一整晚的充分休息,骑上爱车,满血复活的准备开始新的一天。您会愿意带着如何给心爱的两轮车充电的担心开始这一天吗? 随着越来越…...
动态规划-----背包类问题(0-1背包与完全背包)详解
目录 什么是背包问题? 动态规划问题的一般解决办法: 0-1背包问题: 0 - 1背包类问题 分割等和子集: 完全背包问题: 完全背包类问题 零钱兑换II: 什么是背包问题? 背包问题(Knapsack problem)是一种…...
通过 Docker 搭建 BookStack
文章目录 环境说明1、官方网站2、通过 Docker 部署总结 环境说明 操作系统版本:CentOS Linux release 7.9.2009 (Core) Docker 版本:Docker Engine - Community 24.0.2 BookStack 版本:23.02.3 MySQL 版本:8.0.32 1、官方网站 G…...
通俗易懂:什么是Java虚拟机(JVM)?它的主要作用是什么?
Java虚拟机(Java Virtual Machine, JVM)是一种软件实现的抽象计算机,它负责执行Java字节码(Bytecode)。Java程序并不是直接在物理计算机上运行,而是先由Java编译器将源代码编译成与平台无关的字节码&#x…...
[k8s] kubectl执行失败后等待一段时间再重试 (Shell实现)
使用Shell脚本实现功能: kubectl执行失败后,等待30秒后再重试,一共重试3次,代码如下: #!/bin/bashKUBECTL_BIN/var/lib/snapd/snap/bin/kubectlERR_MSG_K8S_NOTRUNNING"microk8s is not running" ERR_MSG_C…...
java中的static和单例模式
同一个类中,访问其类成员,可以省略类名不写 static:叫静态,可以修饰成员变量,成员方法。 成员变量按照有无static修饰,分为两种: 类变量:有static修饰,属于类…...
RabbitMQ相关总结
Broker 异步调用中用Broker进行事件订阅和调用,完成解耦 没有强依赖,不用担心级联失败 流量削峰 MQ 的下载 1.可以使用命令拉取镜像 docker pull rabbitmq:3-management 2.也可以直接去官网下载tar包,然后上传到虚拟机上面 spring AMQP…...
RAFT: Adapting Language Model to Domain Specific RAG
今天来介绍下伯克利大学3.15日新发的一篇paper,RAFT: Adapting Language Model to Domain Specific RAG 主要研究了如何构造训练数据来微调你的LLM,从而在LLM在垂直领域的RAG中表现更好。并且开源了代码:GitHub - ShishirPatil/gorilla: Gorilla: An API store for LLMs 主…...
第十五届蓝桥杯第三期模拟赛第十题 ← 上楼梯
【问题描述】 小蓝要上一个楼梯,楼梯共有 n 级台阶(即小蓝总共要走 n 级)。小蓝每一步可以走 a 级、b 级或 c 级台阶。 请问小蓝总共有多少种方案能正好走到楼梯顶端?【输入格式】 输入的第一行包含一个整数 n 。 第二行包含三个整…...
第四题:星期一
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 整个 20 世纪(1901 年 1 月 1 日至 2000 年 12 月 31 日之间),一共有多少个星期一?(不要告诉我你不知道今天是星期几…...
从微信小程序转战uniapp,我总结的路由跳转对照表与迁移心得
从微信小程序到Uniapp:路由跳转深度迁移指南与实战避坑 第一次在Uniapp项目里看到uni.navigateTo这个API时,我下意识地以为它和微信小程序的wx.navigateTo完全一样——直到某个深夜,测试同学突然报告说iOS设备上连续跳转7个页面后应用直接闪退…...
观察taotoken在ubuntu高峰期调用时的稳定性与自动路由效果
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察 Taotoken 在 Ubuntu 高峰期调用时的稳定性与自动路由效果 1. 背景与测试环境 在日常的开发与调试工作中,我们经常…...
SITS 2026图计算方案深度解析,独家披露金融风控与生物医药两大场景的GNN工程化适配矩阵(含12个可复用配置模板)
更多请点击: https://intelliparadigm.com 第一章:AI原生图计算应用:SITS 2026图神经网络工程化方案 SITS 2026 是面向大规模动态图场景的AI原生图计算框架,深度融合GNN训练、图拓扑实时更新与边缘-云协同推理能力。其核心设计摒…...
微信消息自动转发终极指南:5分钟实现跨群智能消息同步
微信消息自动转发终极指南:5分钟实现跨群智能消息同步 【免费下载链接】wechat-forwarding 在微信群之间转发消息 项目地址: https://gitcode.com/gh_mirrors/we/wechat-forwarding 在微信群管理和协作场景中,消息的自动转发与同步是提升效率的关…...
SeetaFace6实战:5分钟搞定实时视频流人脸检测(支持戴口罩识别,附完整C++/OpenCV代码)
SeetaFace6实战:5分钟构建高精度实时视频人脸检测系统(含口罩识别) 在智能安防、无接触门禁和远程医疗等场景中,实时人脸检测技术正发挥着越来越重要的作用。SeetaFace6作为中科视拓开源的最新版本人脸识别引擎,不仅将…...
Google 2026 AI全家桶升级:企业管理员必须在48小时内完成的3项策略校准与2项合规备案
更多请点击: https://intelliparadigm.com 第一章:Google 2026 AI全家桶升级全景图 2026年,Google正式发布新一代AI基础设施矩阵——“Project Aether”,标志着其AI全家桶从模块化协同迈向原生融合时代。核心升级聚焦于模型、工具…...
告别手动改包!用Fiddler的Free HTTP插件实现自动化测试(附实战配置)
构建高效HTTP流量自动化测试体系:Fiddler Free HTTP插件深度实践 在持续交付和DevOps成为主流的今天,自动化测试已成为保障软件质量不可或缺的一环。然而,许多团队在接口测试环节仍面临重复劳动:每次测试都需要手动修改请求参数、…...
时间序列自监督学习实战:VIbCReg框架迁移与性能优化
1. 项目概述:当计算机视觉的自监督学习遇上时间序列在机器学习领域,获取高质量、大规模的标注数据一直是个老大难问题,尤其是在时间序列分析这个方向。无论是工业设备的振动监测、医疗心电信号分析,还是金融市场的波动预测&#x…...
告别硬编码!SAP ABAPer必学的5个POPUP函数实战用法(附完整代码)
告别硬编码!SAP ABAPer必学的5个POPUP函数实战用法(附完整代码) 在SAP ABAP开发中,交互设计往往决定了用户体验的好坏。想象一下这样的场景:用户在执行关键操作时缺乏明确确认,导致数据误删;或者…...
3步解锁游戏窗口任意分辨率:SRWE终极使用指南
3步解锁游戏窗口任意分辨率:SRWE终极使用指南 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 你是否曾经遇到过这样的情况:想用游戏截图制作精美的壁纸,却发现游戏内置的分辨…...
