maksimdimitrov / mdim-amqp-laravel
php-amqplib 的 Laravel 服务提供者,用于使用 RabbitMQ
Requires
- php-amqplib/php-amqplib: ^3.0
This package is auto-updated.
Last update: 2024-09-21 12:30:14 UTC
README
该包是为 Laravel 5.7 版本以上开发的
如何安装
选项 1
使用 composer require maksimdimitrov/mdim-amqp-laravel
选项 2
将以下内容添加到您的 composer.json 文件中 "require" 部分
"maksimdimitrov/mdim-amqp-laravel": "dev-master"
并在 "repositories" 部分
{ "type": "vcs", "url": "https://github.com/maksimdimitrov/mdim-amqp-laravel.git" }
下一步:运行 composer install
下一步是运行 php artisan vendor:publish --tag=mdim_rabbitmq-config 以发布配置文件 config/mdim_rabbitmq.php。检查可用的命令 mdim_rabbitmq:publish_hello 和 mdim_rabbitmq:start_consumer 'App\SomeConsumers\SomeJob',使用 php artisan
config/mdim_rabbitmq.php 中的配置
您可以有多个连接:默认、some-other-rabbitmq-service 等...
return [
'connections' => [
'default' => [
/** optional, it will default to AMQPStreamConnection */
'connectionClass' => PhpAmqpLib\Connection\AMQPStreamConnection::class,
'connectionConfig' => [
[
'host' => 'rabbitmq',
'port' => '5672',
'user' => 'guest',
'password' => 'guest',
],
],
'connectionOptions' => [],
],
'some-other-rabbitmq-service' => [
'connectionConfig' => [
[
'host' => 'localhost',
'port' => '5672',
'user' => 'guest',
'password' => 'guest',
],
],
],
],
];
如何使用
您需要创建一个新的作业类,该类将充当消费者,并在收到消息时持有回调函数。该类必须扩展 MdimAMQPLaravel\ReceiveJob 并实现 handle() 函数,该函数是回调函数。您可以使用依赖注入容器注入服务。您还需要定义 getConnectionName()、getQueueName() 和 getConsumerTag(),检查 AMQP 文档中属性描述 https://rabbitmq.cn/amqp-0-9-1-reference.html#basic.consume getConnectionName() 应返回 config/mdim_rabbitmq.php 中连接的名称,例如 default 或 some-other-rabbitmq-service
您可以根据您的消费者需求重写 MdimAMQPLaravel\ReceiveJob 中的所有静态方法。
有两个可运行的示例。检查作业类 MdimAMQPLaravel\Examples\HelloJob,它将在启动后消费消息。您可以使用示例命令类 MdimAMQPLaravel\Examples\HelloCommand 发送消息
使用控制台命令启动此示例 php artisan mdim_rabbitmq:start_consumer 'MdimAMQPLaravel\Examples\HelloJob'
在另一个控制台中运行命令 php artisan mdim_rabbitmq:publish_hello
在第一个控制台中,您应该会看到接收到的消息。
在您编写带有示例名称的作业工作类 SomeNamespace\SomeClass 后,可以使用以下方式启动它
php artisan mdim_rabbitmq:start_consumer 'SomeNamespace\SomeClass'
发布消息可以不使用命令,也可以从控制器中像这样进行
app('mdim_rabbitmq-publisher')
->connection('default') // default is the connection name from config file, e.g. default or some-other-rabbitmq-service
->queue('some-queue-name', false, true, false, false)
->publish('Hello message', ['delivery_mode' => \PhpAmqpLib\Message\AMQPMessage::DELIVERY_MODE_PERSISTENT], '', 'some-queue-name')
->close();
一个示例消费者类可以是
namespace SomeNamespace;
use MdimAMQPLaravel\ReceiveJob;
class SomeClass extends ReceiveJob
{
public function handle()
{
echo 'message -> ' . $this->msg->body . PHP_EOL;
$this->msg->delivery_info['channel']->basic_ack($this->msg->delivery_info['delivery_tag']);
}
public static function getConnectionName()
{
return 'default'; // default is the connection name from config file, e.g. default or some-other-rabbitmq-service
}
public static function getQueueName()
{
return 'some-queue-name';
}
public static function getConsumerTag()
{
return '';
}
}