当前位置: 首页 > news >正文

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>标题&#xff1a;<u-input placeholder"请输入标题"></u-input></view><view class"page-body"><view classwrapper><view classtoolbar tap"…...

3D汽车模型线上三维互动展示提供视觉盛宴

VR全景虚拟看车软件正在引领汽车展览行业迈向一个全新的时代&#xff0c;它不仅颠覆了传统展览的局限&#xff0c;还为参展者提供了前所未有的高效、便捷和互动体验。借助于尖端的vr虚拟现实技术、逼真的web3d开发、先进的云计算能力以及强大的大数据处理&#xff0c;这一在线展…...

如何在Flutter中进行网络请求?

Hello&#xff01;大家好&#xff0c;我是咕噜铁蛋&#xff0c;你们的好朋友&#xff01;今天&#xff0c;我想和大家分享一下在Flutter中如何进行网络请求。Flutter作为一个跨平台的开发框架&#xff0c;网络请求是其实现数据交互的重要一环。下面&#xff0c;我将详细介绍几种…...

node:ReferenceError: XMLHttpRequest is not defined

node&#xff1a;ReferenceError: XMLHttpRequest is not defined 1 前言 node执行如下代码&#xff1a; new XMLHttpRequest()报错提示&#xff1a;ReferenceError: XMLHttpRequest is not defined 2 解决 2.1 可能原因是没有安装xmlhttprequest npm install xmlhttpreq…...

PHP定时任务框架taskPHP3.0的学习记录1(TaskPHP、执行任务类的实操代码实例)

TaskPHP是一个基于PHP的定时任务框架&#xff0c;它提供了一个简单、灵活且易于使用的解决方案&#xff0c;用于在PHP环境中执行定时任务。下面是对TaskPHP框架的简要介绍&#xff1a; 简单易用&#xff1a;TaskPHP的设计目标是让定时任务的创建和管理变得简单。通过简单的配置…...

图腾柱PFC:HP1010为您的电动两轮车之旅提供绿色,高效,安全的动力

电动两轮车不仅为当今生活提供了便利&#xff0c;更是一种健康和绿色的出行方式。想象一下&#xff0c;在经过一整晚的充分休息&#xff0c;骑上爱车&#xff0c;满血复活的准备开始新的一天。您会愿意带着如何给心爱的两轮车充电的担心开始这一天吗&#xff1f; 随着越来越…...

动态规划-----背包类问题(0-1背包与完全背包)详解

目录 什么是背包问题&#xff1f; 动态规划问题的一般解决办法&#xff1a; 0-1背包问题&#xff1a; 0 - 1背包类问题 分割等和子集&#xff1a; 完全背包问题&#xff1a; 完全背包类问题 零钱兑换II: 什么是背包问题&#xff1f; 背包问题(Knapsack problem)是一种…...

通过 Docker 搭建 BookStack

文章目录 环境说明1、官方网站2、通过 Docker 部署总结 环境说明 操作系统版本&#xff1a;CentOS Linux release 7.9.2009 (Core) Docker 版本&#xff1a;Docker Engine - Community 24.0.2 BookStack 版本&#xff1a;23.02.3 MySQL 版本&#xff1a;8.0.32 1、官方网站 G…...

通俗易懂:什么是Java虚拟机(JVM)?它的主要作用是什么?

Java虚拟机&#xff08;Java Virtual Machine, JVM&#xff09;是一种软件实现的抽象计算机&#xff0c;它负责执行Java字节码&#xff08;Bytecode&#xff09;。Java程序并不是直接在物理计算机上运行&#xff0c;而是先由Java编译器将源代码编译成与平台无关的字节码&#x…...

[k8s] kubectl执行失败后等待一段时间再重试 (Shell实现)

使用Shell脚本实现功能&#xff1a; kubectl执行失败后&#xff0c;等待30秒后再重试&#xff0c;一共重试3次&#xff0c;代码如下&#xff1a; #!/bin/bashKUBECTL_BIN/var/lib/snapd/snap/bin/kubectlERR_MSG_K8S_NOTRUNNING"microk8s is not running" ERR_MSG_C…...

java中的static和单例模式

同一个类中&#xff0c;访问其类成员&#xff0c;可以省略类名不写 static&#xff1a;叫静态&#xff0c;可以修饰成员变量&#xff0c;成员方法。 成员变量按照有无static修饰&#xff0c;分为两种&#xff1a; 类变量&#xff1a;有static修饰&#xff0c;属于类&#xf…...

RabbitMQ相关总结

Broker 异步调用中用Broker进行事件订阅和调用&#xff0c;完成解耦 没有强依赖&#xff0c;不用担心级联失败 流量削峰 MQ 的下载 1.可以使用命令拉取镜像 docker pull rabbitmq:3-management 2.也可以直接去官网下载tar包&#xff0c;然后上传到虚拟机上面 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 主…...

第十五届蓝桥杯第三期模拟赛第十题 ← 上楼梯

【问题描述】 小蓝要上一个楼梯&#xff0c;楼梯共有 n 级台阶&#xff08;即小蓝总共要走 n 级&#xff09;。小蓝每一步可以走 a 级、b 级或 c 级台阶。 请问小蓝总共有多少种方案能正好走到楼梯顶端&#xff1f;【输入格式】 输入的第一行包含一个整数 n 。 第二行包含三个整…...

第四题:星期一

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 整个 20 世纪&#xff08;1901 年 1 月 1 日至 2000 年 12 月 31 日之间&#xff09;&#xff0c;一共有多少个星期一&#xff1f;(不要告诉我你不知道今天是星期几…...

从微信小程序转战uniapp,我总结的路由跳转对照表与迁移心得

从微信小程序到Uniapp&#xff1a;路由跳转深度迁移指南与实战避坑 第一次在Uniapp项目里看到uni.navigateTo这个API时&#xff0c;我下意识地以为它和微信小程序的wx.navigateTo完全一样——直到某个深夜&#xff0c;测试同学突然报告说iOS设备上连续跳转7个页面后应用直接闪退…...

观察taotoken在ubuntu高峰期调用时的稳定性与自动路由效果

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 观察 Taotoken 在 Ubuntu 高峰期调用时的稳定性与自动路由效果 1. 背景与测试环境 在日常的开发与调试工作中&#xff0c;我们经常…...

SITS 2026图计算方案深度解析,独家披露金融风控与生物医药两大场景的GNN工程化适配矩阵(含12个可复用配置模板)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI原生图计算应用&#xff1a;SITS 2026图神经网络工程化方案 SITS 2026 是面向大规模动态图场景的AI原生图计算框架&#xff0c;深度融合GNN训练、图拓扑实时更新与边缘-云协同推理能力。其核心设计摒…...

微信消息自动转发终极指南:5分钟实现跨群智能消息同步

微信消息自动转发终极指南&#xff1a;5分钟实现跨群智能消息同步 【免费下载链接】wechat-forwarding 在微信群之间转发消息 项目地址: https://gitcode.com/gh_mirrors/we/wechat-forwarding 在微信群管理和协作场景中&#xff0c;消息的自动转发与同步是提升效率的关…...

SeetaFace6实战:5分钟搞定实时视频流人脸检测(支持戴口罩识别,附完整C++/OpenCV代码)

SeetaFace6实战&#xff1a;5分钟构建高精度实时视频人脸检测系统&#xff08;含口罩识别&#xff09; 在智能安防、无接触门禁和远程医疗等场景中&#xff0c;实时人脸检测技术正发挥着越来越重要的作用。SeetaFace6作为中科视拓开源的最新版本人脸识别引擎&#xff0c;不仅将…...

Google 2026 AI全家桶升级:企业管理员必须在48小时内完成的3项策略校准与2项合规备案

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Google 2026 AI全家桶升级全景图 2026年&#xff0c;Google正式发布新一代AI基础设施矩阵——“Project Aether”&#xff0c;标志着其AI全家桶从模块化协同迈向原生融合时代。核心升级聚焦于模型、工具…...

告别手动改包!用Fiddler的Free HTTP插件实现自动化测试(附实战配置)

构建高效HTTP流量自动化测试体系&#xff1a;Fiddler Free HTTP插件深度实践 在持续交付和DevOps成为主流的今天&#xff0c;自动化测试已成为保障软件质量不可或缺的一环。然而&#xff0c;许多团队在接口测试环节仍面临重复劳动&#xff1a;每次测试都需要手动修改请求参数、…...

时间序列自监督学习实战:VIbCReg框架迁移与性能优化

1. 项目概述&#xff1a;当计算机视觉的自监督学习遇上时间序列在机器学习领域&#xff0c;获取高质量、大规模的标注数据一直是个老大难问题&#xff0c;尤其是在时间序列分析这个方向。无论是工业设备的振动监测、医疗心电信号分析&#xff0c;还是金融市场的波动预测&#x…...

告别硬编码!SAP ABAPer必学的5个POPUP函数实战用法(附完整代码)

告别硬编码&#xff01;SAP ABAPer必学的5个POPUP函数实战用法&#xff08;附完整代码&#xff09; 在SAP ABAP开发中&#xff0c;交互设计往往决定了用户体验的好坏。想象一下这样的场景&#xff1a;用户在执行关键操作时缺乏明确确认&#xff0c;导致数据误删&#xff1b;或者…...

3步解锁游戏窗口任意分辨率:SRWE终极使用指南

3步解锁游戏窗口任意分辨率&#xff1a;SRWE终极使用指南 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 你是否曾经遇到过这样的情况&#xff1a;想用游戏截图制作精美的壁纸&#xff0c;却发现游戏内置的分辨…...