> PHP 프레임워크 > Laravel > Laravel(Homestead 환경)에서 RabbitMQ를 사용하는 방법

Laravel(Homestead 환경)에서 RabbitMQ를 사용하는 방법

青灯夜游
풀어 주다: 2022-02-14 14:04:17
앞으로
3328명이 탐색했습니다.

Homestead 환경에서 Laravel과 함께 RabbitMQ를 어떻게 사용하나요? 다음 글에서는 Homestead(ubuntu) + Laravel과 함께 RabbitMQ를 사용하는 방법을 소개하겠습니다. 도움이 되셨으면 좋겠습니다!

Laravel(Homestead 환경)에서 RabbitMQ를 사용하는 방법

Homestead(ubuntu) + RabbitMQ를 사용하는 Laravel

사용법 1: laravel-queue-rabbitmq만 사용

laravel 설치 RabbitMQ:
먼저 laravel-queue-에서 지원하는 laravel 버전 정보에 주목하세요. Rabbitmq:

패키지 버전 Laravel 버전 버그 수정 종료일
9 6 2021년 10월 5일 문서
10 6, 7 2021년 10월 5일 문서
11 8 2021년 4월 6일 문서

설치 명령 실행:

composer require vladimir-yuldashev/laravel-queue-rabbitmq
로그인 후 복사

설치가 완료될 때까지 기다린 후 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
로그인 후 복사
로그인 후 복사

调用函数后执行结果:

Laravel(Homestead 환경)에서 RabbitMQ를 사용하는 방법

队列消费成功,查看数据库,数据也写入正常。

用法2:使用laravel-queue-rabbitmq+rabbitmq-server

到这里,会有一个问题,既然方法1能够正常使用,为什么还要加入rabbitmq-serverrabbitmq-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,为大家提供了一个服务端,不管是什么语言,使用账号、密码连接到相应的hostport就能使用RabbitMQ。类似的还有EMQX(mqtt服务端)等等。并且rabbitmq-server提供了一个管理后台,可以查看队列的相关情况,便于管理。

启动rabbitmq-server:

sudo service rabbitmq-server start
로그인 후 복사

开启队列:

php artisan queue:work
로그인 후 복사
로그인 후 복사

测试队列(代码和方法1代码一样)结果:

Laravel(Homestead 환경)에서 RabbitMQ를 사용하는 방법

Laravel(Homestead 환경)에서 RabbitMQ를 사용하는 방법

注意:

config/queue.phpusernamepassword里不要使用默认的guest账号密码来连接,否则会报错:

The connection timed out after 3 sec while awaiting incoming data
로그인 후 복사

前文已经添加过admin的账号密码,使用这个账号密码还需要给admin账号添加权限:

sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
로그인 후 복사

rabbitmq-server管理后台查看用户权限:

laravel 队列之Laravel(Homestead 환경)에서 RabbitMQ를 사용하는 방법

有权限是Can access virtual hosts显示/,无权限就是显示No Accessrrreee

config/queue.php에 추가하고 config/queue.php에서 수정합니다. >:

rrreee 명령을 실행하여 작업 클래스 생성: rrreee

TestQueue.php 코드 수정:

rrreee

대기열 함수 호출:

rrreee

대기열 열기:

rrreee

실행 결과 함수 호출 후:

Homestead(우분투)에서 laravel과 함께 RabbitMQ 사용 - 실전편

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 공식 웹사이트의 설명에 따르면:🎜🎜RabbitMQ는 다양한 운영 체제와 클라우드 환경에서 실행되며 가장 널리 사용되는 언어에 대한 광범위한 개발자 도구를 제공합니다.🎜🎜번역:🎜🎜RabbitMQ는 다양한 운영 체제에서 실행됩니다. 시스템 및 클라우드 환경 환경을 제공하며 가장 널리 사용되는 언어에 대한 광범위한 개발 도구를 제공합니다. 🎜🎜🎜🎜🎜요약하자면, 방법 1은 라라벨 큐 사용 방법을 사용하는데, 이는 상대적으로 간단하고 큐(생산자, 소비자 등)에 너무 많은 개념적 사항을 포함하지 않으며 rabbitmq를 사용합니다. -server는 언어에 관계없이 모든 사람을 위한 서버를 제공합니다. 계정과 비밀번호를 사용하여 해당 호스트포트에 연결하면 됩니다. .RabbitMQ. 유사한 것으로는 EMQX(mqtt 서버) 등이 있습니다. 그리고 rabbitmq-server는 쉬운 관리를 위해 대기열의 관련 상태를 볼 수 있는 관리 배경을 제공합니다. 🎜🎜rabbitmq-server 시작: 🎜rrreee🎜큐 열기: 🎜rrreee🎜큐 테스트(코드는 방법 1과 동일) 결과: 🎜🎜Homestead에서 Laravel과 함께 RabbitMQ 사용(ubuntu) - 실제 전투🎜🎜Homestead에서 laravel과 함께 RabbitMQ 사용(ubuntu) - 실습 장🎜🎜🎜🎜참고: 🎜🎜 in config/queue. php 사용자 이름비밀번호에 기본 게스트 계정과 비밀번호를 사용하여 연결하지 마세요. 그렇지 않으면 오류가 보고됩니다: 🎜rrreee🎜관리자 계정 및 비밀번호 이전에 추가되었으므로 이 계정과 비밀번호를 사용하십시오. 또한 관리자 계정에 권한을 추가해야 합니다: 🎜rrreee🎜 rabbitmq-server 관리 백그라운드에서 사용자 권한을 확인하십시오: 🎜🎜Homestead(우분투)에서 RabbitMQ를 사용하는 라라벨 큐 - 실습 장🎜🎜권한은 가상 호스트에 접근할 수 있습니다 표시/, 권한이 없으면 No Access가 표시됩니다. 🎜🎜🎜🎜기타 사용법🎜🎜1.laravel-queue-rabbitmq+Supervisor 데몬. 본질적으로 큐 드라이버를 변경하는 것이며 사용법은 redis와 다르지 않습니다. 🎜🎜2 다음과 유사한 사용법을 사용할 수 있습니다. java는 laravel 없이 연결 + 생산자 + 소비자 방법을 사용하여 RabbitMQ를 작동합니다. 3. 다른 통신 프로토콜(예: MQTT) 액세스, 주제 구독 등 보다 복잡한 사용법을 사용할 수도 있습니다. 구체적인 사용법은 RabbitMQ 공식 웹사이트를 참조하세요. 🎜🎜🎜🎜요약🎜🎜laravel+redis queue+Supervisor를 정기적으로 사용하면 일상적인 요구 사항을 충족할 수 있습니다. Qian Lao의 "엔지니어링 사이버네틱스"에 따르면 시스템에 있어서 최신 또는 가장 진보된 기술은 시스템에 적합하고 시스템의 안정성을 보장하는 것이 최고가 아닐 수 있습니다. 🎜🎜물론, 우리는 규칙을 고수할 수 없으며, 우리가 사랑하는 직업과 우리 자신에게 합당할 수 있도록 기술 패키지를 적시에 업데이트하고 개선해야 합니다. 🎜🎜🎜관련 추천: 🎜최신 5개의 Laravel 비디오 튜토리얼🎜🎜🎜

    위 내용은 Laravel(Homestead 환경)에서 RabbitMQ를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    관련 라벨:
    원천:learnku.com
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿