首页 > 其他分享 >高级消息队列协议AMQP

高级消息队列协议AMQP

时间:2024-03-02 23:01:02浏览次数:26  
标签:AMQP Exchange 队列 高级 Queue 交换机 消息

一、什么AMQP

  AMQP(Advanced Message Queuing Protocol高级消息队列协议)是一种链接协议,最早用于解决金融领域不同平台之间消息传递而在2003年被提出的,用于进程之间传递异步消息。它描述了通过网络传输的字节流的数据格式。

  AMQ协议模型包含如下几个概念:

  • Producer(生产者):向Exchange发布消息的客户端应用程序。
  • Consumer(消费者):从Message Queue中请求消息的客户端应用程序。
  • Exchange(交换机):接收Producer发布的消息,并通过设定的路由规则将消息路由给绑定的Queue。
  • Binding(绑定器):就是把Exchange和Queue按照路由规则绑定。
  • Broker(消息队列服务器实体\中间件):Exchange和Queue所在服务器。
  • Vhost(虚拟主机):用于用户的权限分离,类似于命名空间,一个Broker里可以开设多个vhost,一个vhost里可以创建多个交换机。
  • Channel(信道):多路复用连接中的一条独立的双向数据流通道,为会话提供物理传输介质,在客户端的每个连接里,可建立多个通道。
  • Queue(消息队列):消息的容器,用来保存消息直到被Consumer接收,每个消息都会被投入到一个或多个队列中。
  • Routing Key(路由键):是生产者在发送消息时指定的关键字;它是消息的属性,它决定了消息将被传递给哪些队列。
  • Binding Key(绑定键):是消费者在绑定队列时指定的关键字;它是队列的属性,用于将Exchange和队列绑定起来。
  • Message(消息):本质上就是服务器与客户端传输的数据,由元信息和消息体组成,数据格式遵循AMQP协议。

   Exchange交换机的四种类型:

  • Direct(直连):将消息推送到binding key与该消息的routing key相同的队列。
  • Fanout(扇形)::一种广播方式,该交换机会把接收到的消息全部发送给绑定在自己身上的队列。使用该模式不需要routingKey。
  • Topic(主题):将Routing Key与Binding Key进行匹配,Routing Key和Binding Key由多个单词组成,这些单词使用.分隔,使用*和#进行模糊匹配,*匹配一个单词,#匹配0个或多个单词。如果匹配成功,将消息发送到对应的Queue中。如a.error、b.error都和*.error匹配。
  • Headers(首部):不依赖于Routing Key与Binding Key的匹配规则来路由消息,而是根据消息内容中的headers属性进行匹配。在绑定Exchange和Queue时指定一组键值对,当消息发送到Exchange时,会取得消息的headers,也是键值对的形式,将两组键值对进行匹配,如果完全匹配,则将消息发送到对应的Queue中。

二、AMQP协议的Message消息格式

  Message消息包含元数据和消息体两部分, 消息体是消息实际传递的数据,元数据用于描述消息的一些特征信息。常用属性如下:

  • Content type: 内容类型。
  • Content encoding:内容编码。
  • Routing key :路由键 。
  • Delivery mode: 消息持久化或非持久化。
  • Message priority :消息优先权。
  • Message publishing timestamp: 消息发布的时间戳。
  • Expiration period: 消息有效期。
  • Publisher application id:发布应用Id。

 三、交换机Exchange的常用属性

  • Name:交换机名称。
  • Type:交换机类型。
  • Durability:是否持久化,即当代理重启时是否保留该交换机,即交换机也可以是持久化和临时的。
  • Auto-delete:是否自动删除,即当交换机上没有绑定队列时是否自动删除该交换机。
  • Arguments:可选参数,插件和代理特定特性使用。

 四、队列Queue的常用属性  

  • Name:队列名称。
  • Durable:是否持久化,消息代理重启后,是否保留队列。
  • Exclusive:只被一个连接(connection)使用,而且当连接关闭后队列即被删除。
  • Auto-delete:当最后一个消费者退订后即被删除。
  • Arguments:一些消息代理用他来完成类似与 TTL 的某些额外功能。

 五、AMQP的消息机制

  消费者在处理消息时难免会遇到处理失败的情况,此时消息是否需要保留在队列中是AMQP中间件需要考虑的问题。AMQP提供了两种消息确认模式和拒绝消息模式来处理消费失败时消息的去处:

  • 自动确认模式:当消息中间件将消息发送给消费者后立即删除。
  • 显式确认模式:待消费者发送一个确认回执后再删除消息。
  • 拒绝消息:当一个消费者接收到某条消息后,处理过程有可能成功,有可能失败。当失败时消费者可以向消息中间件发送一个"拒绝消息"告知中间件如何处理这条消息——销毁它或者重新放入队列。

 

标签:AMQP,Exchange,队列,高级,Queue,交换机,消息
From: https://www.cnblogs.com/zqhIndex/p/18049060

相关文章

  • 高级搜索算法学习笔记
    0.前言如有错误,欢迎各位大佬指出。前置芝士:深度优先搜索广度优先搜索1.何为高级搜索?在通常情况下,普通的深搜往往会超时,即使剪枝也无动于衷。对于广搜,我们一旦超时也很难进行优化。而这时,我们就需要对搜索的形态进行改变,将深搜和广搜进行升级,变形成为各种效率更高的高......
  • 代码随想录算法训练营第三十四天| ● 860.柠檬水找零 ● 406.根据身高重建队列 ●
    柠檬水找零 题目链接:860.柠檬水找零-力扣(LeetCode)思路:注意对于20元的情况,有两种找零方式,            头一次见到这种情况,随便加一个标准输出才能通过的样例。classSolution{public:boollemonadeChange(vector<int>&bills){in......
  • 代码随想录 第十天 | ● 理论基础 ● 232.用栈实现队列 ● 225. 用队列实现栈
    队列的方法:添加元素:add(Ee):将指定的元素添加到队列的尾部,如果队列已满则抛出异常。offer(Ee):将指定的元素添加到队列的尾部,如果队列已满则返回false。移除元素:remove():移除并返回队列的头部元素,如果队列为空则抛出异常。poll():移除并返回队列的头部元素,如果......
  • Pytorch中张量的高级选择操作
    在某些情况下,我们需要用Pytorch做一些高级的索引/选择,所以在这篇文章中,我们将介绍这类任务的三种最常见的方法:torch.index_select,torch.gatherandtorch.take我们首先从一个2D示例开始,并将选择结果可视化,然后延申到3D和更复杂场景。最后以表格的形式总结了这些函数及其区别。......
  • 2024-03-01-Linux高级网络编程(6-原始套接字)
    6.原始套接字6.1TCPUDP回顾数据报式套接字(SOCK_DGRAM)无连接的socket,针对无连接的UDP服务可通过邮件模型来进行对比流式套接字(SOCK_STREAM)面向连接的socket,针对面向连接的TCP服务可通过电话模型来进行对比这两类套接字似乎涵盖了TCP/IP应用的全部TCP......
  • 代码随想录算法训练营day10 | leetcode 232. 用栈实现队列、225. 用队列实现栈
    目录题目链接:232.用栈实现队列-简单题目链接:225.用队列实现栈-简单题目链接:232.用栈实现队列-简单题目描述:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现MyQueue类:voidpush(intx)将元素x推到队列的末尾intp......
  • faster-fifo:C++实现的python多进程通信队列 —— 强化学习ppo算法库sample-factory的C
    项目地址:https://github.com/alex-petrenko/faster-fifo需要注意,该项目给出了两种安装方法,一种是pip从pypi官网安装,一种是从GitHub上的源码安装;经过测试发现这个项目维护程度较差,因此pypi官网上的项目比较落后,因此不建议使用pypi上的安装,而是进行源码编译安装。给出源码编......
  • 2024-03-01-Lniux高级网络编程(5-网络通信过程)
    5.网络通信过程5.1网络通信概述​通过对TCP、UDP的编程学习,能够完成对实际项目需求中网络功能的开发,为了提高程序的稳定性以及效率等等,通常会使用多线程、多进程开发;根据功能需求的不同,可以利用C/S、B/S模式进行开发。作为嵌入式工程师,需要时整个网络通信的过程进......
  • 2024-02-29-Linux高级网络编程(4-TCP编程)
    4.TCP编程4.1TCP介绍面向连接的流式协议;可靠、出错重传、且每收到一个数据都要给出相应的确认通信之前需要建立链接服务器被动链接,客户端是主动链接TCP编程流程服务器:1.创建套接字socket()2.将套接字与服务器网络信息结构体绑定bind()3.将套接字设置为监听状......
  • 软考高级信息系统项目管理师教程(第4版)PDF下载
    《信息系统项目管理师教程》(第4版)是由全国计算机专业技术资格考试办公室组织编写的考试用书,根据2022年审定通过的《信息系统项目管理师考试大纲》编写,对信息系统项目管理师岗位所要求的主要知识及应用技术进行了阐述。《信息系统项目管理师教程》(第4版)主要内容包括:信息化发展、信......