RabbitMQ使用及其高级特征

使用

docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15672:15672 rabbitmq:management

端口(https://www.rabbitmq.com/networking.html ):

  • 5671、5672:AMQP端口
  • 15672:web管理后台端口
  • 4369,25672:Erlang发现&集群端口

架构

RabbitMQ

  • Broker:接收和分发消息的应用
  • Virtual Host:虚拟分组,不同的用户可以在不同的Virtual Host中创建 exchange/queue 等
  • Connection:publisher/consumer 和 broker 之间建立 TCP 连接
  • Channel:在 connection 内部建立的逻辑连接,通常每个thread创建单独的channel进行通讯,AMQP method包含channel id帮助客户端和message broker识别channel,所以channel之间是完全隔离的。Channel作为轻量级的Connection极大减少了操作系统建立TCP连接的开销

工作模式

简单模式

一个生产者、一个消费者,不需要设置交换机(使用默认的交换机)。

工作队列模式 Work Queue

一个生产者、多个消费者(竞争关系),不需要设置交换机(使用默认的交换机)。

发布订阅模式 Publish/subscribe

需要设置类型为 fanout 的交换机,并且交换机和队列进行绑定,当发送消息到交换机后,交换机会将消息发送到绑定的队列。

路由模式 Routing

需要设置类型为 direct 的交换机,交换机和队列进行绑定,并且指定routing key,当发送消息到交换机后,交换机会根据routing key将消息发送到对应的队列。

通配符模式 Topic

需要设置类型为 topic 的交换机,交换机和队列进行绑定,并且指定通配符方式的routing key,当发送消息到交换机后,交换机会根据routing key将消息发送到对应的队列。

高级特征

消息的可靠投递

消息发送确认

RabbitMQ 为我们提供了两种方式用来控制消息的投递可靠性(防止消息丢失或者投递失败的场景):

confirm:确认模式

使用rabbitTemplate.setConfirmCallback设置回调函数,当消息发送到exchange后回调confirm方法。

需开启发送回调publisher-confirm-type: SIMPLE

return:退回模式

使用rabbitTemplate.setReturnCallback设置退回函数,当消息从exchange路由到queue失败执行returnedMessage方法。

需开启消息路由失败回调publisher-returns: true

消息消费确认

消息消费确认模式有:

  • AcknowledgeMode.NONE:自动确认,consumer收到消息后自动将相应的message从RabbitMQ中移除
  • AcknowledgeMode.AUTO:根据情况确认
  • AcknowledgeMode.MANUAL:手动确认,调用channel.basicAck()手动签收

通过设置spring.rabbitmq.listener.direct.acknowledge-mode=MANUAL开启手动确认,调用basicAck方法确认签收消息,调用basicNack或basicReject,拒绝消息

消费端限流

通过channel.basicQos设置消费的大小和数量,注意需要开启消费端手动确认(acknowledge-mode=MANUAL)

TTL

通过参数x-message-ttl(整个队列)或expiration(单条消息)设置过期时间,到达过期时间没有被消费就会被清除

死信队列

Dead-Letter-Exchange(DLX)死信交换机,若消息绑定了死信交换机消息会在以下情况进入死信队列:

  • 消息长度达到限制
  • 消费者拒绝接受并且不重写入队
  • 到达过期时间未被消费

延迟队列

RabbitMQ中可以通过 TTL+死信队列 方式实现延迟队列效果

延迟队列

其它问题

  • 消息幂等:多次消费相同消息能得到相同的结果
  • 消息积压:增加消费者,或上线专门的消费服务将消息持久化再处理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: RabbitMQ是一种功能强大的消息中间件,它基于AMQP协议,具有简单易用、高并发性能好等特点。\[1\]RabbitMQ使用Erlang语言实现,这也是其高并发性能好的原因之一。它还有一个方便的管理工具,可以用来查看RabbitMQ的运行状态和详细数据等。\[2\]RabbitMQ是消息中间件的一种实现,市面上还有其他实现,如ActiveMQ、ZeroMQ、Kafka和RocketMQ等。\[3\]关于RabbitMQ高级底层原理,具体包括消息的路由、交换机、队列和绑定等概念。消息通过交换机进行路由,然后被发送到相应的队列中。绑定是交换机和队列之间的关联关系,它决定了消息如何从交换机路由到队列。RabbitMQ还支持多种交换机类型,如直连交换机、主题交换机和扇形交换机,可以根据不同的需求选择合适的交换机类型。此外,RabbitMQ还支持消息的持久化、消息的确认机制和消息的优先级等高级特性。总之,RabbitMQ高级底层原理涉及到消息的路由、交换机、队列、绑定和一些高级特性的实现。 #### 引用[.reference_title] - *1* [消息中间件架构体系 - 深究“RabbitMQ”及其 底层原理](https://blog.csdn.net/m0_67645544/article/details/123686963)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [RabbitMq底层原理分析](https://blog.csdn.net/qq_40708830/article/details/89454188)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值