6, 7 5. Oktober 2021Führen Sie den Installationsbefehl aus:
composer require vladimir-yuldashev/laravel-queue-rabbitmq
Warten Sie, bis die Installation abgeschlossen ist, und fügen Sie Folgendes hinzu: config/queue.php
中添加:
'connections' => [
// ...
'rabbitmq' => [
'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,
],
],
/*
* Set to "horizon" if you wish to use Laravel Horizon.
*/
'worker' => env('RABBITMQ_WORKER', 'default'),
],
// ... ],
并且在config/queue.php
中修改:
//把sync修改为rabbitmq,同理使用redis驱动则修改为redis
'default' => env('QUEUE_CONNECTION', 'sync'),
'default' => env('QUEUE_CONNECTION', 'rabbitmq'),
//或者修改.env下QUEUE_CONNECTION=rabbitmq
QUEUE_CONNECTION=rabbitmq
执行命令生成任务类:
php artisan make:job TestQueue
修改TestQueue.php
代码:
<?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"]]
);
}
}
调用队列函数:
public function test(Request $request){
$data = ["name" => "李大", "phone" => "12345678901"];
$this->dispatch(new TestQueue($data));
}
开启队列:
php artisan queue:work
调用函数后执行结果:
队列消费成功,查看数据库,数据也写入正常。
用法2:使用laravel-queue-rabbitmq+rabbitmq-server
到这里,会有一个问题,既然方法1能够正常使用,为什么还要加入rabbitmq-server
,rabbitmq-server
又是干啥的?
根据官方描述——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
翻译过来就是:RabbitMQ 是一个功能丰富的多协议消息代理。 它支持以下几种协议。
根据RabbitMQ官网的描述:
RabbitMQ runs on many operating systems and cloud environments, and provides a wide range of developer tools for most popular languages.
翻译过来就是:
RabbitMQ 运行在许多操作系统和云环境中,并为大多数流行语言提供了广泛的开发工具。
总结起来就是:方法1使用的是laravel队列的使用方法,比较简单,并没有涉及到太多队列当中概念性的东西(例如生产者和消费者等等),而使用rabbitmq-server
,为大家提供了一个服务端,不管是什么语言,使用账号、密码连接到相应的host
和port
就能使用RabbitMQ。类似的还有EMQX(mqtt服务端)等等。并且rabbitmq-server
提供了一个管理后台,可以查看队列的相关情况,便于管理。
启动rabbitmq-server:
sudo service rabbitmq-server start
开启队列:
php artisan queue:work
测试队列(代码和方法1代码一样)结果:
注意:
在config/queue.php
的username
和password
里不要使用默认的guest账号密码来连接,否则会报错:
The connection timed out after 3 sec while awaiting incoming data
前文已经添加过admin的账号密码,使用这个账号密码还需要给admin账号添加权限:
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
在rabbitmq-server
管理后台查看用户权限:
有权限是Can access virtual hosts
显示/
,无权限就是显示No Access
rrreee
zu config/queue.php
und ändern Sie es in config/queue.php
: rrreeerrreee
Ändern Sie den TestQueue.php
-Code: rrreee
Rufen Sie die Warteschlangenfunktion auf: rrreee
Öffnen Sie die Warteschlange: rrreee
Ausführungsergebnis nach Aufruf der Funktion: Queue Der Verbrauch ist erfolgreich, überprüfen Sie die Datenbank und die Daten werden normal geschrieben.
Verwendung 2: Verwendung von laravel-queue-rabbitmq+rabbitmq-server
Da Methode 1 normal verwendet werden kann, stellt sich die Frage, warum wir rabbitmq-server
hinzufügen sollten >, rabbitmq-server? Laut offizieller Beschreibung ist RabbitMQ ein funktionsreicher Multiprotokoll-Messaging-Broker. Er unterstützt:
🎜AMQP 1.0🎜
🎜MQTT 3.1.1🎜
🎜STOMP 1.0 bis 1.2🎜🎜Die Übersetzung lautet: RabbitMQ ist ein funktionsreicher Multiprotokoll-Nachrichtenbroker. Es unterstützt die folgenden Protokolle. 🎜🎜🎜Laut der Beschreibung auf der offiziellen Website von RabbitMQ:🎜🎜RabbitMQ läuft auf vielen Betriebssystemen und Cloud-Umgebungen und bietet eine breite Palette von Entwicklertools für die gängigsten Sprachen.🎜🎜Übersetzung lautet:🎜🎜RabbitMQ läuft auf vielen Betriebssystemen Systeme und Cloud-Umgebungen und bietet eine breite Palette von Entwicklungstools für die gängigsten Sprachen. 🎜🎜🎜🎜🎜Zusammenfassend: Methode 1 verwendet die Laravel-Warteschlangenverwendungsmethode, die relativ einfach ist und nicht zu viele konzeptionelle Dinge in der Warteschlange umfasst (wie Produzenten und Verbraucher usw.) und rabbitmq verwendet -server
stellt einen Server für alle bereit, egal um welche Sprache es sich handelt. Verwenden Sie einfach das Konto und das Passwort, um eine Verbindung zum entsprechenden host
und port
herzustellen, um ihn zu verwenden . RabbitMQ. Ähnliche sind EMQX (MQTT-Server) und so weiter. Und rabbitmq-server
bietet einen Verwaltungshintergrund, in dem Sie den relevanten Status der Warteschlange zur einfachen Verwaltung anzeigen können. 🎜🎜Rabbitmq-Server starten: 🎜rrreee🎜Warteschlange öffnen: 🎜rrreee🎜Testen Sie die Warteschlange (der Code ist der gleiche wie bei Methode 1) Ergebnis: 🎜🎜🎜🎜🎜🎜🎜🎜Hinweis: 🎜🎜 in config/queue. php
Verwenden Sie nicht das Standard-Gastkonto und -Passwort in Benutzername
und Passwort
, um eine Verbindung herzustellen, andernfalls wird ein Fehler gemeldet: 🎜rrreee🎜Das Administratorkonto und das Passwort bereits hinzugefügt wurden, verwenden Sie dieses Konto und Passwort. Sie müssen auch Berechtigungen zum Administratorkonto hinzufügen: 🎜rrreee🎜 Überprüfen Sie die Benutzerberechtigungen im rabbitmq-server
-Verwaltungshintergrund: 🎜🎜🎜🎜Die Erlaubnis ist Kann auf virtuelle Hosts zugreifen Anzeige/, wenn keine Berechtigung vorliegt, wird Kein Zugriff
angezeigt. 🎜🎜🎜🎜Andere Verwendungen🎜🎜1. laravel-queue-rabbitmq+Supervisor-Daemon. Im Wesentlichen geht es darum, den Warteschlangentreiber zu ändern, und die Verwendung unterscheidet sich nicht von Redis. 🎜🎜2 Sie können eine ähnliche Verwendung verwenden: Java betreibt RabbitMQ ohne Laravel und verwendet die Methode „Verbindung + Produzent + Verbraucher“. 3. Sie können auch eine komplexere Verwendung verwenden, z. B. den Zugriff auf andere Kommunikationsprotokolle (z. B. MQTT), das Abonnieren von Themen usw. Informationen zur spezifischen Verwendung finden Sie auf der offiziellen Website von RabbitMQ. 🎜🎜🎜🎜Zusammenfassung🎜🎜Die regelmäßige Verwendung von Laravel + Redis Queue + Supervisor kann bereits unseren täglichen Bedarf decken. Laut Qian Laos „Engineering Cybernetics“ ist für ein System möglicherweise nicht die neueste oder fortschrittlichste Technologie die beste. Was für das System geeignet ist und die Stabilität des Systems gewährleistet. 🎜🎜Umgekehrt können wir natürlich nicht an den alten Regeln festhalten. Unsere Kompetenzpakete müssen zeitnah aktualisiert und verbessert werden, damit wir unserer selbst und dem Beruf, den wir lieben, würdig sind. 🎜🎜🎜Verwandte Empfehlungen: 🎜Die neuesten fünf Laravel-Video-Tutorials🎜🎜🎜