Art*_*hur 6 webhooks rabbitmq event-dispatching apache-kafka
我很难为 Webhook 调度系统找出可靠且可扩展的解决方案。
当前系统使用RabbitMQwebhook 队列(我们称之为events),该队列被消耗和调度。该系统运行了一段时间,但现在出现了一些问题:
RabbitMQ文档而言,该 API 在过滤非空队列或未分配消费者的队列方面非常有限。Kafka我了解,在阅读有关它的所有内容后,情况在单个分区的范围内是相同的。那么,问题是 - 有没有更好的方法/系统来实现此目的?也许我缺少一个非常简单的解决方案,可以让一个用户不干扰另一个用户?
提前致谢!
所以,我不确定这是否是解决这个问题的正确方法,但这就是我想到的。
先决条件:具有重复数据删除插件的 RabbitMQ
所以我的解决方案包括:
g:events队列 - 我们称之为队列parent。child该队列将包含所有需要处理的队列的名称。也许它可以用其他一些机制(比如 Redis 排序集或其他机制)替换,但是你必须自己实现 ack 逻辑。g:events:<url>- 有child队列。每个队列仅包含需要发送到该队列的事件url。将 Webhook 负载发布到 RabbitMQ 时,您将实际数据发布到child队列,然后另外将队列名称发布child到parent队列。重复数据删除插件不允许同一child队列被发布两次,这意味着只有一个消费者可以接收该child队列进行处理。
你们所有的消费者都在消费parent队列,收到消息后就开始消费child消息中指定的队列。child队列清空后,您确认该parent消息并继续。
此方法可以非常精细地控制child允许处理哪些队列。如果某个child队列花费了太多时间,则只需发送ack消息parent并将相同的数据重新发布到队列末尾parent。
我知道这可能不是最有效的方法(不断发布到队列也会产生一些开销parent),但事实就是如此。
| 归档时间: |
|
| 查看次数: |
1433 次 |
| 最近记录: |