RabbitMQ基本概念

本文详细解析了消息发布的标准流程,包括producer、exchange、queue和consumer的角色及交互方式。阐述了消息载荷、标签和绑定的概念,以及exchange类型的特性。探讨了在connection建立channel的优势,并解释了消息服务器上的资源分配原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

消息发布的基本流程

producer -> exchange  ->  (需要通过指定 binding key 将exchange和queue 绑定)  -> queue -> consumer

生产者不会将消息直接发送到queue,而是仅仅发送到exchange。再由excharge根据自己类型,binding key 绑定到的queue,以及消息的routing key,最终路由到queue。消费者监听特定queue,获取到消息

消息组成

载荷(payLoad)其实就是应用业务的消息
标签(label)包含消息投递给谁,如exchage、rountingKey等信息
也是发送消息的三大必要参数

绑定 binding 

将exchange和queue通过binding key 联系起来,为queue接收消息做好准备。但是消息最终能否到达以及以分发到达queue的形式,还和消息携带的rounting key 和exchage的类型有关

交换器 exchange类型

fanout
消息广播到绑定队列,只要队列绑定了交换器,与routingKey就无关了

 

direct
binding key = routing key 消息就会发送到发送到queue

topic
规则匹配:* . #

 

header
使用消息header代替routing key起到路由作用

 

default

由rabbitmq自动创建,不能指定exchange名字,mq自动将queue的name作为binding key 和default exchange 绑定,相当于简化的direct配置。使用场景:直接指定消息rounting key为 queue的名字

在connection建立channel的优势

一旦通过帐号密码验证,就可以和rabbitmq建立connection(tcp连接),一个connection中可以建立无数独立的channel进行通信。因为tcp连接非常耗费资源,这种模式节约tcp连接,提高了rabbit并发性。

注意:对消息的publish、consume、get、ack、nack、confirm、handleReturn 以及对exchange、binding、queue的申明等都是在某个channel实现的,即channel是AMQT应用层相关的概念

 

connection、channel、exchange、queue关联关系

4.1 publisher和consumer可以创建多个connection(TCP连接)

4.2 一个connection可以创建多个channel

4.3 channel上可以任意申明exchange、binding、queue。但是申明出来的exchange、binding、queue和channel并非这个channel的附属资源,而是消息服务器上的资源,可以被所有的connection和channel使用。简单说,channel1发送消息到queue1,如果channel2监听queue1,那么channel2会获取到消息。

 

应该由消费者还是生产者申明队列

建议同时由消费者和生产者声明队列,如果仅仅由消费者创建队列,如果生产者的发送的消息的路由不存在,发送时不会报错,但是这个消息就掉入黑洞了(永远消失了)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值