In Laravel how to create a queue object and set their connection without Facade

帅比萌擦擦* 提交于 2019-12-12 11:13:17

问题


In Lumen/Laravel I want to send a message to a given queue.

by default I have it set to Redis, what I would like is to send it to another queue server as another application will take care of it.

I know I can do $queue->pushRaw('payload'); However there is no subsequent way for me to pick the connection.

I am aware that I can use Facade to create my Queue as such:

$connection = Queue::connection('connection_name');
$connection->pushOn('queue_name', $job)

However I'm doing this in Lumen, and would like to avoid turning on the Facade Just for this aspect. Also, I would like to know how to do this as I would like to pass by IoC through a job event handler eventually.

Version of Lumen/Laravel 5.2.


回答1:


As @Mois44 alluded to, you should be able to accomplish this with the QueueManager.

The QueueManager will allow you to call the connection() method, which will return a Queue object. And from here, you can call the normal queued functions (pushOn, laterOn, etc)

// Returns an Illuminate\Queue\QueueManager object
$queueManager = app('queue'); 

// Returns an Illuminate\Queue\Queue object
$queue = $queueManager->connection('my-connection'); 

$queue->pushOn('queue_name', $job);

or all chained together

app('queue')->connection('my-connection')->pushOn('queue_name', $job)

Admittedly, my Lumen specific knowledge is pretty limited. If the app() method doesn't work to get an instance of the QueueMananger, then I'm not sure what to do.



来源:https://stackoverflow.com/questions/37356124/in-laravel-how-to-create-a-queue-object-and-set-their-connection-without-facade

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!