首页 > 其他分享 >SpringAMQP(十三)

SpringAMQP(十三)

时间:2024-01-15 10:26:34浏览次数:27  
标签:SpringAMQP 十三 Queue 队列 交换机 消息 路由

什么是SpringAMQP

  • SpringAMQP的官方地址https://spring.io/projects/spring-amqp
  • AMQP(Advanced Message Queuing Protocol):是用于在应用程序或之间传递业务消息的开放标准。该协议与语言和平台无关,更符合微服务中独立性的要求。
  • Spring AMQP:Spring AMQP是基于AMQP协议定义的一套API规范,提供了模板来发送和接收消息。包含两部分,其中spring-amqp是基础抽象,spring-rabbit是底层的默认实现。

1 Basic Queue 简单队列模型

SpringAMQP如何发送消息?

  • 引入amqp的starter依赖;
  • 在发送端服务中配置RabbitMQ地址;
  • 利用RabbitTemplate的convertAndSend方法

SpringAMQP如何接收消息?

  • 引入amqp的starter依赖;
  • 配置RabbitMQ地址;
  • 定义类,添加@Component注解;
  • 类中声明方法,添加@RabbitListener注解,方法参数就时消息
  • 注意:消息一旦消费就会从队列中删除,RabbitMQ没有消息回溯功能。

2 Work Queue 工作队列模型

 Work模型的使用:

  • 多个消费者绑定到一个队列,同一条消息只会被一个消费者处理;
  • 通过设置prefetch来控制消费者预取的消息数量。

3 发布、订阅模型-Fanout

 注:exchange(交换机)负责消息路由,而不是存储,路由失败则消息丢失。

Fanout Exchange会将接收到的消息路由到每一个跟其绑定的queue。

交换机的作用:

  • 接收publisher发送的消息;
  • 将消息按照规则路由到与之绑定的队列;
  • 不能缓存消息,路由失败,消息丢失;
  • FanoutExchange的会将消息路由到每个绑定的队列。

声明队列、交换机、绑定关系的Bean是什么?

  • Queue
  • FanoutExchange
  • Binding

4 发布、订阅模型-Direct

 Direct Exchange 会将接收到的消息根据规则路由到指定的Queue,因此称为路由模式(routes)

  • 每一个Queue都与Exchange设置一个BindingKey;
  • 发布者发送消息时,指定消息的RoutingKey;
  • Exchange将消息路由到BindingKey与消息RoutingKey一致的队列;

Direct 交换机 与 Fanout交换机的差异

  • Fanout交换机将消息路由给每一个与之绑定的队列;
  • Direct交换机根据RoutingKey判断路由给哪个队列;
  • 如果多个队列具有相同的RoutingKey,则与Fanout功能相似。

基于@RabbitListener注解声明队列和交换机有哪些常见注解?

  • @Queue
  • @Exchange

5 发布、订阅模型-Topic

 TopicExchange 与 DirectExchange类似,区别在于routingKey必须是多个单词的列表,并且以.分割。

Queue 与 Exchange指定BindingKey时可以使用通配符:

  • #:代表0个或多个单词;
  • *:代指一个单词

6 消息转换器

SpringAMQP中消息的序列化和反序列化是怎么实现的?

  • 利用MessageConverter实现的,默认是JDK的序列化;
  • 注意发送方与接收方必须使用相同的MessageConverter。

 

标签:SpringAMQP,十三,Queue,队列,交换机,消息,路由
From: https://www.cnblogs.com/daytoy105/p/17960406

相关文章

  • 大话 JavaScript(Speaking JavaScript):第三十一章到第三十三章
    第三十一章:模块系统和包管理器原文:31.ModuleSystemsandPackageManagers译者:飞龙协议:CCBY-NC-SA4.0JavaScript没有内置模块支持,但社区已经创建了令人印象深刻的解决方法。要管理模块,可以使用所谓的包管理器,它们处理发现、安装、依赖管理等。模块系统JavaScript模......
  • Three.js——十三、自定义大小画布、UI交互按钮以及3D场景交互、渲染画布为文件(图片)
    画布全屏以及自定义大小画布<!--canvas元素默认是行内块元素--><divclass="model"style="background-color:#ff0000;"width="300"height="180"></div>画布随窗口变化//画布跟随窗口变化window.onresize=function(){constwidth......
  • Vue2入门之超详细教程十三-key的作用与原理
    Vue2入门之超详细教程十三-key的作用与原理1、简介React、Vue中的key有什么作用?1.虚拟DOM中key的作用:​ key是虚拟DOM对象的标识,当状态中的数据发生变化时,Vue会根据[新数据]生成[新的虚拟DOM],随后Vue进行[新虚拟DOM]的差异比较,比较规则如下:​ (1)旧虚拟DOM中找到了与新虚拟DO......
  • 三十三、配置 BGP 备份 RR 实验组网
    1、实验拓扑图2、实验目的配置R1、R2、R3和R4配置集群,R1与R2相互备份,配置相同的“reflectorcluster-id1.1.1.1”,观察结果3、实验具体配置R1[R1]displaycurrent-configuration [V200R003C00]#sysnameR1#snmp-agentlocal-engineid800007DB03000000000000snmp-agent......
  • 2023-2024-1 20231319《计算机基础与程序设计》第十三周学习总结
    2023-2024-120231300《计算机基础与程序设计》第十三周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第x周作业这个作业的目标《C语言程序设计》第12章教材学习内容总结从基本......
  • 2023-2024-1 20231413 《计算机基础与程序设计》第十三周学习总结
    2023-2024-120231413《计算机基础与程序设计》第十三周学习总结1.作业信息班级:2023-2024-1-计算机基础与程序设计作业要求:2023-2024-1《计算机基础与程序设计》教学进程目标:自学教材:《C语言程序设计》第13章并完成云班课测试作业正文:https://www.cnblogs.com/Kaifazheju......
  • 2023-2024-1 20231415 《计算机基础与程序设计》第十三周学习总结
    这个作业属于哪个班级https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP/这二个左右要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK13作业目标《C语言程序设计》第12章并完成云班课测试作业正文https://i.cnblogs.com/posts/edit教材内......
  • 2023-2024-1 20231421 《计算机程序与设计》第十三周学习总结
    作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK13作业目标:自学《c语言程序设计》第十二章作业正文:教材学习内容总结《c语言程序设计》结构体(struct):结构体是由一系列具有相同类型或不同类型的数据构成的数据集合1。结构体可以存储不同类型的数据,如int、float、......
  • 2023-2024-1 20231425《计算机基础与程序设计》第十三周学习总结
    2023-2024-120231425《计算机基础与程序设计》第十三周学习总结2023-2024-120231425《计算机基础与程序设计》第十三周学习总结作业信息这个作业属于哪个课程2023-2024-1《计算机基础与程序设计》这个作业要求在哪里2023-2024-1计算机基础与程序设计第十周......
  • 2023-2024-1 学号20231315第十三周学习总结
    学期:2023-2024-1学号:20231315《计算机基础与程序设计》第十三周学习总结作业信息这个作业属于哪个课程2023-2024-1《计算机基础与程序设计》这个作业要求在哪里2023-2024-1《计算机基础与程序设计》这个作业的目标学习《C语言程序设计》第12章作业正文http......