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!
Package Version |
Laravel Version |
Bug Fixes Until |
|
##9 | 6 | October 5th, 2021 | Documentation |
10 | 6, 7 | October 5th, 2021 | Documentation |
11 | 8 | April 6th, 2021 | Documentation |
Execute the installation command:
composer require vladimir-yuldashev/laravel-queue-rabbitmq
Copy after login
Wait for the installation to complete and add: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">&#39;connections&#39; => [
// ...
&#39;rabbitmq&#39; => [
&#39;driver&#39; => &#39;rabbitmq&#39;,
&#39;queue&#39; => env(&#39;RABBITMQ_QUEUE&#39;, &#39;default&#39;),
&#39;connection&#39; => PhpAmqpLib\Connection\AMQPLazyConnection::class,
&#39;hosts&#39; => [
[
&#39;host&#39; => env(&#39;RABBITMQ_HOST&#39;, &#39;127.0.0.1&#39;),
&#39;port&#39; => env(&#39;RABBITMQ_PORT&#39;, 5672),
&#39;user&#39; => env(&#39;RABBITMQ_USER&#39;, &#39;guest&#39;),
&#39;password&#39; => env(&#39;RABBITMQ_PASSWORD&#39;, &#39;guest&#39;),
&#39;vhost&#39; => env(&#39;RABBITMQ_VHOST&#39;, &#39;/&#39;),
],
],
&#39;options&#39; => [
&#39;ssl_options&#39; => [
&#39;cafile&#39; => env(&#39;RABBITMQ_SSL_CAFILE&#39;, null),
&#39;local_cert&#39; => env(&#39;RABBITMQ_SSL_LOCALCERT&#39;, null),
&#39;local_key&#39; => env(&#39;RABBITMQ_SSL_LOCALKEY&#39;, null),
&#39;verify_peer&#39; => env(&#39;RABBITMQ_SSL_VERIFY_PEER&#39;, true),
&#39;passphrase&#39; => env(&#39;RABBITMQ_SSL_PASSPHRASE&#39;, null),
],
&#39;queue&#39; => [
&#39;job&#39; => VladimirYuldashev\LaravelQueueRabbitMQ\Queue\Jobs\RabbitMQJob::class,
],
],
/*
* Set to "horizon" if you wish to use Laravel Horizon.
*/
&#39;worker&#39; => env(&#39;RABBITMQ_WORKER&#39;, &#39;default&#39;),
],
// ... ],</pre><div class="contentsignin">Copy after login</div></div>
to
config/queue.php and add it to config/ Modify in queue.php
:
//把sync修改为rabbitmq,同理使用redis驱动则修改为redis
'default' => env('QUEUE_CONNECTION', 'sync'),
'default' => env('QUEUE_CONNECTION', 'rabbitmq'),
//或者修改.env下QUEUE_CONNECTION=rabbitmq
QUEUE_CONNECTION=rabbitmq
Copy after login
Execute command to generate task class:
php artisan make:job TestQueue
Copy after login
Modify TestQueue.php
Code:
<?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"]]
);
}
}
Copy after login
Call queue Function:
public function test(Request $request){
$data = ["name" => "李大", "phone" => "12345678901"];
$this->dispatch(new TestQueue($data));
}
Copy after login
Open the queue:
php artisan queue:work
Copy after login
Copy after login
The execution result after calling the function:
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
Copy after login
Open the queue:
php artisan queue:work
Copy after login
Copy after login
Test the queue (the code is the same as method 1 code) Result:
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
Copy after login
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 ".*" ".*" ".*"
Copy after login
Check the user permissions in the rabbitmq-server management background:
The permissions are Can access virtual hosts
/ is displayed. If there is no permission,
No Access is displayed.
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.
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
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!