当前位置: 首页 > 知识库问答 >
问题:

RabbitMQ-最佳实践

印子平
2023-03-14

我正在尝试同步我拥有的三个微服务

为此,我实现了RabbitMQ。看起来好像事情目前是可行的,但我不确定我是否遵循了最佳实践,而且我找不到一个参考,也许有人能帮我做这件事?

我正在尝试做的简要说明:我有一个服务谁应该更新另外两个,每个服务应该接收发送的消息。我有两种类型的消息(保存和删除资源)。*发生故障时,队列应恢复并重新发送消息。

我目前正在做的事情:我已经建立了一个交换,我的每个消费者都连接到两个不同的队列,一个队列对应于每种类型的消息(保存/删除)。我使用了一个直接交换来过滤以后的消息,尽管目前我不需要过滤它们。

每个队列都被命名,交换和消息都是持久的,我正在处理我已经使用的消息。

问题是应该为每种类型的事件设置不同的队列,还是应该在同一队列中发送消息并对其进行过滤?使用上面描述的RabbitMQ是解决问题的正确方法。最佳实践是什么?

共有1个答案

高皓
2023-03-14

您的设置是正确的。

在rabbit中设计队列时的一个常见规则是,一个队列对应于消费者的一种类型(这里的类型表示不同的处理逻辑)。既然你有两种类型的消费者。对于不同类型的事件(保存/删除),它们有不同的逻辑,每个队列都是正确的。

如果您希望只有一种类型的使用者,它可以同时处理save和delete事件,那么使用一个队列也是可以的。

但两种类型的使用者和一个共享队列将无法工作。因为当多个消费者订阅一个队列时,事件会以循环的方式发送给消费者,所以任何一个消费者只能接收到一半的事件。

 类似资料:
  • 这里有些给使用和编写 Ansible playbook 的贴士. 你能在我们的 ansible-example repository.找到展示这些最佳实践的 playbook 样例.(注意: 这些示例用的也许不是最新版的中所有特性,但它们仍旧是极佳的参考.) Topics 最佳实践 接下来的章节将向你展示一种组织 playbook 内容方式. 你对 Ansible 的使用应该符合你的需求而不是我们

  • 处理后台任务与常规调用方法有很大的不同。本指南旨在帮助让您的后台任务平稳有效地运行。本文基于 这篇博客文章。 使任务参数小而简单 方法(任务)在调用之前会被序列化。使用 TypeConverter 类将参数转换为 JSON 字符串。如果您有复杂的实体和 / 或大对象; 包括数组,最好将它们放入数据库,然后只将其标识 (id) 传递给后台任务。 错误例子: public void Method(En

  • VR设计 VR设计不同于平面体验设计。作为一种新的媒介,有新的最佳实践需要遵循,特别是保持用户的舒适性和存在性。这在如下指南中已经写得很透彻了: Oculus VR最佳实践 Leap Motion VR最佳实践指南 一些值得注意的事情: 公共的金科玉律是永远不要意外地把相机控制权从用户手中剥夺。 单位(比如对于位置)应该考虑使用米(m)。这是因为WebVR API以米为单位返回姿势数据,进而传送给

  • 本章文档将阐述一些使用herosphp开发一些常用模块的一些比较好的实践。 未完待续。。。

  • 适当的使用vuex 能不用就不用。 能用就用。 不要为了使用而使用,一个小方法里面有5个设计模式。 不要过度使用CSS框架 因为CSS框架一般会大幅度增加文件体积。 例如 bootstrap, ele.me前端框架。 这个在低端安卓机上影响显著。 使用CDN来存放js, css, 和图片文件。 灵活使用第三方Vue 插件 例如: 轮播图, 表单验证等等。这些轮子都是现成的。 前端逻辑务必简单 能在