1.Rabbitmq学习记录《本质介绍,协议AMQP分析》

Wesley13
• 阅读 637

1.RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现。

  RabbitMQ的优势-:

                  除了Qpid,RabbitMQ是唯一一个实现了AMQP标准的消息服务器;

                  可靠性,RabbitMQ的持久化支持,保证了消息的稳定性;

                  高并发,RabbitMQ使用了Erlang开发语言,Erlang是为电话交换机开发的语言,天生自带高并发光环,和高可用特性;

                  集群部署简单,正是应为Erlang使得RabbitMQ集群部署变的超级简单;

                  社区活跃度高,根据网上资料来看,RabbitMQ也是首选;

2.RabbitMQ系统最核心的组件是Exchange(交换机)和Queue(队列)

   工作机制--> 生产者、消费者和代理

                 生产者:消息的创建者,负责创建和推送数据到消息服务器;

                 消费者:消息的接收方,用于处理数据和确认消息;

                 代理:就是RabbitMQ本身,用于扮演“快递”的角色,本身不生产消息,只是扮演“快递”的角色。

3.AMQP协议

                  AMQP协议是一个二进制协议,拥有一些现代特点:多信道、协商式、异步、安全、跨平台、中立、高效。

                  AMQP通常被划分为三层:

                 模型层定义了一套命令(按功能分类),客户端应用可以利用这些命令来实现它的业务功能。

                 会话层负责将命令从客户端应用传递给服务器,再将服务器的应答传递给客户端应用,会话层为这个传递过程提供可靠性、同步机制和错误处理。

                 传输层提供帧处理、信道复用、错误检测和数据表示。

                 实现者可以将传输层替换成任意传输协议,只要不改变AMQP协议中与客户端应用程序相关的功能。实现者还可以使用其他高层协议中的会话层。

4.AMQP功能

                存储转发(多个消息发送者,单个消息接收者)。

                分布式事务(多个消息发送者,多个消息接收者)。

                发布订阅(多个消息发送者,多个消息接收者)。

               基于内容的路由(多个消息发送者,多个消息接收者)。

               文件传输队列(多个消息发送者,多个消息接收者)。

               点对点连接(单个消息发送者,单个消息接收者)。

5.AMQP术语

              AMQP模型(AMQP Model):一个由关键实体和语义表示的逻辑框架,遵从AMQP规范的服务器必须提供这些实体和语义。为了实现本规范中定义的语义,客户端可以发送命令来控制AMQP服务器。

              连接(Connection):一个网络连接,比如TCP/IP套接字连接。

              会话(Session):端点之间的命名对话。在一个会话上下文中,保证“恰好传递一次”。

              信道(Channel):多路复用连接中的一条独立的双向数据流通道。为会话提供物理传输介质。

              客户端(Client):AMQP连接或者会话的发起者。AMQP是非对称的,客户端生产和消费消息,服务器存储和路由这些消息。

              服务器(Server):接受客户端连接,实现AMQP消息队列和路由功能的进程。也称为“消息代理”。

              端点(Peer):AMQP对话的任意一方。一个AMQP连接包括两个端点(一个是客户端,一个是服务器)。

              搭档(Partner):当描述两个端点之间的交互过程时,使用术语“搭档”来表示“另一个”端点的简记法。比如我们定义端点A和端点B,当它们进行通信时,端点B是端点A的搭档,端点A是端点B的搭档。

             片段集(Assembly):段的有序集合,形成一个逻辑工作单元。

             段(Segment):帧的有序集合,形成片段集中一个完整子单元。

             帧(Frame):AMQP传输的一个原子单元。一个帧是一个段中的任意分片。

             控制(Control):单向指令,AMQP规范假设这些指令的传输是不可靠的。

             命令(Command):需要确认的指令,AMQP规范规定这些指令的传输是可靠的。

             异常(Exception):在执行一个或者多个命令时可能发生的错误状态。

             类(Class):一批用来描述某种特定功能的AMQP命令或者控制。

             消息头(Header):描述消息数据属性的一种特殊段。

             消息体(Body):包含应用程序数据的一种特殊段。消息体段对于服务器来说完全不透明——服务器不能查看或者修改消息体。

             消息内容(Content):包含在消息体段中的的消息数据。

             交换器(Exchange):服务器中的实体,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。

             交换器类型(Exchange Type):基于不同路由语义的交换器类。

             消息队列(Message Queue):一个命名实体,用来保存消息直到发送给消费者。

             绑定器(Binding):消息队列和交换器之间的关联。

             绑定器关键字(Binding Key):绑定的名称。一些交换器类型可能使用这个名称作为定义绑定器路由行为的模式。

             路由关键字(Routing Key):一个消息头,交换器可以用这个消息头决定如何路由某条消息。

            持久存储(Durable):一种服务器资源,当服务器重启时,保存的消息数据不会丢失。

            临时存储(Transient):一种服务器资源,当服务器重启时,保存的消息数据会丢失。

            持久化(Persistent):服务器将消息保存在可靠磁盘存储中,当服务器重启时,消息不会丢失。

            非持久化(Non-Persistent):服务器将消息保存在内存中,当服务器重启时,消息可能丢失。

            消费者(Consumer):一个从消息队列中请求消息的客户端应用程序。

            生产者(Producer):一个向交换器发布消息的客户端应用程序。

            虚拟主机(Virtual Host):一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。客户端应用程序在登录到服务器之后,可以选择一个虚拟主机。

6.示意图:

1.Rabbitmq学习记录《本质介绍,协议AMQP分析》

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
RabbitMQ学习总结(7)——Spring整合RabbitMQ实例
1.RabbitMQ简介RabbitMQ是流行的开源消息队列系统,用erlang语言开发。RabbitMQ是AMQP(高级消息队列协议)的标准实现。 官网:http://www.rabbitmq.com/(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.rabbi
Stella981 Stella981
2年前
MQ对比之RabbitMQ & Redis
消息队列选择:RabbitMQ&RedisRabbitMQRabbitMQ是一个由erlang开发的AMQP(AdvancedMessageQueue)的开源实现的产品,RabbitMQ是一个消息代理,从“生产者”接收消息并传递消息至“消费者”,期间可根据规则路由、缓存、持久化消息。“生产者”也即message
Stella981 Stella981
2年前
RabbitMQ 消息中间件搭建详解
1.RabbitMQ简介消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信。RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这