繁体   English   中英

Laravel 队列工作器中的持久连接

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM