2.rabbitmq工作模型

前言MQ 的本质是什么呢? 消息队列,又叫做消息中间件。是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信(维基百科)。

1.为什么要使用 MQ?

1)实现异步通信


异步

2)实现系统解耦

系统架构

3)实现流量削峰

MQ 既然是队列,就有先进先出的特性,这样,我们就可以先把所有的流量承接下来,转换成 MQ 消息发送到消息队列服务器上,业务层就可以根据自己的消费速率去处理这些消息,处理之后再返回结果。就像我们在火车站排队一样,大家只能一个一个买票,不会因为人多就导致售票员忙不过来。如果要处理快一点,大不了多开几个窗口(增加几个消费者)。

2.RabbitMQ 简介

1)基本特性:

1. 高可靠:RabbitMQ 提供了多种多样的特性让你在可靠性和性能之间做出权衡,包 括持久化、发送应答、发布确认以及高可用性。2.灵活的路由:通过交换机(Exchange)实现消息的灵活路由。3.支持多客户端:对主流开发语言(Python、Java、Ruby、PHP、C#、JavaScript、Go、Elixir、Objective-C、Swift 等)都有客户端实现。4.集群与扩展性:多个节点组成一个逻辑的服务器,支持负载。5.高可用队列:通过镜像队列实现队列中数据的复制。6.权限管理:通过用户与虚拟机实现权限管理。7.插件系统:支持各种丰富的插件扩展,同时也支持自定义插件。8.与 Spring 集成:Spring 对 AMQP 进行了封装。

2)AMQP 协议

1.总体介绍:高级消息队列协议,是一个工作于应用层的协议,最新的版本是 1.0 版本。

网络模型

2.工作模型:由于 RabbitMQ 实现了 AMQP 协议,所以 RabbitMQ 的工作模型也是基于 AMQP的

工作模型图

名词解释:1)Broker:这台 RabbitMQ 的服务器我们把它叫做 Broker,中文翻译是代理/中介,因为 MQ 服务器帮助我们做的事情就是存储、转发消息。 2)Connection:无论是生产者发送消息,还是消费者接收消息,都必须要跟 Broker 之间建立一个连接,这个连接是一个 TCP 的长连接。3)Channel:它是一个虚拟的连接。我们把它翻译成通道,或者消息信道。为了解决所有的生产者发送消息和消费者接收消息,都直接创建和释放 TCP 长连接的话,对于 Broker 来说肯定会造成很大的性能损耗的问题 4)Queue:队列是真正用来存储消息的,是一个独立运行的进程,有自己的数据库(Mnesia)。消费者获取消息有两种模式,一种是 Push 模式,只要生产者发到服务器,就马上推送给消费者。另一种是 Pull 模式,消息存放在服务端,只有消费者主动获取才能拿到消息。消费者需要写一个 while 循环不断地从队列获取消息吗?不需要,我们可以基于事件机制,实现消费者对队列的监听。5)Exchange:用来实现消息的灵活路由,交换机是一个绑定列表,用来查找匹配的绑定关系。队列使用绑定键(Binding Key)跟交换机建立绑定关系。6)Vhost:VHOST是虚拟主机, 除了可以提高硬件资源的利用率之外,还可以实现资源的隔离和权限的控制。它的作用类似于编程语言中的 namespace 和 package,不同的 VHOST 中可以有同名的 Exchange 和 Queue,它们是完全透明的。

3)路由方式-交换机

1.直连 Direct:队列与直连类型的交换机绑定,需指定一个精确的绑定键。生产者发送消息时会携带一个路由键。只有当路由键与其中的某个绑定键完全匹配时,这条消息才会从交换机路由到满足路由关系的此队列上。

直连 Direct

2.主题 Topic:队列与主题类型的交换机绑定时,可以在绑定键中使用通配符。两个通配符:# 表示0 个或者多个单词    * 表示不多不少一个单词(单词(word)指的是用英文的点“.”隔开的字符。例如 abc.def 是两个单词)。

主题 Topic

3.广播 Fanout:主题类型的交换机与队列绑定时,不需要指定绑定键。因此生产者发送消息到广播类型的交换机上,也不需要携带路由键。消息达到交换机时,所有与之绑定了的队列,都会收到相同的消息的副本。

广播 Fanout
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • http://liuxing.info/2017/06/30/Spring%20AMQP%E4%B8%AD%E6%...
    sherlock_6981阅读 16,015评论 2 11
  • 这个指导提供一个AMQP 0-9-1协议的概述,它是RabbitMq支持的一个协议。 什么是AMQP 0-9-1?...
    浪_6e80阅读 757评论 0 1
  • AMQP大致内容就是,将消息和队列绑定起来,规定让进入到交换机中的具有某个路由键的消息进入到指定队列中去。 Rab...
    StevenMD阅读 1,911评论 0 3
  • 什么叫消息队列? 消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复...
    Agile_dev阅读 2,389评论 0 24
  • 关于消息队列,从前年开始断断续续看了些资料,想写很久了,但一直没腾出空,近来分别碰到几个朋友聊这块的技术选型,是时...
    预流阅读 585,521评论 51 786