RabbitMq概要

RabbitMq

image.png

1. 背景
    a. AMQP-高级消息队列协议
    b. 解耦
    c. 方便拓展
2. 概念
     A. 消费者和生产者
        (1). 生产者-producer创建消息,然后发布(发送到)代理服务器(RabbitMQ)
            $1. 什么是消息
                a. 有效载荷(payload)
                    任意数据,任意格式
                b. 标签(label)
                    描述了有效载荷,RabbitMQ通过它能决定谁能获得消息的拷贝
                c. 发后即忘(fire-and-forget)的通信方式
        (2). 消费者连接到代理服务器,订阅到队列上
            a. 队列类似一个具名邮箱
            b. 消息在到达队列后,RabbitMQ会把消息传递给其中的一个订阅/监听的消费者
            c. 消息标签不会随着有效载荷一同传递
            d. 如果需要得知发送方信息,只有把发送方信息放入有效载荷中
        (3). 信道(生产者或消费者向服务器建立连接)
            a. 建立在tcp连接内的虚拟连接
            b. 每条信道都会有一个唯一的ID(AMQP库存储)
            c. 避免了每次建立和销毁TCP连接会话带来的开销
            d. 避免了遭遇高峰期操作系统TCP的瓶颈
            e. 一次tcp连接里可以创建多条信道,既保证了线程的私密性,同时也避免了给操作系统的tcp栈带来额外负担
    B. AMQP消息路由
        (1). 队列
            $1. AMQP消息通信的基础模块
                a. 为消息提供了住所,消息在此等待消费
                b .对负载均衡来说,队列是绝佳方案,只需附加一堆消费者,并让RabbitMQ以循环的方式均匀的分配发来的消息
                c. 队列是RabbitMQ中消息最后的终点(除非消息进入了黑洞)
            $2. 消费者通过两种方式接受特定队列里的消息
                a. basic.consume 订阅
                    将信道设置为订阅模式,消息到达队列时自动接受
                b. basic.get 单条消息
                    不建议放在循环里使用,影响性能
                消费者应通过consume来实现高吞吐量
            $3. 队列没有消费者订阅
                消息在队列中等待,直到有消费者订阅,才把消息发给消费者
            $4. 多消费者订阅队列
                a. 机制
                    (1). 循环发送给消费者
                    (2). 每条消息只会发送给一个消费者
            $5. 消费者消息确认机制
                a. 命令
                    (1). basic.ack 显示向Rabbit发送确认
                    (2). auto_ack参数设置为true
                    
                b. 机制
                    (1). 消费者收到消息没有确认就从服务器断开连接
                        Rabbit会把消息传递给下一位消费者
                    (2). 消费者收到消息没有确认并且仍在线
                        不会再往该消费者发送消息了
                c. 拒绝消息
                    (1). 从服务器断开连接
                    (2). RabbitMQ2.0以上版本,basic.reject
                        reject命令中的requeue的参数设置
                            为true 时 ,RabbitMQ会自动把消息传送给下一个消费者
                            为false时,Rabbit会从队列移除该消息,不会发送给其他消费者
             $6. 队列创建
                a. 须知
                消费者在同一条信道上订阅另一条队列时,无法再声明队列,必须取消订阅,设置信道为传输模式
                b.  队列名称
                  (1). 指定队列名称
                  (2). 不指定名称
                    Rabbit随机分配名称并在queue.declare命令中返回
                c. 重点参数
                    (1). exclusive
                        为true时,队列变成私有的, 只有当前应用程序才能消费队列,可以用来限制一个队列只能有一个消费者
                    (2). auto-delete
                        当最后一个消费者取消订阅时,队列就会自动移除
        (2). 交换器
            $1. 四种类型的交换器
                a. direct
                    如果路由建匹配,消息就被投递到对应的队列
                b. fanout
                    将收到的消息广播到绑定的队列上
                c. topic
                    使来自不同源头的消息到达相同的队列上
    
        (3). 多租户于权限控制
          $1. vhost 虚拟主机
              a. 方便迁移
              b. 数据隔离
          $2. 权限控制可以在服务器上或vhost上
              a.消息持久化与策略
                * 必须点
                  (1). 消息的投递模式设置成2
                  (2). 发送给持久化的交换器
                  (3). 到达持久化的队列
              b. AMQP事务
                发送方确认
3. 实践
    (1). 目的
        $1. 解耦
        $2. 提高请求处理速度
        $3. 方便扩展
    (2). 发后即忘模式
        $1. 概念
            a. 创建任务,放置到交换机上,无需知道结果
        $2. 场景运用
            a. 日志告警框架
            b. 并行处理
                (1). 执行主线任务
                (2). 附带任务分开进行
    (3). 实现rpc
        $1. 使用消息来发回应答
            a. AMQP消息头字段 reply_to
            b. 生产者以该字段创建队列,并监听队列
            c. 消费者检查该字段,并以该队列名称作为路由键
        $2. 匿名队列
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • 初识RabbitMQ要说RabbitMQ,我们不得不先说下AMQP。AMQP,即Advanced Message ...
    Jackie_Zheng阅读 717评论 0 3
  • 1,简单介绍与服务安装 1.1,背景 在分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦。现...
    红薯爱帅阅读 235评论 0 3
  • 关于消息队列,从前年开始断断续续看了些资料,想写很久了,但一直没腾出空,近来分别碰到几个朋友聊这块的技术选型,是时...
    预流阅读 584,382评论 51 785
  • 整体架构 部署步骤 基于 Docker 基本概念内存节点只保存状态到内存,例外情况是:持久的 queue 的内容将...
    mvictor阅读 12,741评论 5 30
  • hello world这句话对于我们学习通信技术的人来说呢并不陌生,任何一个编程语言第一个程序都会是它。 本周我们...
    好想吃薯愿阅读 266评论 0 0