安阳网站建设兼职,微网站设计方案,网站备案完了怎么做,成都商城网站开发RabbitMQ 一共有 7 中工作模式#xff0c;可以先去官网上了解一下#xff08;一下截图均来自官网#xff09;#xff1a;RabbitMQ 官网
Simple P#xff1a;生产者#xff0c;要发送消息的程序#xff1b;C#xff1a;消费者#xff0c;消息的接受者#xff1b;hell…RabbitMQ 一共有 7 中工作模式可以先去官网上了解一下一下截图均来自官网RabbitMQ 官网
Simple P生产者要发送消息的程序C消费者消息的接受者hello要发送的消息这个消息存在在一个队列中
“简单模式”这种模式的消息只能被消费一次也称为“点对点”模式Point-to-Point适用于消息只能被单个消费者处理的场景并且也是最简单的一种模式。
Work Queue 这中模式叫做“工作队列模式”从图上看就可以发现它是一对多模型一个生产者多个消费者生产者产生的消息是由多个消费者共同消费的也就是所消息的总量是不会变的适合集群环境中做异步处理。比如一个订单服务下单成功之后订单消息就会发送到 RabbitMQ 然后订单服务就会从 RabbitMQ 中获取订单详情并进行下一步的处理在多个订单服务之间进行分配。
Publish/Subscribe 这种叫“发布/订阅模式”相比于“工作队列模式”只是在生产者和队列之间加一层 X 交换机。
交换机Exchange的作用就是将生产者发送的消息按照一定的规则路由到一个或多个队列中它只负责转发消息不具备存储消息的能力因此如果没有任何队列与 Exchange 绑定或者没有符合路由规则的队列那么消息就会丢失RabbitMQ 的交换机一共有一下几种类型
fanout广播类型将所有消息交给所有绑定到交换机的队列发布/订阅模式direct定向路由类型把消息交给符合指定 routing key 的队列topic通配符类型把消息交给符合 routing pattern 路由模式的队列headers这个类型的交换机不依赖于路由键的匹配规则来路由消息而是根据发送的消息内容中的 headers 属性进行匹配但是这个交换机的性能较差使用频率也少
这里还有两个概念就是 RountingKey 和 BindingKey
RoutingKey路由键生产者将消息发送给交换器的时候会指定路由键然后交换机就会根据这个路由键去决定下一步该怎么做BaindingKey绑定键通过 BindingKey 将交换机与队列关联起来在绑定的时候一般会指定一个 BindingKey这样 RabbitMQ 就可以根据 RoutingKey 和 BindingKey 来正确转发消息到指定的队列中
Routing 这种叫“路由模式”在“发布/订阅模式”的基础上增加 RoutingKey发布订阅模式就是直接把消息全部发送到与交换机关联的队列中没有其他规则判断路由模式下Exchange 会根据用户传过来的 RoutingKey 和交换机与队列绑定的 BindingKey 进行比较只有相同的话才会把消息发送到对应对立中适合需要根据特定规则分发消息的场景
Topics 这种叫做“通配符模式”如果理解了上面的“路由模式”的话理解这个应该不难它比“路由模式”更加灵活Exchange 可以根据使用通配符的方式对消息路由到指定队列比如要是 RoutintKey test.orange.rabbit 的话那么 Exchange 会将消息发送到 Q1 和 Q2 中
RPC RPC 通讯就是客户端去远程调用服务器的服务在通讯过程中没有生产者和消费者客户端发送消息到一个指定的队列request queue并在消息属性中设置 replyTo 字段这个字段的意思就是指定一个回调队列用于接收服务端的响应然后服务端接收到请求之后处理请求并发送响应消息到 replyTo 指定的回调队列中客户端再再回调队列上等待响应消息一旦收到消息客户端就会检查消息的 correlationId 属性以确保它是期望的响应其中 correlationId 的值也是客户端定义的然后服务端再根据约定好的规则进行检查
Publisher Confirms
“发布确认模式”是 RabbitMQ 提供的一种确保消息可靠发送到 RabbitMQ 服务器的机制。在这中模式下生产者可以等待 RabbitMQ 服务器的确认确保消息已经被正确接收并处理
生产者将 channel 设置为 confirm 模式发布的每一条消息都会获得一个唯一的ID生产者可以将这些序列号与消息关联起来用来跟踪消息的状态。当消息被 RabbitMQ 服务器接收并处理后服务器会异步的向生产者发送一个确认 ACK 给生产者包含消息的唯一ID表明消息已经正确到达。
通过 Publisher Confirm 模式可以避免消息丢失的场景适合对数据安全性较高的场景如金融交易和订单处理等等。