[英]Persistent connection in laravel queue worker
我正在尝试使用第三方库在我的 laravel 应用程序上设置服务以连接到提供者。
它的代码如下
$connection = new CustomConnection();
$connection->refresh();
$connection->sendMessage('user@myapp.com', ['message'=>'something', 'ttl'=>3600]);
$connection->refresh();
$connection->sendMessage('user2@myapp.com', ['message'=>'something', 'ttl'=>3600]);
$connection->close();
我的目标是在通过 laravel 队列工作器发送消息时保持连接连接。
就像如果que worker建立一样
$connection = new CustomConnection();
$connection->refresh();
每 5 秒执行一次$connection->refresh()
每当在队列中添加作业时它都应该执行
$connection->sendMessage('user@myapp.com', ['message'=>'something', 'ttl'=>3600]);
$connection->refresh();
代码块。
我不知道 laravel 的核心队列是如何在后端工作的,以及我是否可以覆盖它的功能以及如何覆盖。
谢谢。
在您的服务提供商中,将连接(或使用该连接的服务)注册为单例 。 将此声明为您的作业的依赖项,并且在队列工作者的整个生命周期中,所有作业都将具有相同的连接/服务实例。
您无法每五秒钟执行一次$ connection-> refresh()。 如果此调用的目的是某种心跳/健康检查,请侦听与队列相关的事件,并改用这些事件 。 JobProcessing,JobProcessed,JobFailed和Looping的组合将使您能够在作业执行之前和之后执行代码。 您可以使用它们来评估是否应调用$ connection-> refresh(),例如自上次调用以来已过去至少五秒钟。
调度作业时,没有事件可用于运行代码。
不要尝试覆盖队列系统的内部工作原理。 在不同的Laravel版本之间没有向后兼容性的保证,并且您必须跟踪上游引入的所有(可能的)细微更改。
允许在队列作业之间持久化数据库会话* 此拉取请求允许在队列作业之间持久化数据库会话。 要选择加入此行为,用户只需将 VAPOR_QUEUE_DATABASE_SESSION_PERSIST 环境变量设置为 true。 允许进行一个非常简单的工作,至少使用一次数据库,在 512MB 的 lambda 函数中速度提高 45%。 https://github.com/laravel/vapor-core/pull/97
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.