当前位置: 首页 > 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;(不要告诉我你不知道今天是星期几…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

JS红宝书笔记 - 3.3 变量

要定义变量&#xff0c;可以使用var操作符&#xff0c;后跟变量名 ES实现变量初始化&#xff0c;因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符&#xff0c;可以创建一个全局变量 如果需要定义…...

Python学习(8) ----- Python的类与对象

Python 中的类&#xff08;Class&#xff09;与对象&#xff08;Object&#xff09;是面向对象编程&#xff08;OOP&#xff09;的核心。我们可以通过“类是模板&#xff0c;对象是实例”来理解它们的关系。 &#x1f9f1; 一句话理解&#xff1a; 类就像“图纸”&#xff0c;对…...

Cursor AI 账号纯净度维护与高效注册指南

Cursor AI 账号纯净度维护与高效注册指南&#xff1a;解决限制问题的实战方案 风车无限免费邮箱系统网页端使用说明|快速获取邮箱|cursor|windsurf|augment 问题背景 在成功解决 Cursor 环境配置问题后&#xff0c;许多开发者仍面临账号纯净度不足导致的限制问题。无论使用 16…...

MCP和Function Calling

MCP MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09; &#xff0c;2024年11月底&#xff0c;由 Anthropic 推出的一种开放标准&#xff0c;旨在统一大模型与外部数据源和工具之间的通信协议。MCP 的主要目的在于解决当前 AI 模型因数据孤岛限制而…...

Spring AI中使用ChatMemory实现会话记忆功能

文章目录 1、需求2、ChatMemory中消息的存储位置3、实现步骤1、引入依赖2、配置Spring AI3、配置chatmemory4、java层传递conversaionId 4、验证5、完整代码6、参考文档 1、需求 我们知道大型语言模型 &#xff08;LLM&#xff09; 是无状态的&#xff0c;这就意味着他们不会保…...