AMQP协议和rabbitmq理解_blueheart丶的博客-程序员资料_amqp协议是如何定义一个mq的

一、AMQP协议的简单介绍

应用层协议(application layer protocol)定义了运行在不同端系统上的应用程序进程如何相互传递报文

应用层协议的定义

   

(1)交换的报文类型,如请求报文和响应报文;
(2)各种报文类型的语法,如报文中的各个字段公共详细描述;
(3)字段的语义,即包含在字段中信息的含义;
(4)进程何时、如何发送报文及对报文进行响应。
有些应用层协议是由RFC文档定义的,因此它们位于公共领域。例如,web的应用层的协议HTTP(超文本传输协议,RFC 2616)就作为一个RFC供大家使用。如果浏览器开发者遵从HTTP RFC规则,所开发出的浏览器就能访问任何遵从该文档标准的web,服务器并获取相应的web页面。还有很多别的应用层协议是专用的.不能随意应用于公共领域。例如,很多现有的P2P文件共享系统使用的是专用应用层协议。
AMQP是 一个提供统一消息服务的应用层标准高级 消息 队列协议,基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。
二、rabbit message queue的基本概念
图片描述
  • Broker: 接收和分发消息的应用,RabbitMQ Server就是Message Broker。
  • Virtual host: 出于多租户和安全因素设计的,把AMQP的基本组件划分到一个虚拟的分组中,类似于网络中的namespace概念。当多个不同的用户使用同一个RabbitMQ server提供的服务时,可以划分出多个vhost,每个用户在自己的vhost创建exchange/queue等
  • Connection: publisher/consumer和broker之间的TCP连接。断开连接的操作只会在client端进行,Broker不会断开连接,除非出现网络故障或broker服务出现问题。
  • Channel: 如果每一次访问RabbitMQ都建立一个Connection,在消息量大的时候建立TCP Connection的开销将是巨大的,效率也较低。Channel是在connection内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的channel进行通讯,AMQP method包含了channel id帮助客户端和message broker识别channel,所以channel之间是完全隔离的。Channel作为轻量级的Connection极大减少了操作系统建立TCP connection的开销。
  • Exchange: message到达broker的第一站,根据分发规则,匹配查询表中的routing key,分发消息到queue中去。常用的类型有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast)。
  • Queue: 消息最终被送到这里等待consumer取走。一个message可以被同时拷贝到多个queue中。
  • Binding: exchange和queue之间的虚拟连接,binding中可以包含routing key。Binding信息被保存到exchange中的查询表中,用于message的分发依据。
图片描述 
生产者发送消息到broker server(RabbitMQ)。在Broker内部,用户创建Exchange/Queue,通过Binding规则将两者联系在一起。Exchange分发消息,根据类型/binding的不同分发策略有区别。消息最后来到Queue中,等待消费者取走。
rabbit常见的几种方式:http://www.rabbitmq.com/getstarted.html




版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ycxzz/article/details/78254295

智能推荐

程序员都该阅读的书_dong_cc的博客-程序员资料

国外知名网站stackoverflow上有一个问题调查: 哪本书是对程序员最有影响、每个程序员都该阅读的书?,这个调查已历时两年,目前为止吸引了153,432人访问,读者共推荐出了478本书(还在增加),其中最火的一本书《Code Complete》被顶了1306次。如果你是个程序员,你一定有兴趣看看这些书里你都看过几本,如果你一本没看过的话,我也不好说什么,也许你是个天才,但我相信大多数人都

"在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke"_浊酒入清梦的博客-程序员资料_在创建窗口之前

参考自:http://blog.csdn.net/banket004/article/details/8722075“在Window窗体程序开发的时候,如果使用多线程编程,在子线程中访问主线程窗体内的控件,就需要使用控件的Control.Invoke方法或者BeginInvoke方法。但是有时候因为Window执行速度太快,尤其是你写代码的时候在InitializeComponent();完成之前起

【C++】基于opencv的数字图像处理系统(附源码)_打代码能当饭吃?的博客-程序员资料_基于opencv的图像处理系统

  这是基于opencv以及调用某位大佬cvui的库进行创作的图形化界面数字图像处理系统,该系统能对图像进行五种增强操作处理,分别是灰度图像log变换增强,彩色图像log变换增强,拉普拉斯算子增强,图像的反转以及图像的饱和度增强。完整代码在页尾,自取。话不多说,上截图源码地址:github(image-processing-System)温馨提示:使用此代码前请先下载cvui库:cvui...

OpenCV-数字图像处理基础_六号666的博客-程序员资料_cv2数字图像处理

@数字图像处理基础#图像获取、显示以及相关信息获取客观世界物体反射或透射光的分布,是客观世界的反映人类视觉系统对图的响应,是人的大脑的印象或认识,是人的感觉的一种数字图像由二维的元素组成,每个元素包含一个坐标以及响应值数字图像处理是针对特定任务,提升图像的可理解性起源:研究员 Gary Bradski在为英特尔时注意到MIT 的媒体实验室,拥有非常完备的内部公开的计算机视觉开发接口——代码从一个学生传到另一个学生手中,并且会给每个新来的学生一个有价值的由他们自己开发的视觉应用方案。目标:为高级的

OpenCV数字图像处理实战二:模板匹配(C++)_opencv模板匹配_qq_43784519的博客-程序员资料

这类方法将模版对其均值的相对值与图像对其均值的相关值进行匹配,1表示完美匹配,-1表示匹配很差,0表示没有任何相关性(随机序列)。(2)在待检测图像从左到右,从上到下计算模板图像与重叠子图像的匹配度,匹配度越高,两者相同的可能性越大。这类方法采用模板和图像间的乘法操作,所以较大的数表示匹配程度较高,0标识最坏的匹配效果。(1)首先需要一个模板图像 T(子图像)和一个待检测的图像(源图像 S)这类方法利用平方差来进行匹配,最好匹配为0。匹配越差,匹配值越大。

随便推点

Linux 伙伴算法简介_weixin_33797791的博客-程序员资料

    本文将简要介绍一下Linux内核中的伙伴分配算法。 Technorati 标签: 伙伴算法     算法作用      它要解决的问题是频繁地请求和释放不同大小的一组连续页框,必然导致在已分配页框的块内分散了许多小块的空闲页面,由此带来的问题是,即使有足够的空闲页框可以满足请求,但要分配一个大块的连续页框可能无法满足请求。      伙伴算法(Buddy system)把所有的空闲...

视频领域中各种分辨率简称和比例_optics_ts的博客-程序员资料_视频3比1分辨率是多少

GUXGA      3200×2400      4:3QSXGA+    2800×2100      4:3       QSXGA      2560×2048      5:4  WQXGA     2560×1600      16:10  QXGA        2048×1536       4:3  WUXGA     1920×120

mysql将数据导入mgr_MGR 导入失败_着相鱼的博客-程序员资料

MySQL version:8.0.18-commercial MySQL Enterprise Server - CommercialHA: MGR问题:导入sql文件,大小371MB导入数据过程中[Err] 3100 - Error on observer while running replication hook 'before_commit'.报错日志:2020-06-27T10:24:..._1671465600

一些可以用来参考的代码_MrTallery的博客-程序员资料_参考代码

define和typedefine#include <iostream> #define INTPTR1 int * typedef int * INTPTR2; using namespace std; int main(){ INTPTR1 p1, p2; // p1: int *; p2: int INTPTR2 p3, p4; // p3: int *; p4: int * int var = 1; const INTPTR1 p5 = &var; /

redis 常用命令集合_Reborn_Chang的博客-程序员资料

欢迎关注微信公众号:程序员小圈圈原文首发于:www.zhangruibin.com 本文出自于:RebornChang的博客转载请标明出处^_^redis 常用命令集合redis是什么1.基于内存的key-value数据库2.基于c语言编写的,可以支持多种语言的api //set每秒11万次,取get 81000次3.支持数据持久化4.value可以是string,hash, list, set, sorted setredis使用场景去最新n个数据的操作排行榜,取top n个数..

android的横竖屏控制失效问题_AnnisLee的博客-程序员资料_android setrequestedorientation 无效

场景现在做的项目是同一个包,在手机上做查询业务,平板办理业务,所以就需要在手机上面是竖屏,平板上面时横屏于是在基类Activity中就有了这段代码:@Overrideprotected void onResume() { super.onResume(); if (DisplayUtil.isPad(mContext)) { setReque...

推荐文章

热门文章

相关标签