【问题标题】:How can i create a rails worker which is always connected to an external service?如何创建始终连接到外部服务的 rails worker?
【发布时间】:2017-08-05 13:34:33
【问题描述】:

我有一个 Rails 应用程序,它缓存来自外部服务的数据并将其转换为 json。外部服务使用自己的基于 RPC 约定的协议。

基本上,我需要一个后台工作人员,通过使用该协议来回 ping 来保持连接处于活动状态。当 rails 应用程序向其发送作业时,worker 将其转换为对外部服务的查询,并将转换后的 json 数据传输回应用程序。应用程序然后将其缓存并将其传输回给用户。

不同的方法是在每个作业上使用 sidekiq 和连接/断开连接。这是低效的。

我需要一些关于这个话题的建议。甚至可能采用不同的方法。提前致谢!

【问题讨论】:

    标签: ruby-on-rails external sidekiq worker


    【解决方案1】:

    设置一个pool of connections 供在 Sidekiq 中运行的作业使用。

    【讨论】:

    • sidekiq worker 不使用连接时,我可以回答外部服务器的 ping 吗?
    • 不太可能。您需要一个带有事件循环的单独线程来处理连接。
    【解决方案2】:

    您可以在 sidekiq 进程启动时或在第一个请求时创建连接客户端的全局实例。我假设客户端是单线程的,您可以通过将 Sidekiq 的 concurrency 级别设置为 1 来处理它。如果这是一个问题,那么您将需要做一些更复杂的事情,比如创建一个连接池。

    【讨论】:

    • 这个可以用。客户端是单线程的。但那我怎么能回答服务器的 ping 呢?我还没有处理过这种低级的东西。没关系,我最好去阅读文档。
    • 您需要提供有关您正在使用的库以及可能的服务器的更多信息
    • 自编码。如果有的话,你可以给我指一个文档,那就太好了。我想我会坚持 Mark Perham 的方法
    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多