我如何创建一个始终连接到外部服务的 rails worker?

How can i create a rails worker which is always connected to an external service?

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

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

不同的方法是在每个作业上使用 sidekiq 和 connect/disconnect。这是低效的。

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

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

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