gpt4 book ai didi

ruby 事件机器 + AMQP : Ensuring specific async calls happen before raising exceptions

转载 作者:数据小太阳 更新时间:2023-10-29 07:37:04 25 4
gpt4 key购买 nike

我们正在用 Ruby 构建一个支持 AMQP 的消息传递系统。但是,我们在错误处理方面遇到了问题。

我们维护一个异常白名单,这是安全的,并且 RabbitMQ 中的消息可以不被确认并由另一个工作人员重试。然而,对于未知或不可预见的错误,我们假设无论工作人员尝试消息多少次,同样的失败总是会发生。

这意味着,当出现未知错误时,我们需要捕获它,将其记录在某个地方(目前是 MySQL),然后向 RabbitMQ 发送一个 ACK 调用以从队列中删除消息。

目前一切都是使用 amqp gem 构建的,它是用 EventMachine 触发的。这会导致问题,因为调用 #ack 方法,并不意味着 ACK 由于 gem 的异步行为已发送到 RabbitMQ。

Previous 我通过粗略地将加薪代码放在 EM.next_tick 中解决了这个问题。现在我们需要对每个 Ruby worker 进行多线程处理以提高性能,而 next_tick 不起作用。

简而言之:

在 amqp gem 中的异步 ACK 调用之后,您将如何以同步方式运行一段特定的代码?回调会很好,但没有可用的回调,至少在没有一些严重邪恶的猴子补丁的情况下是这样。

最佳答案

我很乐意为您修复 https://github.com/ruby-amqp/amqp/issues/issue/9目前,gem 的行为不像一个行为良好的异步库,并且很多地方都缺少回调。我正在努力解决这个问题。我会尝试修复它,直到我今天即将发布的 0.7,我希望。

关于 ruby 事件机器 + AMQP : Ensuring specific async calls happen before raising exceptions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4692207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com