SpringAMQP - 发布订阅模式

news2024/9/20 6:22:43

目录

发布订阅介绍

FanoutExchange简介

FanoutExchange案例

常见小问题

DirectExchange简介

DirectExchange案例

常见小问题

TopicExchange简介

TopicExchange案例


  • 发布订阅介绍

  • 发布(Publish)、订阅(Subscribe)
  • 发布订阅模式与之前案例的区别就是允许将同一消息发送给多个消费者
  • 实现方式是加入了exchange(交换机)
  • Exchange:交换机
  • 一方面,接收生产者发送的消息
  • 另一方面,知道如何处理消息
  • 例如递交给某个特别队列、递交给所有队列、或是将消息丢弃
  • 到底如何操作,取决于Exchange的类型
  • 常见exchange类型包括:
    • Fanout:广播,将消息交给所有绑定到交换机的队列
    • Direct:路由,把消息交给符合指定routing key 的队列
    • Topic:话题,把消息交给符合routing pattern的队列
  • 注意:exchange负责消息路由,而不是存储,路由失败则消息丢失
  • FanoutExchange简介

  • 在广播模式下,消息发送流程是这样的:
    • 可以有多个队列
    • 每个队列都要绑定到 Exchange(交换机)
    • 生产者发送的消息,只能发送到交换机,交换机来决定要发给哪个队列,生产者无法决定
    • 交换机把消息发送给绑定过的所有队列
    • 订阅队列的消费者都能拿到消息
  • FanoutExchange案例

  • 利用SpringAMQP演示FanoutExchange的使用
  • 实现思路如下:
  • 1.在consumer服务中,利用代码声明队列、交换机,并将两者绑定
  • 2.在consumer服务中,编写两个消费者方法,分别监听fanout.queue1和fanout.queue2
  • 3.在publisher中编写测试方法,向icpc.fanout发送消息
  • 步骤1:在consumer服务声明Exchange、Queue、Binding
  • 步骤2:在consumer服务声明两个消费者
  • 在consumer服务的SpringRabbitListener类中添加两个方法
  • 分别监听fanout.queue1和fanout.queue2

  • 步骤3:在publisher服务发送消息到FanoutExchange
  • 在publisher服务的SpringAmqpTest类中添加测试方法

  • 测试成功

  • 常见小问题

  • 交换机的作用是什么?
    • 接收publisher发送的消息
    • 将消息按照规则路由到与之绑定的队列
    • 不能缓存消息,路由失败,消息丢失
    • FanoutExchange的会将消息路由到每个绑定的队列
  • 声明队列、交换机、绑定关系的Bean是什么?
    • Queue
    • FanoutExchange
    • Binding
  • DirectExchange简介

  • 在Fanout模式中,一条消息,会被所有订阅的队列都消费
  • 但是,在某些场景下,我们希望不同的消息被不同的队列消费
  • 这时就要用到Direct类型的Exchange
  • Direct Exchange 会将接收到的消息根据规则路由到指定的Queue,因此称为路由模式(routes)
  • 在Direct模型下:
    • 队列与交换机的绑定,不能是任意绑定了,而是要指定一个RoutingKey(路由key)
    • 消息的发送方在向 Exchange 发送消息时,也必须指定消息的 RoutingKey
    • Exchange不再把消息交给每一个绑定的队列,而是根据消息的Routing Key进行判断,只有队列的Routingkey与消息的 Routing key 完全一致,才会接收到消息
  • DirectExchange案例

  • 利用SpringAMQP演示DirectExchange的使用
  • 实现思路如下:
  • 1.利用@RabbitListener声明Exchange、Queue、RoutingKey
  • 2.在consumer服务中,编写两个消费者方法,分别监听direct.queue1和direct.queue2
  • 3.在publisher中编写测试方法,向icpc.direct发送消息
  • 步骤1:在consumer服务声明Exchange、Queue
  • 1.在consumer服务中,编写两个消费者方法,分别监听direct.queue1和direct.queue2
  • 2.并利用@RabbitListener声明Exchange、Queue、RoutingKey
  • 步骤2:在publisher服务发送消息到DirectExchange
  • 在publisher服务的SpringAmqpTest类中添加测试方法:

  • 测试成功

  • 常见小问题

  • 描述下Direct交换机与Fanout交换机的差异?
    • Fanout交换机将消息路由给每一个与之绑定的队列
    • Direct交换机根据RoutingKey判断路由给哪个队列
    • 如果多个队列具有相同的RoutingKey,则与Fanout功能类似
  • 基于@RabbitListener注解声明队列和交换机有哪些常见注解?
    • @Queue
    • @Exchange
  • TopicExchange简介

  • Topic类型的Exchange与Direct相比
  • 都是可以根据RoutingKey把消息路由到不同的队列
  • 只不过Topic类型Exchange可以让队列在绑定Routing key 的时候使用通配符
  • #:匹配一个或多个词
  • *:匹配1个词
  • 举例:
  • icpc.#:能够匹配icpc.spu.insert 或者 icpc.spu
  • icpc.*:只能匹配icpc.spu
  • TopicExchange案例

  • 利用SpringAMQP演示TopicExchange的使用
  • 实现思路如下:
  • 1.并利用@RabbitListener声明Exchange、Queue、RoutingKey
  • 2.在consumer服务中,编写两个消费者方法,分别监听topic.queue1和topic.queue2
  • 3.在publisher中编写测试方法,向icpc.topic发送消息
  • 步骤1:在consumer服务声明Exchange、Queue
  • 1.在consumer服务中,编写两个消费者方法,分别监听topic.queue1和topic.queue2
  • 2.并利用@RabbitListener声明Exchange、Queue、RoutingKey
  • 步骤2:在publisher服务发送消息到TopicExchange
  • 在publisher服务的SpringAmqpTest类中添加测试方法:

  • 测试成功

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

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

相关文章

Python【xpath】基础上

xpath解析: 最常用且最便捷高效的一种解析方式。通用性- xpath 解析原理:- 1.实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中环境安装:- cmd 输入 pip install lxml- 如何实例化一个etree 对象- 1.将本地的html&#xff…

从管易云到MySQL通过接口配置打通数据

数据源平台:管易云管易云是金蝶旗下专注提供电商企业管理软件服务的子品牌,先后开发了C-ERP、EC-OMS、EC-WMS、E店管家、BBC、B2B、B2C商城网站建设等产品和服务,涵盖电商业务全流程。写入目标:MySQLmysql是一个关系数据库管理系统(RDBMS&…

SpringBoot的自动配置

参考视频:每一帧都是干货!15分钟的视频花2小时看 一、配置类(Configuration Class) 广义的配置类:被注解Component直接或间接修饰的某个类,即我们常说的Spring组件,其中包括了Configuration类…

类加载器与双亲委派

-----摘自 周志明 《深入理解Java虚拟机》类加载器Java虚拟机设计团队有意把类加载阶段中的“通过一个类的全限定名来获取描述该类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需的类。实现这个动作的代码被称为“类加载器…

R语言多元数据统计分析在生态环境中的实践应用

生态环境领域研究中常常面对众多的不同类型的数据或变量,当要同时分析多个因变量(y)时需要用到多元统计分析(multivariate statistical analysis)。多元统计分析内容丰富,应用广泛,是非常重要和…

管易云与网易互客对接集成发货单=>编辑订单

对接源平台:管易云管易云是金蝶旗下专注提供电商企业管理软件服务的子品牌,先后开发了C-ERP、EC-OMS、EC-WMS、E店管家、BBC、B2B、B2C商城网站建设等产品和服务,涵盖电商业务全流程。对接目标系统:网易互客网易互客是一款智能化的客户关系管理工具。可以…

JavaEE3-Spring创建

目录 1.创建一个普通的Maven项目 2.添加Spring框架支持(spring-context,spring-beans) 3.添加启动类 1.创建一个普通的Maven项目 不选择任何模板,直接点Next。 Name:项目名称; Location:项目保存路径; …

【文件操作】-还在为运行的数据没法保存而烦恼吗??这篇博客让你十分钟之内解决问题,赶紧进来看看!!!

🎇作者:小树苗渴望变成参天大树 💦作者宣言:认真写好每一篇博客 💖作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! ✨文件操作🧨前言💤一…

压力测试和JMeter使用分析

压力测试考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在。 压测都 是为了系统在线上的处理能力和稳定性维持在一个标准范围内,做到心中有数。 使用压力测试,我们有希望找到很多种用其他测试方法更难发现的错误。 有两种错误类型是:…

nginx简单梳理

Nginx总结 这里写目录标题Nginx总结**Nginx** **的简介**1、什么是 **nginx**2、正向代理3、反向代理4、负载均衡**5**、动静分离**Nginx** 的安装**Nginx** **的常用的命令****Nginx** 的配置文件**Nginx** **配置实例**-**反向代理实例** **1****Nginx** **配置实例**-**负载…

408—栈,队列和数组

stl里面的栈中没有清空的函数, 需要自己编写函数清空(while循环返回pop), 更常见的做法是重新定义一个栈,这样的时间复杂度就是O(1)栈的基本操作,出栈入栈判空和求栈的长度,和取栈顶元素以及清空出栈和取栈…

初学者C语言练习题-函数

二、函数 一个C程序有且只有一个主函数,即main函数。 C程序就是执行主函数里的代码,也可以说这个主函数就是C语言中的唯一入口。而main前面的int就是主函数的类型.printf()是格式输出函数,这里就记住它的功能就是在屏幕上输出指定的信息retur…

MATLAB-自动控制原理-控制系统的数学模型

目录 一、利用MATLAB进行数学模型转换 语法: 例(将传递函数写成零极点的形式): 例(将传递函数写成因子式的形式): 二、利用MATLAB求系统传递函数 串联等效: 并联等效&#xf…

uboot启动流程详细分析(基于i.m6ull)

uboot介绍 uboot就是一段引导程序,在加载系统内核之前,完成硬件初始化,内存映射,为后续内核的引导提供一个良好的环境。uboot是bootloader的一种,全称为universal boot loader。 一、uboot的makefile 1.1 makefile整…

ccc-sklearn-16-XGBoost(2)

文章目录XGBoost的其他参数选择弱评估器:参数boosterXGB的目标函数:参数objectiveXGB目标函数的求解参数化决策树ftf_tft​:参数alpha,lambda寻找最佳树结构:求解w和T寻找最佳分枝:结构分数之差让树停止生长…

C++ 函数重载:女友说的话到底是什么意思?

👑专栏内容:C学习笔记⛪个人主页:子夜的星的主页💕座右铭:日拱一卒,功不唐捐 目录一、前言二、函数重载1、函数重载概念2、函数重载的分类Ⅰ、参数类型不同Ⅱ、参数个数不同Ⅲ、参数类型顺序不同3、函数重载…

vs code,platform下载Arduino程序到ESP8266,并传送文件到flash

参考视频:https://www.bilibili.com/video/BV1yR4y1X72D/ 首先要知道 存储空间中有程序的存储地址和文件存储地址,可以对单独一个部分的写入不影响另一部分内容。 vs code 的platformIO插件进行程序和文件的上传 基本创建工程和程序可以参考&#x…

启明欣欣STM32开发板移植FreeRTOS

承接这篇文章,本篇讲述如何把FreeRTOS移植到启明欣欣STM32开发板里,比较简单,网上也有各种教程,本文也是参考其它文章,这里再记录一下。 一 搭建基础工程 启明欣欣STM32开发板上的MCU是STM32F407ZGT6,根据…

智能电视机安装App

每年的12月18日是世界电视机日,电视机诞生于1925年,最初是电子机械式电视机;到了1933年,诞生CRT电视,即黑白电视,它只有黑色或白色,看任何物品都是黑色或者白色。又过了20年,1953年彩…

Java之collection集合、常见数据结构、List和泛型

目录集合概述总结Collection集合的体系特点总结Collection集合常用APICollection集合的遍历方式方式一:迭代器总结方式二:foreach/增强for循环方式三:lambda表达式Collection集合存储自定义类型的对象总结常见数据结构数据结构概述、栈、队列…