当前位置:首页 > 服务端 > laravel+rabbitMQ

laravel+rabbitMQ

2022年08月04日 21:10:11服务端2


前言

第一次学习消息队列rabbit,因为平时使用的是laravel,因此我打算把laravel和rabbit结合起来


提示:以下是本篇文章正文内容,下面案例可供参考

一、安装Erlang环境

1.安装erlang前安装下依赖文件

yum install gcc glibc-devel make ncurses-devel openssl-devel xmlto

2.去erlang官网下载erlang安装包

wget -c http://erlang.org/download/otp_src_22.3.tar.gz

3.解压

tar -zxvf otp_src_22.3.tar.gz
cd otp_src_22.3/

4.编译安装

./configure --prefix=/usr/local/erlang
make && make install

5.配置环境变量

vim /etc/profile
末尾加入一行:export PATH=$PATH:/usr/local/erlang/bin 
source /etc/profile

二、安装rabbitmq

1.下载

*wget -c https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.8/rabbitmq-server-generic-unix-3.8.8.tar.xz

2.解压

xz -d rabbitmq-server-generic-unix-3.8.8.tar.xz
tar -xvf rabbitmq-server-generic-unix-3.8.8.tar*

3.操作

cd rabbitmq_server-3.8.8/sbin
启动:rabbitmq-server
关闭:rabbitmqctl stop
查看状态:rabbitmqctl status
启用插件: rabbitmq-plugins enable rabbitmq_management
访问管理页面:http://localhost:15672 端口默认为15672

4.添加用户

rabbitmqctl add_user admin admin //添加用户,后面两个参数分别是用户名和密码
rabbitmqctl set_permissions -p / admin “." ".” “.*” //添加权限
rabbitmqctl set_user_tags admin administrator //修改用户角色,将用户设为管理员

二、laravel安装rabbitmq

1.Composer 安装

composer require vladimir-yuldashev/laravel-queue-rabbitmq
安装的时候可能会报版本不符合错误
laravel+rabbitMQ _ JavaClub全栈架构师技术笔记

链接: laravel-queue-rabbitmq

这时候只要安装对应laravel的laravel-queue-rabbitmq版本即可

2.config/app.php ,providers 中添加:

VladimirYuldashev\LaravelQueueRabbitMQ\LaravelQueueRabbitMQServiceProvider::class,

3.app/config/queue.php 配置中connections 数组中加入下列配置

'rabbitmq' => [

            'driver' => 'rabbitmq',
            'connection' => PhpAmqpLib\Connection\AMQPLazyConnection::class,
            'dsn' => env('RABBITMQ_DSN', null),

            'factory_class' => Enqueue\AmqpLib\AmqpConnectionFactory::class,

            'host' => env('RABBITMQ_HOST', '127.0.0.1'),
            'port' => env('RABBITMQ_PORT', 5672),

            'vhost' => env('RABBITMQ_VHOST', '/'),
            'login' => env('RABBITMQ_LOGIN', 'guest'),
            'password' => env('RABBITMQ_PASSWORD', 'guest'),

            'queue' => env('RABBITMQ_QUEUE', 'default'),

            'options' => [

                'exchange' => [
                    'name' => env('RABBITMQ_EXCHANGE_NAME'),
                    'declare' => env('RABBITMQ_EXCHANGE_DECLARE', true),
                    'type' => env('RABBITMQ_EXCHANGE_TYPE', \Interop\Amqp\AmqpTopic::TYPE_DIRECT),
                    'passive' => env('RABBITMQ_EXCHANGE_PASSIVE', false),
                    'durable' => env('RABBITMQ_EXCHANGE_DURABLE', true),
                    'auto_delete' => env('RABBITMQ_EXCHANGE_AUTODELETE', false),
                    'arguments' => env('RABBITMQ_EXCHANGE_ARGUMENTS'),
                ],

                'queue' => [
                    'name' => 'queuename',
                    'declare' => env('RABBITMQ_QUEUE_DECLARE', true),
                    'bind' => env('RABBITMQ_QUEUE_DECLARE_BIND', true),
                    'passive' => env('RABBITMQ_QUEUE_PASSIVE', false),
                    'durable' => env('RABBITMQ_QUEUE_DURABLE', true),
                    'exclusive' => env('RABBITMQ_QUEUE_EXCLUSIVE', false),
                    'auto_delete' => env('RABBITMQ_QUEUE_AUTODELETE', false),
                    'arguments' => env('RABBITMQ_QUEUE_ARGUMENTS'),
                ],
            ],
            'sleep_on_error' => env('RABBITMQ_ERROR_SLEEP', false),
            'ssl_params' => [
                'ssl_on' => env('RABBITMQ_SSL', false),
                '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),
            ],

        ],

这些配置githup有详细介绍

4.修改 .env 文件

QUEUE_DRIVER=rabbitmq

#以下是新增配置
RABBITMQ_HOST=192.168.111.174
RABBITMQ_PORT=5672  #mq的端口
RABBITMQ_VHOST=/
RABBITMQ_LOGIN=admin    #mq的登录名
RABBITMQ_PASSWORD=admin   #mq的密码
RABBITMQ_QUEUE=queuename   #mq的队列名称

5.封装rabbitMQ类(测试用)

<?php

namespace App\Module\Queue;

use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;

class RabbitMQ
{
     
    //创建静态私有的变量保存该类对象
//    static private $connectionInstance;

    //防止使用new直接创建对象
    private function __construct(){
     }

    //防止使用clone克隆对象
    private function __clone(){
     }

//    public static function getConnectionInstance(){
     
//        if (empty(self::$connectionInstance)) {
     
//            $config = config('queue.connections.rabbitmq');
//            self::$connectionInstance = new AMQPStreamConnection($config['host'], $config['port'], $config['login'], $config['password'], $config['vhost']);
//        }
//        return self::$connectionInstance;
//    }


    private static function getConnect(){
     
        $config = config('queue.connections.rabbitmq');
        return new AMQPStreamConnection($config['host'], $config['port'], $config['login'], $config['password'], $config['vhost']);
    }

    public static function push($queue, $messageBody, $exchange = 'router'){
     
        $connection = self::getConnect();
        $channel = $connection->channel();
        $channel->queue_declare($queue, false, true, false, false);
        $channel->exchange_declare($exchange, 'direct', false, true, false);
        $channel->queue_bind($queue, $exchange); // 队列和交换器绑定
        $message = new AMQPMessage($messageBody, array('content_type' => 'text/plain', 'delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT));
        $channel->basic_publish($message, $exchange); // 推送消息
        $channel->close();
        $connection->close();
    }

    public static function pop($queue, $callback, $exchange = 'router'){
     
        $connection = self::getConnect();
        $channel = $connection->channel();
        $message = $channel->basic_get($queue); //取出消息
        $res = $callback($message->body);
        if($res){
     
            $channel->basic_ack($message->getDeliveryTag());
        }
        $channel->close();
        $connection->close();
    }
}

6.laravel创建任务类

php artisan make:job TestQueue

在终端内执行上述命令,会自动生成 app/Jobs/TestQueue.php 文件
这里附上测试代码

<?php

namespace App\Jobs;

use App\Module\Queue\RabbitMQ;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

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

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($array = [])
    {
     
        RabbitMQ::push('test_queue', $array['msg']);
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
     
        RabbitMQ::pop('test_queue', function ($message){
     
            print_r($message);
            return true;
        });
    }

    public function failed(\Exception $exception)
    {
     
        // 给用户发送任务失败的通知,等等……
    }
}

6.将队列运行起来

php artisan queue:work

laravel+rabbitMQ _ JavaClub全栈架构师技术笔记

7.把数据放进 mq 队列

这里我新建了一个控制器来调用

TestQueue::dispatch(['msg' => 'testMsg']); //这里把msg传到TestQueue的__construct

下面我们来测试一下
当执行到了TestQueue::dispatch([‘msg’ => ‘testMsg’]);这里之后
终端显示
laravel+rabbitMQ _ JavaClub全栈架构师技术笔记


总结

最近刚学了rabbitMQ想把它结合laravel用起来,rabbitMQ还有很多需要学习的地方。以上有不足或者问题之处请各位指出。

作者:qq_34972339
来源链接:https://blog.csdn.net/qq_34972339/article/details/108579836

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/17366.html

标签: RabbitMQ
分享给朋友:

“laravel+rabbitMQ” 的相关文章

MQ--01为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比

MQ--01为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比

MQ 是什么?队列是什么,MQ 我们可以理解为消息队列,队列我们可以理解为管道。以管道的方式做消息传递。 场景:     1.其实我们在双11的时候,当我们凌晨大量的秒杀和抢购商品,然后去结算的时候,就会发现,界面会提...

消息中间件RabbitMQ学习笔记---RabbitMQ简介

消息中间件RabbitMQ学习笔记---RabbitMQ简介

消息中间件RabbitMQ学习笔记—RabbitMQ简介 1.RabbitMQ简介 RabbitMQ,俗称“兔子MQ”(可见其轻巧,敏捷),是目前非常热门的一款开源消息中间件,不管是互联网行业还是传统行业都广泛使用(最早是为了解决电信...

rabbitmq权限配置

关于rabbitmq权限的几点: rabbitmq的权限控制通过两层来实现,一是vhost的权限,二是确认有权限访问vhost后,对vhost内资源的权限控制(配置,读,写)   1.默认...

rabbitmq 启动异常

问题点说明:今天早上,开发人员反映Rabbitmq有问题,我试着登录页面访问http://IP:15672,出现了报错信息,因为当时忙着处理,报错页面没有截下来。 后面想重启一下Rabbitmq看能不能解决问题,发现居然重启不了,然后查看了下日志信息,找到了Ra...

linux查看rabbitmq运行状态,RabbitMQ常用命令

RabbitMQ常用命令 rabbitmqctl命令 http://www.rabbitmq.com/man/rabbitmqctl.1.man.html# 1). 服务器启动与关闭 启动: rabbitmq-server –detach...

RabbitMQ工作方式

RabbitMQ工作方式: 工作队列模式 发布订阅模式 路由模式 通配符模式 header转发模式 RPC远程过程调用模式   作者:wondream322 来源链接:https://blog.csdn.net/wang386476890/art...

Linux系统Centos7安装RabbitMQ使用压缩包配置环境变量RabbitMQ 3.8.16.tar.xz Erlang 24

Linux系统Centos7安装RabbitMQ使用压缩包配置环境变量RabbitMQ 3.8.16.tar.xz Erlang 24

文件的下载1、创建两个安装信息的存放文件夹sudo mkdir /usr/local/rabbitmqsudo mkdir /usr/local/erlang  2、下载rabbitmq和erlangcd /usr/local/rab...

Window 下载安装 RabbitMQ

Window 下载安装 RabbitMQ

安装必看:erlang与rabbitmq版本对应关系表   "版本一定要匹配" 下载与安装 erlang 由于RabbitMQ是基于erlang的,所以,在正式安装RabbitMQ之前,需要先安装一下erlang。 下载链接:http://e...

centos7 yum安装rabbitmq-server

centos7 yum安装rabbitmq-server

一、查看支持rabbitmq-server的软件包并安装 yum provides rabbitmq-server yum install rabbitmq-server yum安装时安装了其他依赖 二、启动rabbitmq-server...

rabbitmq删除队列

作者:吴业亮 博客:http://blog.csdn.net/wylfengyujiancheng 从github下载rabbitmqadmin # wget https://raw.githubusercontent.com/rabb...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。