Home  >  Article  >  PHP Framework  >  How to use RabbitMQ in laravel (Homestead environment)

How to use RabbitMQ in laravel (Homestead environment)

青灯夜游
青灯夜游forward
2021-12-27 10:51:003257browse

How to use RabbitMQ with Laravel in Homestead environment? The following article will introduce to you how to use RabbitMQ in Homestead (ubuntu) Laravel. I hope it will be helpful to you!

How to use RabbitMQ in laravel (Homestead environment)

Homestead(ubuntu) Laravel using RabbitMQ

Usage 1: Use laravel-queue-rabbitmq alone

Laravel installation RabbitMQ:
First pay attention to the laravel version information supported by laravel-queue-rabbitmq:

##96October 5th, 2021Documentation106, 7October 5th, 2021Documentation118April 6th, 2021Documentation

Execute the installation command:

composer require vladimir-yuldashev/laravel-queue-rabbitmq

Wait for the installation to complete and add: <pre class="brush:js;toolbar:false;">&amp;#39;connections&amp;#39; =&gt; [ // ... &amp;#39;rabbitmq&amp;#39; =&gt; [ &amp;#39;driver&amp;#39; =&gt; &amp;#39;rabbitmq&amp;#39;, &amp;#39;queue&amp;#39; =&gt; env(&amp;#39;RABBITMQ_QUEUE&amp;#39;, &amp;#39;default&amp;#39;), &amp;#39;connection&amp;#39; =&gt; PhpAmqpLib\Connection\AMQPLazyConnection::class, &amp;#39;hosts&amp;#39; =&gt; [ [ &amp;#39;host&amp;#39; =&gt; env(&amp;#39;RABBITMQ_HOST&amp;#39;, &amp;#39;127.0.0.1&amp;#39;), &amp;#39;port&amp;#39; =&gt; env(&amp;#39;RABBITMQ_PORT&amp;#39;, 5672), &amp;#39;user&amp;#39; =&gt; env(&amp;#39;RABBITMQ_USER&amp;#39;, &amp;#39;guest&amp;#39;), &amp;#39;password&amp;#39; =&gt; env(&amp;#39;RABBITMQ_PASSWORD&amp;#39;, &amp;#39;guest&amp;#39;), &amp;#39;vhost&amp;#39; =&gt; env(&amp;#39;RABBITMQ_VHOST&amp;#39;, &amp;#39;/&amp;#39;), ], ], &amp;#39;options&amp;#39; =&gt; [ &amp;#39;ssl_options&amp;#39; =&gt; [ &amp;#39;cafile&amp;#39; =&gt; env(&amp;#39;RABBITMQ_SSL_CAFILE&amp;#39;, null), &amp;#39;local_cert&amp;#39; =&gt; env(&amp;#39;RABBITMQ_SSL_LOCALCERT&amp;#39;, null), &amp;#39;local_key&amp;#39; =&gt; env(&amp;#39;RABBITMQ_SSL_LOCALKEY&amp;#39;, null), &amp;#39;verify_peer&amp;#39; =&gt; env(&amp;#39;RABBITMQ_SSL_VERIFY_PEER&amp;#39;, true), &amp;#39;passphrase&amp;#39; =&gt; env(&amp;#39;RABBITMQ_SSL_PASSPHRASE&amp;#39;, null), ], &amp;#39;queue&amp;#39; =&gt; [ &amp;#39;job&amp;#39; =&gt; VladimirYuldashev\LaravelQueueRabbitMQ\Queue\Jobs\RabbitMQJob::class, ], ], /* * Set to &quot;horizon&quot; if you wish to use Laravel Horizon. */ &amp;#39;worker&amp;#39; =&gt; env(&amp;#39;RABBITMQ_WORKER&amp;#39;, &amp;#39;default&amp;#39;), ], // ... ],</pre> to

config/queue.php

and add it to config/ Modify in queue.php:

//把sync修改为rabbitmq,同理使用redis驱动则修改为redis
&#39;default&#39; => env(&#39;QUEUE_CONNECTION&#39;, &#39;sync&#39;),
&#39;default&#39; => env(&#39;QUEUE_CONNECTION&#39;, &#39;rabbitmq&#39;),
//或者修改.env下QUEUE_CONNECTION=rabbitmq
QUEUE_CONNECTION=rabbitmq

Execute command to generate task class:

php artisan make:job TestQueue

Modify TestQueue.phpCode:

<?php

namespace App\Jobs;

use App\Models\UserInfo;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

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

    private $data;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($data)
    {
        //
        $this->data = $data;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        //
        $data = $this->data;
        UserInfo::query()->firstOrCreate(
            ["phone" => $data["phone"]],
            ["name" => $data["name"]]
        );
    }
}

Call queue Function:

public function test(Request $request){
    $data = ["name" => "李大", "phone" => "12345678901"];
    $this->dispatch(new TestQueue($data));
}

Open the queue:

php artisan queue:work

The execution result after calling the function:

How to use RabbitMQ in laravel (Homestead environment)

Queue consumption is successful, check the database, and the data is also written Enter normal.

Usage 2: Using laravel-queue-rabbitmq rabbitmq-server

At this point, there will be a question. Since method 1 can be used normally, why should we add itrabbitmq-server, what do rabbitmq-server do?
According to the official description——RabbitMQ is a feature rich, multi-protocol messaging broker. It supports:

  • AMQP 0-9-1

  • AMQP 1.0

  • MQTT 3.1.1

  • STOMP 1.0 through 1.2

Translation Enough: RabbitMQ is a feature-rich multi-protocol message broker. It supports the following protocols.

According to the description on the RabbitMQ official website:

RabbitMQ runs on many operating systems and cloud environments, and provides a wide range of developer tools for most popular languages.

Translated:

RabbitMQ runs on many operating systems and cloud environments and provides a wide range of development tools for most popular languages.

To sum up: Method 1 uses the laravel queue method, which is relatively simple and does not involve too many conceptual things in the queue (such as producers and Consumers, etc.), and using rabbitmq-server provides a server for everyone. No matter what language it is, use the account and password to connect to the corresponding host and port can use RabbitMQ. Similar ones include EMQX (mqtt server) and so on. And rabbitmq-server provides a management background where you can view the relevant status of the queue for easy management.

Start rabbitmq-server:

sudo service rabbitmq-server start

Open the queue:

php artisan queue:work

Test the queue (the code is the same as method 1 code) Result:

How to use RabbitMQ in laravel (Homestead environment)

How to use RabbitMQ in laravel (Homestead environment)

Note:

username and # in config/queue.php Do not use the default guest account and password to connect in ##password, otherwise an error will be reported:

The connection timed out after 3 sec while awaiting incoming data

The admin account and password have been added in the previous article. To use this account and password, you also need to add permissions to the admin account:

sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

Check the user permissions in the

rabbitmq-server management background:

laravel 队列之How to use RabbitMQ in laravel (Homestead environment)

The permissions are

Can access virtual hosts / is displayed. If there is no permission, No Access is displayed.

Other usage

1. laravel-queue-rabbitmq Supervisor daemon. In essence, it is to change the queue driver, and the usage is no different from redis;

2. You can use a usage similar to this: java operates RabbitMQ, breaks away from laravel, and uses the method of connecting producers and consumers;

3. You can also use more complex usage, such as accessing other communication protocols (such as MQTT), subscribing to topics, etc. For specific usage, please refer to the RabbitMQ official website.

Summary

The regular use of laravel redis queue Supervisor can already meet our daily needs. According to Qian Lao's "Engineering Cybernetics" - for a system, the latest or most advanced technology may not be the best. What is suitable for the system and ensures the stability of the system is the best.

Of course, on the other hand, we cannot stick to the old rules. Our skill packages must be updated and improved in a timely manner, so that we can be worthy of ourselves and the career we love.

Related recommendations:

The latest five Laravel video tutorials

Package Version Laravel Version Bug Fixes Until

The above is the detailed content of How to use RabbitMQ in laravel (Homestead environment). For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:learnku.com. If there is any infringement, please contact admin@php.cn delete