资讯动态

RabbitMQ应用

发布时间:2026/8/8 8:46:45 来源:尧图企业网站定制
1. 工作模式介绍概念介绍Exchange交换机作用生产者将消息发送到Exchange由交换机将消息按一定规则路由到一个或多个队列中RabbitMQ中生产者直接将消息投递给队列中的情况时不会存在的RabbitMQ 中交换机有四种类型AMQP协议中还有 System和自定义两种类型此处不介绍Fanout广播将消息交给所有绑定交换机的队列Direct定向把消息交给符合指定 routing key 的队列Topic通配符把消息交给符合 routing pattern 的队列Headers 类型的交换器不依赖路由键的匹配规则来路由消息而是根据发送消息内容中的headers属性进行匹配Headers类型的交换器性能较差不实用Exchange交换机只负责转发消息不具备存储信息的能力因此如果没有任何队列与交换机绑定或者没有符合路由对则的队列消息会丢失RoutingKey路由键生产者将消息发给交换机时指定一个字符串用来告诉交换机应该如何处理这个消息BindingKey绑定RabbitMQ中通过BingingKey将交换机与队列关联起来在绑定的时候一般会指定一个BindingKey这样RabbitMQ就知道如何正确将消息路由到队列1.1 Simple简单模式特点一个生产者P一个消费者C消息只能被消费一次也成为对点对点模式适用场景消息只能被单个消费者处理1.2 Work Queue工作队列特点消息不会重复分配给不同的消费者适用场景集群环境中做异步处理1.3 Publish/Subscribe发布/订阅X表示交换机Publish/Subscribe模式一个生产者多个消费者交换机将信息复制多份每个消费者接收相同的信息适合场景消息需要被多个消费者同时接收的场景1.4 Routing路由模式路由模式是发布订阅模式的变种在发布订阅基础上增加路由key发布订阅模式是无条件将所有消息发送给所有消费者路由模式是Exchange根据RoutingKey的规则将数据筛选后发送给对于的消费者队列适合场景需要根据特定规则发布消息的场景1.5 Topics通配符模式路由模式的升级版在RoutingKey的基础上增加了通配符的功能使之更加灵活Topics和Routing的基本原理相同适合场景需要灵活匹配和过滤消息的场景1.6 RPCRPC通信远程过程调用是一种通过网络从远程计算机上请求服务而不需要了解底层网络技术类似于HTTP远程调用在RPC通信的过程中没有生产者和消费者客户端发送消息到一个指定的队列并在消息属性中设置 replyTo 字段这个字段指定了一个回调队列用于接收服务器的相应服务端接收到请求后处理请求并发送到 replyTo指定的回调队列客户端在回调队列上等待响应消息一旦收到响应客户端会检查消息的 correlationId属性 来确保它是所期望的响应Publish Confirms发布确认Publish Confirms 模式是RabbitMQ提供的一种确保消息可靠发送到RabbitMQ服务器的机制在这种模式下生产者可以等待RabbitMQ服务器来确认也确保消息已经被服务器接收并处理生产者将 Channel 设置为 confirm 模式发布的每一条消息都会获得一个唯一的ID生产者可以将这些序列号与消息关联起来以便跟踪消息的状态当消息被RabbitMQ服务器接收并处理后服务器会异步地向生产者发送一个确认包含消息的唯一ID表明消息已经送达通过 Publish Confirms 模式生产者可以确保消息被RabbitMQ服务器成功接收从而避免消息丢失的问题使用场景对数据安全性要求高的场景2. 工作模式的使用案例2.1 简单模式快速入门中有介绍此处省略2.2 Work Queue工作队列生产者消费者2.3 Publish/Subscribe发布/订阅生产者消费者2.4 Routing路由模式生产者消费者2.5 Topics通配符模式生产者消费者2.6 PRCRPC通信客户端服务端2.7 Publisher Confimers发布确认作为消息中间件都会面临消息丢失的问题消息丢失大概分为三种情况1. 生产者问题因为应用程序故障、网络抖动等各种原因生产者没有成功向Broker发送消息2. 消息中间件自身问题生产者陈工发送给Broker但是Broker没有把消息保存好导致消息丢失3. 消费者问题Broker发送消息到消费者消费者在消费消息时因为没有处理好导致Broker将消费失败的消息从队列中删除了RabbitMQ对上述问题给出了相应的解决方案问题2可以通过持久化机制问题3可以采用消息应答机制针对问题1可以采用发布确认机制来实现生产者将信道设置成 confirm 模式一旦信道进入 confirm 模式所有在该信道上面发布的消息都会被指派一个唯一的ID一旦消息被投递到苏匹配的队列之后RabbitMQ就会发送一个确认给生产者包含消息的唯一ID这使得生产者知道消息已经正确到达目的队列了如果消息队列是可持久化的那么确认消息会在消息写入次抛弃你之后发出Broker回传给生产者的确认消息中 deliveryTag 包含了确认消息的序号此外 broker也可以设置 Channel basicAck 方法中的multiple参数表示到这个序号之前的所有消息都已经得到了处理发布确认机制最大的好处在于它是异步的生产者可以同时发布消息和等待信道返回确认消息1. 当消息最终得到确认之后生产者可以通过回调方法来处理确认消息2. 如果RabbitMQ因为自身内部错误导致消息丢失就会发送一条 nack命令生产者同样可以在回调方法中处理该nack命令单独确认批量确认异步确认3. Spring Boot 整合RabbitMQ3.1 工作队列模式3.2 Publish/Subscribe发布订阅模式3.3 Routing路由模式3.4 TOPICS通配符模式

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价