我正在尝试使用第三方库在我的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的核心队列在后端是如何工作的,以及我是否可以覆盖它的功能以及如何。
感谢。
答案 0 :(得分:0)
在您的服务提供商中,将连接(或使用该连接的服务)注册为 singleton 。将此声明为作业的依赖项,并且所有作业将在队列工作程序的生命周期内具有相同的连接/服务实例。
你无法每五秒钟执行$ connection-> refresh()。如果此呼叫的目的是某种心跳/健康检查,请听取queue-related events并使用这些。 JobProcessing,JobProcessed,JobFailed和Looping的组合将允许您在作业执行之前和之后执行代码。您可以使用它们来评估是否应该调用$ connection-> refresh(),就像上次调用后至少已经过了五秒钟一样。
在调度作业时,没有任何事件可用于运行代码。
不要尝试覆盖队列系统的内部工作方式。不同的Laravel版本之间没有向后兼容的承诺,你必须跟踪上游引入的所有(可能的)细微变化。