AMQP 0-9-1学习笔记

AMQP(Advanced Message Queuing Protocol)高级消息队列协议:是一个进程间传递异步消息的网络协议

2.
AMQP的基本模型: Publisher(发布者) → Exchange(交换机) → Queue(队列) → Consumer(消费者)
​
3.
工作原理:publisher public Message to Exchange. Exchange deliver the message to Queue by Route.Consumer consum the message(Return result or no return).
4.深入理解
4.1 发布者、交换机、队列、消费者都可以有多个。因为AMQP是一个网络协议协议,所以这个过程中的发布者,消费者,消息代理可以分别存在于不同的设备上。负载均衡处理
4.2 发布者发货消息时可以给消息指定个钟消息属性(Message Meta-data)。有些属性有可能会被消息代理(Brokers)使用,然而其他的属性则是完全不透明的,他们只能被接受消息的应用所使用。
4.3 从安全角度考虑,网络是不可靠的,又或是消费者在处理消息的过程中意外挂掉,这样没有处理成功的消息就会丢失。基于此原因,AMQP模块包含了一个消息确认(Message Acknowledgements)机制:当一个消息从队列中投递给消费者后,不会立即从队列中删除,知道它收到来自消费者的确认回执(Acknowledgement)后,才完全从队列中删除。
5.Exchange(交换机)
AMQP 0-9-1提供了4种默认的交换机
1.Direct Exchange((Empty string) and amq.direct) Depend on Routing key
2.Fanout exchange(amq.fanout) Delivery the message to all it's was binded Queues
3.Topic exchange(amq.topic) depend on Routing key and pattern
 
    {

    When a queue is bound with "#" (hash) binding key - it will receive all the messages, regardless of the routing key - like in fanout exchange.

    When special characters "*" (star) and "#" (hash) aren't used in bindings, the topic exchange will behave just like a direct one.

 
 }
4.Headers exchange(amq.match(and amq.headers in RabbitMQ)) depend on mutiple attributes
除了这些交换机类型外,交换机还有很多的属性,比较重要的如下
1.Name(名称)
2.Durability(Exchange survive broker restart)
3.Auto-delete(exchange is deleted when last queue is unbound from it)
4.Arguments(optional,used by plugins and broker-specific features)
6.Queue(消息队列)
所有的消息都存储在消息队列里面(包括:1.待消费的消息 2.正在消费的消息),一般的消息队列都只要声明了,就不会修改队列的属性,如果修改了,必须要删除旧的消息队列,然后重新生成新的。
6.1消息队列的特性:
6.1.1 Name 如果声明队列的时候不指定队列名称,代理会为队列声明一个唯一的队列名称。
6.1.2 Durabel(the queue will survive a broker restart) 队列的持久性不会使路由到该队列的消息持久。如果代理被删除然后重新启动,则在代理重启期间将重新声明持久队列,但是,只会恢复持久性消息。
6.1.3 Exclusive(Used by only one connection and the queue will be deleted when that connection closes)
6.1.4 Auto-delete(queue that has had at least one consumer is deleted when last consumer unsubscribes)
6.1.5 Arguments(optional;used by plugins and broker-specific features such as message TTL.queue length limit,etc)
7.消费消息(Consumers)
Comsume message are two way in AMQP 0-9-1 (1) Have messages delivered to them("push API") (2) Fetch messages as needed("pull API")
8.Message Acknowledgements
因为网络和程序的一个失败,所以一些程序需要有一个"消息确认"。"消息确认"机制可以帮助我们创建一个更加稳定,保障的软件系统
消息确认大体分为两种:(1) 消息接受确认 (2) 消息接受并且消费确认
9.Connections(连接)
AMPQ 0-9-1 使用TCP传输。连接使用身份验证,可以使用TLS进行保护。当应用程序不再需要连接服务器时,关闭它的AMQP 0-9-1连接,而不是关闭TCL连接。
10.Vitual Host(虚拟主机)
为了使单个代理可以托管多个隔离的“环境”(用户组,交换,队列等),AMQP包含虚拟主机(虚拟主机)的概念。它们类似于许多流行的Web服务器使用的虚拟主机,并提供AMQP实体所在的完全隔离的环境。AMQP客户端指定在AMQP连接协商期间要使用的vhost。

AMPQ 0-9-1学习笔记的更多相关文章

  1. MySQL4.0命令操作学习笔记

    声明:下列内容并非原创,仅仅是最近学习笔记整理. -------------------------------------- 进入mysql安装路径bin目录下: 1.开启服务 winmysqlad ...

  2. Android 6.0 权限知识学习笔记

    最近在项目上因为6.0运行时权限吃了亏,发现之前对运行时权限的理解不足,决定回炉重造,重新学习一下Android Permission. 进入正题: Android权限 在Android系统中,权限分 ...

  3. Cocos Studio1.5.0.1开发学习笔记(一)

    听说Cocos Studio很久了,主要是因为骨骼动画.目前看来Cocos2d-x播放动画的方式只有2种: 第一种:是播放序列帧动画,即将动画的每一帧都加载进缓存里,需要播放时再使用Animation ...

  4. 《C# 6.0 本质论》 - 学习笔记

    <C# 6.0 本质论> ========== ========== ==========[作者] (美) Mark Michaelis (美) Eric Lippert[译者] (中) ...

  5. 环境配置与JBoss安装-EJB3.0入门经典学习笔记(1)

    目录 1. JDK的安装 2. JBoss的安装 3. JBoss安装目录说明 1. JDK的安装 1) 下载JDK 下载地址:http://www.oracle.com/technetwork/ja ...

  6. Python数据分析与展示第0&1周学习笔记(北理工 嵩天)

    一前奏 1..Python语言开发工具选择 IDLE:自带默认常用入门级 PyCharm:简单.集成度高 Anaconda:awesome IDE较为简单,不做详细记录. 二.表示 1.numpy库入 ...

  7. 0. WP8.1学习笔记

    应用程序生命周期: 运行: 在程序NotRunning状态下点击图标,应用将处于Running状态,这会触发一个Actived事件 挂起: 在程序Running状态下, 点击返回键或win键会触发一个 ...

  8. JBoss部属和EJB调用-EJB3.0入门经典学习笔记(2)

    目录 1. 在JBoss中部属  2. 在Tomcat中调用EJB  3. 在JBoss中调用EJB  1. 在JBoss中部属 1) JBoss的配置目录 路径D:\Java\jboss6\serv ...

  9. vue 2.0源码学习笔记—new Vue ( Vue 初始化过程 )

    new Vue(Vue 初始化) 一个vue实例化到底经历了什么?已下是博主自己的总结,不正确的地方请指出,谢谢~ 一.简述 从使用角度来看,挂载的顺序如下 1. $slots 2. $scopedS ...

  10. Linux命令学习笔记目录

    Linux命令学习笔记目录 最近正在使用,linux,顺便将用到的命令整理了一下. 一. 文件目录操作命令: 0.linux命令学习笔记(0):man 命令 1.linux命令学习笔记(1):ls命令 ...

随机推荐

  1. Thrift辅助类,用于简化Thrift编程

    CThriftServerHelper用于服务端,CThriftClientHelper用于客户端. IDL定义: service PackageManagerService { } 服务端使用示例: ...

  2. Animation(动画效果)

    Ctrl+6打开Animation窗口.选择物体,点击录制,保存录制文件后即为给该物体添加了动画效果. Animation可以修改某时间点的物体位置.大小.材质球上的所有属性.碰撞器等等. 可以通过修 ...

  3. 编写高质量代码改善C#程序的157个建议——建议85:Task中的异常处理

    建议85:Task中的异常处理 在任何时候,异常处理都是非常重要的一个环节.多线程与并行编程中尤其是这样.如果不处理这些后台任务中的异常,应用程序将会莫名其妙的退出.处理那些不是主线程(如果是窗体程序 ...

  4. WSAStartup函数

    函数WSAStartup 一.WSAStartup函数                 int WSAStartup                       (                   ...

  5. 【微服务架构】SpringCloud之Eureka(注册中心集群篇)(三)

    上一篇讲解了spring注册中心(eureka),但是存在一个单点故障的问题,一个注册中心远远无法满足实际的生产环境,那么我们需要多个注册中心进行集群,达到真正的高可用.今天我们实战来搭建一个Eure ...

  6. C++-结构体,联合体,枚举,的区别

    结构体: struct  NUM { int number; }a; 结构体是声明只是一个模型,没有分配内存空间.当进行定义结构体变量后才分配内存空间 联合体: union  data { int a ...

  7. delphi 中封装的VCl窗体Tab键响应问题

    在DLL中的子窗体不会响应Tab按键的,这个时候就需要手动去指定Tab键的操作,但是前提是主窗体要向这个窗体发送一个消息,一个Tab键按下的消息.基本顺序是这样的: 1. 主窗体用Hook技术捕获Ta ...

  8. jenkinsapi操作Jenkins,提示:No valid crumb was included in the request

    # coding:utf-8 from jenkinsapi.jenkins import Jenkins # 实例化Jenkins对象,传入地址+账号+密码 j = Jenkins("ht ...

  9. 关于Git的那些事

    以前一直使用tfs 或者svn当做代码管理器,随着GitHub的越来越火,git的使用人说也越来越多,这不我也开始来折腾git .GitHub的连接速度有的时候很慢,在国内不是太稳定,正好看到开源中国 ...

  10. 《Beginning Java 7》 - 7 - abstract class 抽象类 和 interface 接口

    1. 抽象类: 为什么用抽象类: 一些 generic 的类本身并没有现实意义,所以不需要被实例化.比如动物,自然界没有动物这个物种,但却有无数的继承自动物的物种,那么动物本身可以是一个抽象类. 抽象 ...