- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 RabbitMQ 的循环功能在多个消费者之间发送消息,但一次只有一个消费者接收实际消息。
我的问题是我的消息代表任务,我想在我的消费者上有本地 session (状态)。我事先知道哪些消息属于哪个 session ,但我不知道使用我指定的算法将 RabbitMQ 发送给消费者的最佳方法是什么(或者有什么方法吗?)。
我不想编写自己的编排服务,因为它会成为瓶颈,而且我不想让我的生产者知道哪个消费者会接收他们的消息,因为我会失去使用 Rabbit 获得的解耦。
有没有办法让 RabbitMQ 根据预定义的算法/规则而不是循环法将我的消息发送给消费者?
说明:我使用了几个用不同语言编写的微服务,每个服务都有自己的工作。我使用 protobuf 消息在它们之间进行通信。我给每条新消息一个 UUID
。如果消费者收到一条消息,它可以从中创建一条响应消息(这可能不是正确的术语,因为生产者和消费者是解耦的,他们彼此不了解)和这个UUID
被复制到新消息中。这形成了一个数据转换管道,这个“进程”由UUID
(processId)标识。我的问题是,我可能有多个 worker 消费者,我需要一个 worker 坚持到一个UUID
,如果它以前见过它的话。我有这个需求是因为
由于 RabbitMQ 使用循环法在工作人员之间分配任务,因此我不能强制我的进程坚持工作人员。我有几个警告:
如果有不涉及更改循环算法且不破坏我的约束的变通方法,那也是可以的!
最佳答案
如果您不想使用编排服务,您可以尝试使用这样的拓扑结构:
为简单起见,我假设您的 processId
用作路由键(在现实世界中,您可能希望将其存储在 header 中并使用 header
交换相反)。
传入消息将被 Incoming Exchange(类型:直接)接受,它有一个 alternative-exchange
属性设置为指向 No Session Exchange
(扇出)。
这是 RabbitMQ 文档在“替代交换”上所说的内容:
It is sometimes desirable to let clients handle messages that an exchange was unable to route (i.e. either because there were no bound queues our no matching bindings).
Typical examples of this are
- detecting when clients accidentally or maliciously publish messages that cannot be routed
- "or else" routing semantics where some messages are handled specially and the rest by a generic handler
RabbitMQ's Alternate Exchange ("AE") feature addresses these use cases.
(我们对这里的or else
用例特别感兴趣)
每个消费者都将创建自己的队列并将其绑定(bind)到 Incoming Exchange,使用 processId(s)
作为目前已知的 session ,作为绑定(bind)的路由键。
这样它只会收到它感兴趣的 session 的消息。
此外,所有消费者都将绑定(bind)到共享的No Session Queue。
如果收到一 strip 有以前未知的 processId
的消息,则不会为它注册到 Incoming Exchange 的特定绑定(bind),因此它会被重新路由到没有 session 交换 => 没有 session 队列并以通常的(循环)方式分派(dispatch)给其中一个消费者。
然后消费者将通过 Incoming Exchange 为它注册一个新的绑定(bind)(即开始一个新的“ session ”),这样它将通过这个 获取所有后续消息processId
.
一旦“ session ”结束,它将必须删除相应的绑定(bind)(即关闭“ session ”)。
关于java - 我可以使用自定义算法而不是使用 RabbitMQ 的循环调度消息吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43001689/
好的,所以我编辑了以下... 只需将以下内容放入我的 custom.css #rt-utility .rt-block {CODE HERE} 但是当我尝试改变... 与 #rt-sideslid
在表格 View 中,我有一个自定义单元格(在界面生成器中高度为 500)。在该单元格中,我有一个 Collection View ,我按 (10,10,10,10) 固定到边缘。但是在 tablev
对于我的无能,我很抱歉,但总的来说,我对 Cocoa、Swift 和面向对象编程还很陌生。我的主要来源是《Cocoa Programming for OS X》(第 5 版),以及 Apple 的充满
我正在使用 meta-tegra 为我的 NVIDIA Jetson Nano 构建自定义图像。我需要 PyTorch,但没有它的配方。我在设备上构建了 PyTorch,并将其打包到设备上的轮子中。现
在 jquery 中使用 $.POST 和 $.GET 时,有没有办法将自定义变量添加到 URL 并发送它们?我尝试了以下方法: $.ajax({type:"POST", url:"file.php?
Traefik 已经默认实现了很多中间件,可以满足大部分我们日常的需求,但是在实际工作中,用户仍然还是有自定义中间件的需求,为解决这个问题,官方推出了一个 Traefik Pilot[1] 的功
我想让我的 CustomTextInputLayout 将 Widget.MaterialComponents.TextInputLayout.OutlinedBox 作为默认样式,无需在 XML 中
我在 ~/.emacs 中有以下自定义函数: (defun xi-rgrep (term) (grep-compute-defaults) (interactive "sSearch Te
我有下表: 考虑到每个月的权重,我的目标是在 5 个月内分散 10,000 个单位。与 10,000 相邻的行是我最好的尝试(我在这上面花了几个小时)。黄色是我所追求的。 我试图用来计算的逻辑如下:计
我的表单中有一个字段,它是文件类型。当用户点击保存图标时,我想自然地将文件上传到服务器并将文件名保存在数据库中。我尝试通过回显文件名来测试它,但它似乎不起作用。另外,如何将文件名添加到数据库中?是在模
我有一个 python 脚本来发送电子邮件,它工作得很好,但问题是当我检查我的电子邮件收件箱时。 我希望该用户名是自定义用户名,而不是整个电子邮件地址。 最佳答案 发件人地址应该使用的格式是: You
我想减小 ggcorrplot 中标记的大小,并减少文本和绘图之间的空间。 library(ggcorrplot) data(mtcars) corr <- round(cor(mtcars), 1)
GTK+ noob 问题在这里: 是否可以自定义 GtkFileChooserButton 或 GtkFileChooserDialog 以删除“位置”部分(左侧)和顶部的“位置”输入框? 我实际上要
我正在尝试在主页上使用 ajax 在 magento 中使用 ajax 显示流行的产品列表,我可以为 5 或“N”个产品执行此操作,但我想要的是将分页工具栏与结果集一起添加. 这是我添加的以显示流行产
我正在尝试使用 PasswordResetForm 内置函数。 由于我想要自定义表单字段,因此我编写了自己的表单: class FpasswordForm(PasswordResetForm):
据我了解,新的 Angular 7 提供了拖放功能。我搜索了有关 DnD 的 Tree 组件,但没有找到与树相关的内容。 我在 Stackblitz 上找到的一个工作示例.对比drag'ndrop功能
我必须开发一个自定义选项卡控件并决定使用 WPF/XAML 创建它,因为我无论如何都打算学习它。完成后应该是这样的: 到目前为止,我取得了很好的进展,但还有两个问题: 只有第一个/最后一个标签项应该有
我要定制xtable用于导出到 LaTeX。我知道有些问题是关于 xtable在这里,但我找不到我要找的具体东西。 以下是我的表的外观示例: my.table <- data.frame(Specif
用ejs在这里显示日期 它给我结果 Tue Feb 02 2016 16:02:24 GMT+0530 (IST) 但是我需要表现为 19th January, 2016 如何在ejs中执行此操作?
我想问在 JavaFX 中使用自定义对象制作 ListView 的最佳方法,我想要一个每个项目如下所示的列表: 我搜了一下,发现大部分人都是用细胞工厂的方法来做的。有没有其他办法?例如使用客户 fxm
我是一名优秀的程序员,十分优秀!