RabbitMQ 基础概念

Broker:消息协商器。消息队列的实体,它在TCP/IP等端口上监听AMQ消息



vHost:虚拟主机。功能上类似于web的虚拟主机,都是把数据按照功能或项目的不同划分为不同的虚拟主机;用户只被授予访问虚拟主机的权限,而没有其他比这高级的访问控制措施。客户端与Broker沟通需要先建立连接,这些连接仅限于连接用户和虚拟主机。



channel:通道。客户端在连接中声明一个通道,这个通道是客户与Broker之间的一个逻辑连接;客户端的操作都是通过通道来实现的。具体的操作需要客户端声明相应的组件。

常用的组件:

- 交换器(Exchange),它是发送消息的实体;可以显式命名

- 队列(Queue),这是接收消息的实体;可以显式命名;如果不命名,系统会自动生成一个队列,名称也为随机的,随机生成的队列生命周期会在当次生成它的连接断开时结束

- 绑定器(Bind),将交换器和队列连接起来,并且封装消息的路由信息;绑定的交换器



message:消息

消息的组成:

- 元数据,例如内容的编码或者表明来源的字段。

- 标志位,标记消息投递时候的一些保障机制。

- 一个特殊的字段叫做routing key。



exchange:交换器

  交换器负责把producer的消息按指定的规则分配给queue

  规则有四种:

    - direct

    - topic

    - headers

    - fanout 群发,向所有绑定的queue



queue:队列

   broker储存消息的位置,他可以由producer和consumer任意一方建立。

temporary queue:临时队列

      声明队列时如果不指明队列名称,那么声明的队列将是一个自动命名的队列,这个队列会在连接断开时自动删除,因为它属于一次会话的专属队列,会话结束,它也就应该结束了。



消息从发送到接收的流程:

消息发送客户端-create channel-》exchange-》queue-》-create channel -消息接收客户端 (接收端的接收流程还不确定)



broker在发送消息成功后会立即删除掉保存在queue中的该条消息。如果设置了回执,broker会在收到回执后执行删除。



consumer关闭、broker服务关闭都会造成任务失败和消息丢失。

- consumer异常: message acknowledgment。如果consumer发生异常消息未收到的情况下,broker不会删除掉该消息,而是重新发送,直到收到consumer返回回执才会删除。

- broker异常: 对队列和消息进行持久化。

   - 队列持久化:在队列声明中将持久化的参数设置为true即可使队列持久化;这个设置必须在producer和consumer同时设置;另外,已声明并存在队列的属性是不能修改,因此需要重新声明一个新的队列

   - 消息持久化: 依据原始消息数据,在实例化消息对象时,传入消息持久化的参数

默认的这种持久化并不是非常的强壮,因为在broker接受消息后有一小段时间内消息是未保存的。另外,rabbitmq不会对每条消息执行fsync,因此消息有可能是在内存的缓存中,并未真正的写到磁盘上。如果需要更妥当的持久化,需要用到事务Transaction 具体详情:https://www.rabbitmq.com/confirms.html



round-robin dispatching:消息轮询分发

  如果有多个worker,borker会将消息按照奇偶数轮流分发给worker;

Qos:服务质量

消息有的长,有短,如果一个worker分发到的消息都很长,而一个worker分发到的都比较短,那么一个worker会很繁忙,另一个会很闲。这样就需要去平衡消息的分发。

设置qos :basic_qos(null, 1, null)。1代表的是broker一次只发送一条消息给worker,如果worker没有完成上一条发送的消息、没有给broker发送回执,那么则不会继续给这个worker发送下一条消息,下一条的消息会发送给一个空闲的worker来处理。

(未完待续....)

时间: 2024-10-07 11:22:59

RabbitMQ 基础概念的相关文章

RabbitMQ基础概念详细介绍

你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用.通讯的问题而苦恼.挣扎?如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题. 消息服务擅长于解决多系统.异构系统间的数据交换(消息通知/通讯)问题,你也可以把它用于系统间服务的相互调用(RPC).本文将要介绍的RabbitMQ就是当前最主流的消息中间件之一. RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议

rabbitmq 基础概念介绍

[引言] 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用.通讯的问题而苦恼.挣扎?如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题. 消息服务擅长于解决多系统.异构系统间的数据交换(消息通知/通讯)问题,你也可以把它用于系统间服务的相互调用(RPC).本文将要介绍的RabbitMQ就是当前最主流的消息中间件之一. [RabbitMQ简介] AMQP,即Advanced Message Queuing Protocol,高级消息队列协议

RabbitMQ基础概念

消息的确认 RabbitMQ需要对每一条发送的消息进行确认.消费者必须通过AMQP的basic.ack命令显式地向RabbitMQ发送一个确认,或者在订阅到队列的时候就将auto_ack参数设置为true.当auto_ack为true时,一旦消费者接收消息,RabbitMQ会自动视其确认了消息.需要注意的是消费者对消息的确认和告诉生产者消息已经被接收了这两件事毫不相关.以此,消费者通过确认命令告诉RabbitMQ它已经确认地接收到消息,同时RabbitMQ才能安全的把消息从队列中删除. 如果消费

RabbitMQ基础概念详解(一)——环境配置及模拟生产者和消费者简单消息发送

一.简介: RabbitMq 是实现了高级消息队列协议(AMQP)的开源消息代理中间件.消息队列是一种应用程序对应用程序的通行方式,应用程序通过写消息,将消息传递于队列,由另一应用程序读取 完成通信.而作为中间件的 RabbitMq 无疑是目前最流行的消息队列之一. AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然.

RabbitMq基础教程之基本概念

RabbitMq基础教程之基本概念 RabbitMQ是一个消息队列,和Kafka以及阿里的ActiveMQ从属性来讲,干的都是一回事.消息队列的主要目的实现消息的生产者和消费者之间的解耦,支持多应用之间的异步协调工作 由于工作原因,接触和使用rabbitmq作为生产环境下的消息队列,因此准备写一些博文,记录下这个过程中的收货:而开篇除了环境搭建之外,就是对于其内部的基本概念进行熟悉和了解了. 基础环境搭建可以参考: <RabbitMq基础教程之安装与测试> 本文则主要集中在以下几点: 几个基本

转:RabbitMQ基础知识

RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR的 IIOP ,或者是 SOAP 等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的 MSMQ ,IBM 的 Websphere MQ 等),因此,在 2006 年的 6 月,Cisco .Redhat.iMatix 等联合制

RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ基础知识详解,RabbitMQ布曙

消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为: 当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候. 消息队列主要解决了应用耦合.异步处理.流量削锋等问题. 当前使用较多的消息队列有RabbitMQ.RocketMQ.ActiveMQ.Kafka.ZeroMQ.MetaMq等,而部分数据库如Re

RabbitMQ基础教程之基本使用篇

RabbitMQ基础教程之基本使用篇 最近因为工作原因使用到RabbitMQ,之前也接触过其他的mq消息中间件,从实际使用感觉来看,却不太一样,正好趁着周末,可以好好看一下RabbitMQ的相关知识点:希望可以通过一些学习,可以搞清楚以下几点 基础环境搭建 可以怎么使用 实现原理是怎样的 实际工程中的使用(比如结合SpringBoot可以怎么玩) 相关博文,欢迎查看: <RabbitMq基础教程之安装与测试> <RabbitMq基础教程之基本概念> I. 前提准备 在开始之前,先得

RabbitMQ基础组件和SpringBoot整合RabbitMQ简单示例

交换器(Exchange) 交换器就像路由器,我们先是把消息发到交换器,然后交换器再根据绑定键(binding key)和生产者发送消息时的路由键routingKey, 按照交换类型Exchange Type(fanout,direct,topic)把消息投递到对应的队列.(明白这个概念很重要,后面的代码里面充分体现了这一点). RabbitMQ基础知识可查看消息队列RabbitMQ基础知识详解 队列(Queue) 存放消息的队列. 绑定(Binding) 交换器怎么知道把这条消息投递到哪个队列