Homestead環境でLaravelでRabbitMQを使用するにはどうすればよいですか? Homestead (ubuntu) Laravel で RabbitMQ を使用する方法を次の記事で紹介しますので、ご参考になれば幸いです。
パッケージのバージョン |
Laravel バージョン |
バグ修正まで |
|
##9 | 6 | 2021 年 10 月 5 日 | ドキュメント |
10 | 6、7 | 2021 年 10 月 5 日 | Documentation |
11 | 8 | 2021 年 4 月 6 日 | Documentation |
インストール コマンドを実行します:
composer require vladimir-yuldashev/laravel-queue-rabbitmq
ログイン後にコピー
インストールが完了するまで待ち、<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">ログイン後にコピー</div></div>
を
config/queue.php に追加して、 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
ログイン後にコピー
Modify 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
ログイン後にコピー
ログイン後にコピー
関数呼び出し後の実行結果:
Queue消費が成功した場合、データベースを確認すると、データも書き込まれます。正常に入力します。
使い方 2: laravel-queue-rabbitmq を使用する Rabbitmq-server
ここで疑問が生じますが、方法 1 は普通に使えるのですが、なぜそうする必要があるのでしょうか。これを追加しますrabbitmq-server
、rabbitmq-server
は何をしますか?
公式説明によると—RabbitMQ は機能が豊富なマルチプロトコル メッセージング ブローカーであり、サポートしています:
AMQP 0-9-1
-
AMQP 1.0
- ##MQTT 3.1.1
- STOMP 1.0 ~ 1.2
十分な翻訳: RabbitMQ は、機能が豊富なマルチプロトコル メッセージ ブローカーです。以下のプロトコルをサポートしています。 RabbitMQ 公式 Web サイトの説明によると:RabbitMQ は多くのオペレーティング システムとクラウド環境で実行され、最も一般的な言語に対応する幅広い開発者ツールを提供します。 翻訳: RabbitMQ は多くのオペレーティング システムおよびクラウド環境で実行され、最も一般的な言語に対応する幅広い開発ツールを提供します。
rabbitmq-server を使用すると、全員にサーバーが提供されます。言語に関係なく、アカウントとパスワードを使用して、対応する
host と
port# に接続します。 ## は RabbitMQ を使用できます。同様のものにはEMQX(mqttサーバー)などがあります。また、rabbitmq-server
は、キューの関連ステータスを表示して管理を容易にする管理バックグラウンドを提供します。
rabbitmq-server を開始します:
sudo service rabbitmq-server start
ログイン後にコピー
キューを開きます:
php artisan queue:work
ログイン後にコピー
ログイン後にコピー
キューをテストします (コードはメソッド 1 のコードと同じです) 結果:
注:
username と #。 php
##password での接続にデフォルトのゲスト アカウントとパスワードを使用しないでください。そうしないと、エラーが報告されます:
The connection timed out after 3 sec while awaiting incoming data
ログイン後にコピー
管理者アカウントとパスワードは、前の記事で追加されています。このアカウントとパスワードを使用するには、管理者アカウントに権限を追加する必要もあります:
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
ログイン後にコピー
rabbitmq-server
管理バックグラウンドでユーザー権限を確認します:
権限は Can access virtual hosts
/ が表示され、権限がない場合は
No Access が表示されます。
その他の使用法2. これと同様の使用法を使用できます: Java は RabbitMQ を操作し、laravel から離脱し、メソッドを使用します。プロデューサーとコンシューマーの接続;3. 他の通信プロトコル (MQTT など) へのアクセス、トピックのサブスクライブなど、より複雑な使用法も使用できます。具体的な使用法については、RabbitMQ 公式を参照してください。 Webサイト。
概要 もちろん、その一方で、古いルールに固執することはできません。私たちが自分自身と愛するキャリアにふさわしい人間になるためには、スキル パッケージをタイムリーに更新し、改善する必要があります。
関連する推奨事項:
最新の 5 つの Laravel ビデオ チュートリアル
以上がlaravelでRabbitMQを使う方法(Homestead環境)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。