简单的 Laravel 和 RabbitMQ 实例

这里是一个简单的 Laravel 和 RabbitMQ 实例。

首先,你需要安装 RabbitMQ 扩展。可以使用 composer 安装 php-amqplib/php-amqplib

composer require php-amqplib/php-amqplib

然后,你需要在 Laravel 中添加 RabbitMQ 配置。在 config 目录下创建一个名为 rabbitmq.php 的文件:

return [
    'host' => env('RABBITMQ_HOST', 'localhost'),
    'port' => env('RABBITMQ_PORT', 5672),
    'username' => env('RABBITMQ_USERNAME', 'guest'),
    'password' => env('RABBITMQ_PASSWORD', 'guest'),
    'queue' => env('RABBITMQ_QUEUE', 'default'),
];

接下来,你需要创建一个 RabbitMQ 生产者和消费者。在 Laravel 中,可以使用 php artisan make:job 命令创建一个队列任务:

php artisan make:job SendMessageJob

app/Jobs/SendMessageJob.php 文件中,编写发送消息的代码:

use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;

class SendMessageJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $message;

    public function __construct($message)
    {
        $this->message = $message;
    }

    public function handle()
    {
        $connection = new AMQPStreamConnection(config('rabbitmq.host'), config('rabbitmq.port'), config('rabbitmq.username'), config('rabbitmq.password'));
        $channel = $connection->channel();

        $channel->queue_declare(config('rabbitmq.queue'), false, true, false, false);

        $msg = new AMQPMessage($this->message);
        $channel->basic_publish($msg, '', config('rabbitmq.queue'));

        $channel->close();
        $connection->close();
    }
}

这个任务的作用是将消息发送到 RabbitMQ 队列中。

接下来,你需要创建一个消费者监听该队列。在 Laravel 中,可以使用 php artisan make:command 命令创建一个 Artisan 命令:

php artisan make:command ListenMessageCommand

app/Console/Commands/ListenMessageCommand.php 文件中,编写监听队列的代码:

use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;

class ListenMessageCommand extends Command
{
    protected $signature = 'listen:message';

    protected $description = 'Listen message from RabbitMQ';

    public function handle()
    {
        $connection = new AMQPStreamConnection(config('rabbitmq.host'), config('rabbitmq.port'), config('rabbitmq.username'), config('rabbitmq.password'));
        $channel = $connection->channel();

        $channel->queue_declare(config('rabbitmq.queue'), false, true, false, false);

        $callback = function ($msg) {
            $this->info('Received: ' . $msg->body);

            $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
        };

        $channel->basic_qos(null, 1, null);
        $channel->basic_consume(config('rabbitmq.queue'), '', false, false, false, false, $callback);

        while (count($channel->callbacks)) {
            $channel->wait();
        }

        $channel->close();
        $connection->close();
    }
}

这个命令的作用是监听 RabbitMQ 队列并打印消息。

接下来,你就可以使用 Laravel Artisan 命令来发送和监听消息了:

php artisan queue:work # 启动默认队列消费者
php artisan listen:message # 启动 RabbitMQ 队列消费者
php artisan queue:work --queue=queue_name # 启动指定队列消费者
php artisan queue:work --tries=3 # 设置队列任务尝试次数
php artisan queue:work --timeout=60 # 设置队列任务超时时间
php artisan queue:work --sleep=10 # 设置队列任务运行休息时间

这就是一个简单的 Laravel 和 RabbitMQ 实例。

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值