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

Ank*_*ise 3 php laravel laravel-5

我正在尝试使用第三方库在我的 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();
Run Code Online (Sandbox Code Playgroud)

我的目标是在通过 Laravel 队列工作程序发送消息时保持连接连接。

就像如果 que 工人建立一样

$connection = new CustomConnection();
$connection->refresh();
Run Code Online (Sandbox Code Playgroud)

每 5 秒执行$connection->refresh()一次,每当作业添加到队列中时,它就应该执行

$connection->sendMessage('user@myapp.com', ['message'=>'something', 'ttl'=>3600]);
$connection->refresh();
Run Code Online (Sandbox Code Playgroud)

代码块。

我不知道 laravel 的核心队列如何在后端工作,以及我是否可以重写它的功能以及如何重写。

谢谢。

sis*_*sve 5

在您的服务提供程序中,将连接(或使用该连接的服务)注册为singleton。将其声明为您的作业的依赖项,并且您的所有作业在队列工作线程的生命周期内都将具有相同的连接/服务实例。

您不可能每五秒执行一次 $connection->refresh() 。如果此调用的目的是某种心跳/运行状况检查,请侦听与队列相关的事件并使用这些事件。JobProcessing、JobProcessed、JobFailed 和 Looping 的组合将允许您在作业执行之前和之后执行代码。您可以使用它们来评估是否应该调用 $connection->refresh(),例如自上次调用以来是否已经过去了至少五秒。

分派作业时,没有可用于运行代码的事件。

不要尝试覆盖队列系统的内部工作原理。不承诺不同 Laravel 版本之间的向后兼容性,并且您必须跟踪上游引入的所有(可能的)细微更改。