我在Laravel中找到了使用RabbitMQ的famous library。在配置config/queue.php中,我只能指定一个交换和队列名称。它是否支持多个交换?
config/queue.php
iih3973s1#
对于未来的人谁将搜索这个问题的答案。有一个(坏)的方式来添加多个交换。你必须复制rabbitmq连接与新的交换,当你想要发布消息到新的交换,你只需改变连接。这是一个非常丑陋的方式,但我没有另一个。Laravel队列没有提供一个方法来改变交换,但有一个方法onConnection你帮你。下面是一个简单的示例
onConnection
'conn_one' => [ 'driver' => 'rabbitmq', 'queue' => env('RABBITMQ_QUEUE', 'default'), 'connection' => PhpAmqpLib\Connection\AMQPLazyConnection::class, 'hosts' => [ [ 'host' => env('RABBITMQ_HOST', '127.0.0.1'), 'port' => env('RABBITMQ_PORT', 5672), 'user' => env('RABBITMQ_USER', 'guest'), 'password' => env('RABBITMQ_PASSWORD', 'guest'), 'vhost' => env('RABBITMQ_VHOST', '/'), ], ], 'options' => [ 'ssl_options' => [ 'cafile' => env('RABBITMQ_SSL_CAFILE', null), 'local_cert' => env('RABBITMQ_SSL_LOCALCERT', null), 'local_key' => env('RABBITMQ_SSL_LOCALKEY', null), 'verify_peer' => env('RABBITMQ_SSL_VERIFY_PEER', true), 'passphrase' => env('RABBITMQ_SSL_PASSPHRASE', null), ], 'queue' => [ 'job' => VladimirYuldashev\LaravelQueueRabbitMQ\Queue\Jobs\RabbitMQJob::class, 'exchange' => 'exchange_two', 'exchange_type' => 'fanout', ], ], ], 'conn_two' => [ 'driver' => 'rabbitmq', 'queue' => env('RABBITMQ_QUEUE', 'default'), 'connection' => PhpAmqpLib\Connection\AMQPLazyConnection::class, 'hosts' => [ [ 'host' => env('RABBITMQ_HOST', '127.0.0.1'), 'port' => env('RABBITMQ_PORT', 5672), 'user' => env('RABBITMQ_USER', 'guest'), 'password' => env('RABBITMQ_PASSWORD', 'guest'), 'vhost' => env('RABBITMQ_VHOST', '/'), ], ], 'options' => [ 'ssl_options' => [ 'cafile' => env('RABBITMQ_SSL_CAFILE', null), 'local_cert' => env('RABBITMQ_SSL_LOCALCERT', null), 'local_key' => env('RABBITMQ_SSL_LOCALKEY', null), 'verify_peer' => env('RABBITMQ_SSL_VERIFY_PEER', true), 'passphrase' => env('RABBITMQ_SSL_PASSPHRASE', null), ], 'queue' => [ 'job' => VladimirYuldashev\LaravelQueueRabbitMQ\Queue\Jobs\RabbitMQJob::class, 'exchange' => 'exchange_two', 'exchange_type' => 'fanout', ], ], ],
使用
ExampleJob::dispach($data)->onConnection('conn_one'); ExampleJob::dispach($data)->onConnection('conn_two');
jmo0nnb32#
或者另一种糟糕的方式是这样设置配置
Config::set('queue.connections.rabbitmq.options.queue.exchange', 'exchange_two');
在将作业分派到新交换机之前。这样,在将作业分派到新交换机之前,只需设置新交换机名称,就不必创建重复的连接。
2条答案
按热度按时间iih3973s1#
对于未来的人谁将搜索这个问题的答案。有一个(坏)的方式来添加多个交换。你必须复制rabbitmq连接与新的交换,当你想要发布消息到新的交换,你只需改变连接。
这是一个非常丑陋的方式,但我没有另一个。Laravel队列没有提供一个方法来改变交换,但有一个方法
onConnection
你帮你。下面是一个简单的示例
使用
jmo0nnb32#
或者另一种糟糕的方式是这样设置配置
在将作业分派到新交换机之前。这样,在将作业分派到新交换机之前,只需设置新交换机名称,就不必创建重复的连接。