rabbitmq(二)原理

一.基本概念
1.1

可以看到提供方提供一个Broker(消息队列实体)当中的虚拟主机->>包含了Exchange(交换器)通过binding绑定一个队列Queue 客户端再通过连接不同渠道(Channel)给客户端提供消息
而一个消息队列又分几种模式

1.2
VirtualHost
虚拟主机。表示一批交换器,消息队列和相关对象。虚拟主机是共享相同的身份认证
和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有
自己的队列、交换器、绑定和权限机制。vhost 是 AMQP 概念的基础,必须在链接时指定,
RabbitMQ 默认的 vhost 是/
1.3
Channel 信道。
1,Channel 中文叫做信道,是 TCP 里面的虚拟链接。例如:电缆相当于 TCP,信道是
一个独立光纤束,一条 TCP 连接上创建多条信道是没有问题的。
2,TCP 一旦打开,就会创建 AMQP 信道。
3,无论是发布消息、接收消息、订阅队列,这些动作都是通过信道完成的。
1.4
交换器和队列的
交换器是通过路由键和队列绑定在一起的,如果消息拥有的路由键跟队列和交换器的
路由键匹配,那么消息就会被路由到该绑定的队列中。
也就是说,消息到队列的过程中,消息首先会经过交换器,接下来交换器在通过路由
键匹配分发消息到具体的队列中。
路由键可以理解为匹配的规则。
1.5 RabbitMQ 为什么需要信道?为什么不是 TCP 直接通

  1. TCP 的创建和销毁开销特别大。创建需要 3 次握手,销毁需要 4 次分手。
  2. 如果不用信道,那应用程序就会以 TCP 链接 Rabbit,高峰时每秒成千上万条链接
    会造成资源巨大的浪费,而且操作系统每秒处理 TCP 链接数也是有限制的,必定造成性能
    瓶颈。
  3. 信道的原理是一条线程一条通道,多条线程多条通道同用一条 TCP 链接。一条 TCP
    链接可以容纳无限的信道,即使每秒成千上万的请求也不会成为性能的瓶颈。

1.Direct(发布订阅 完全匹配)

rabbitmq默认队列
如图 Direct是根据交换器的routing key找到queues的
所以我们使用的时候消息接收就使用交换器名称,以及routingkey找到队列接收值

2.fanoutg(广播)

通过发送Exchange 将消息发送到所有绑定的队列中 所有连接到exchange的客户端 都会收到消息

3.topic

生产队列发送消息根据topic类型 发送到交换器  匹配几种相同的binding key 发送到队列  客户端消费

原文地址:https://www.cnblogs.com/liaohongbin/p/9888849.html

时间: 2024-08-29 13:40:13

rabbitmq(二)原理的相关文章

RabbitMQ(二):理解消息通信RabbitMQ

原文:RabbitMQ(二):理解消息通信RabbitMQ 一.消费者.生产者和信道 生产者(producer):生产者创建消息,然后发布(发送)到代理服务器(RabbitMQ),可以说发送消息的程序就是生产者.什么是消息?消息包含两部分:有效载荷和标签.有效载荷就是传输的数据,可以是任何内容,包括json数据和图片等等.而标签(一个叫交换器名称和可选的主题标记)描述了有效载荷,RabbitMQ用它来决定谁将获得这个消息. 消费者(consumer):消费者就是接收消息并处理消息的程序,他们连接

一个winform带你玩转rabbitMQ(二)

接上一篇内容 安装,简介和初探 下面我们接着来学习下RabbitMQ 一.  exchange属性 Type 前一章我们说了exchange的类型分为fanout,direct,topic.还有一种不常用的headers. headers这种类型的exchange绑定的时候会忽略掉routingkey,Headers是一个键值对,可以定义成成字典等.发送者在发送的时候定义一些键值对,接收者也可以再绑定时候传入一些键值对,两者匹配的话,则对应的队列就可以收到消息.匹配有两种方式all和any.这两

RabbitMQ 实现原理

AMQP(高级消息队列协议 Advanced Message Queue Protocol) AMQP当中有四个概念非常重要: 虚拟主机(virtual host),交换机(exchange),队列(queue)和绑定(binding).一个虚拟主机持有一组交换机.队列和绑定.为什么需要多个虚拟主机呢?很简单,RabbitMQ当中,用户只能在虚拟主机的粒度进行权限控制.因此,如果需要禁止A组访问B组的交换机/队列/绑定,必须为A和B分别创 建一个虚拟主机.每一个RabbitMQ服务器都有一个默认

RabbitMQ(二):mandatory标志的作用

本文转自:http://m.blog.csdn.net/article/details?id=54311277 在生产者通过channel的basicPublish方法发布消息时,通常有几个参数需要设置,为此我们有必要了解清楚这些参数代表的具体含义及其作用,查看Channel接口,会发现存在3个重载的basicPublish方法 void basicPublish(String exchange, String routingKey, BasicProperties props, byte[]

RabbitMQ-linux安装rabbitmq(二)

说明 本地装了个虚拟机模拟集群 所以记下安装步骤 安装Erlang 安装类库 yum -y install ncurses-devel yum -y install openssl-devel yum -y install unixODBC-devel yum -y install gcc-c++ 下载otp_src资源包并安装 1.下载资源包(可以通过-P ~/download file.name 指定下载文件地址默认再~目录) wget http://erlang.org/download/

SpringBoot整合RabbitMq(二)

       本文序列化和添加package参考:https://www.jianshu.com/p/13fd9ff0648d RabbitMq安装 [[email protected] ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE elasticsearch latest 874179f19603 11 days ago 771 MB springbootdemo4docker latest cd13bc7f56a0 2 week

rabbitMQ(二):Fanout Exchange

任何发送到Fanout Exchange的消息都会被转发到与该Exchange绑定(Binding)的所有Queue上. 1.可以理解为路由表的模式 2.这种模式不需要RouteKey 3.这种模式需要提前将Exchange与Queue进行绑定,一个Exchange可以绑定多个Queue,一个Queue可以同多个Exchange进行绑定. 4.如果接受到消息的Exchange没有与任何Queue绑定,则消息会被抛弃. 原文地址:https://www.cnblogs.com/dwxblogs/p

rabbitmq 原理&部署&使用

1. 简介 RabbitMQ是流行的开源消息队列系统,用erlang语言开发.RabbitMQ是AMQP(高级消息队列协议)的标准实现.如果不熟悉AMQP,直接看RabbitMQ的文档会比较困难.不过它也只有几个关键概念,这里简单介绍一下 Broker:简单来说就是消息队列服务器实体. Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列. Queue:消息队列载体,每个消息都会被投入到一个或多个队列. Binding:绑定,它的作用就是把exchange和queue按照路由规则绑

RabbitMQ之消息确认机制(事务+Confirm)

概述 在使用RabbitMQ的时候,我们可以通过消息持久化操作来解决因为服务器的异常奔溃导致的消息丢失,除此之外我们还会遇到一个问题,当消息的发布者在将消息发送出去之后,消息到底有没有正确到达broker代理服务器呢?如果不进行特殊配置的话,默认情况下发布操作是不会返回任何信息给生产者的,也就是默认情况下我们的生产者是不知道消息有没有正确到达broker的,如果在消息到达broker之前已经丢失的话,持久化操作也解决不了这个问题,因为消息根本就没到达代理服务器,你怎么进行持久化,那么这个问题该怎