tp6安装并使用rabbitMQ

这篇具有很好参考价值的文章主要介绍了tp6安装并使用rabbitMQ。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近因为业务需要,要用到MQ就去研究了一下,说实话,安装环境给我搞自闭了,大概是我太菜

刚开始使用yum换源,各种安装卸载始终找不到自己要用的版本,后来全部卸载,下载安装包

编译安装解百忧

我用的是erlang 25.3 的版本,MQ使用的是3.11.3的版本,符合官方要求,这里的版本是有强制要求的,也就是固定erlang对应固定MQ,版本如下

tp6安装并使用rabbitMQ

 搞错,会无法运行

编译安装erlang25

编译安装老一套,

解压,

cd 进目录

./configure (这里我记得需要有一些 选项,不过我好像没安装,就不多说了)

make && make install

漫长的等待...

结束后 

vim /etc/profile

增加 

export PATH=$PATH:(你的erlang解压目录)/otp_src_25.3/bin

source /etc/profile(刷新环境变量,使其生效)

然后运行erl 看会不会有反应 安装成功后应该是

tp6安装并使用rabbitMQ

 接下来就是 安装MQ  相比erlang 简单很多,因为是编译安装,所以systemctl无法管理这个

下载MQ安装包.然后 解压缩,cd进解压后的目录,里面有个sbin cd 进入

然后使用   ./rabbitmq-server 命令就可以启动了

如果启动失败,如图

tp6安装并使用rabbitMQ

 那么就把otp_src_25.3/bin/下面的erl文件复制到otp_src_25.3/erts-13.2/bin/目录下,如果没有,可以新建目录,然后启动就成功了

tp6安装并使用rabbitMQ

 这样就是成功了

接下来就是安装插件,进入目录  使用 ./rabbitmq-plugins list  查看安装的插件目录

这里需要安装一个插件 指令为  rabbitmq-plugins enable rabbitmq_management

这是MQ的web管理插件,记得开启15672端口,不然外部无法访问,默认账号密码都是guest

但是在本地登录时不行的,需要创建账号密码,

./rabbitmqctl add_user <你的用户名> <你的密码>

./rabbitmqctl set_permissions -p / <你的用户名> ".*" ".*" ".*"

然后就可以登陆了

到这里,算是安装完成了.接下来就是基础使用

我使用的是thinkPHP

首先使用composer 安装  MQ官方库

composer require php-amqplib/php-amqplib:3.5.0 

安装后先启动 消费端

    //这是链接,个人习惯,有问题的话还请指正
    public function __construct()
    {
        parent::__construct();
        if ($this->connection != null) {
            return $this->connection;
        }
        try {
            $this->connection = (new AMQPStreamConnection(
                $this->host,        ip
                $this->port,        端口
                $this->user,        用户
                $this->password,    密码
                $this->vhost,        暂未用到 默认 /
            ));
            $this->channel = $this->connection->channel();
        }catch (\Exception $e) {
            Log::write("连接错误:".$e->getMessage(), "rabbitmq-log");
            throw new apiException("MQ连接异常".$e->getMessage());
        }
    }


    protected function execute(Input $input, Output $output)
    {
        //交换机  交换机分多种,常用的是直连
        $this->exchange = $input->getArgument('exchange');
        //通道    消费对应通道的消息
        $this->quent = $input->getArgument('quent');
        //测试

        $type = $mqType ? 'x-delayed-message' : "direct";
        $key = $mqType ? 'my_routing_key' : "";
        $durable = $mqType;
        exchange:要声明的exchange名称,必须是一个非空字符串。
        //type:exchange类型,可以是direct、topic、headers或fanout之一。
        //passive:如果设置为true,则不会创建exchange,仅检查是否存在指定名称的exchange。默认为false。
        //durable:如果设置为true,则exchange将在重启后继续存在。默认为false。
        //auto_delete:如果设置为true,则exchange将在最后一个绑定被删除后自动删除。默认为false。
        //internal:如果设置为true,则exchange将用于内部用途,不允许客户端发布消息到该exchange。默认为false。
        //arguments:其他参数,通常为键值对,用于指定exchange的特定属性。默认为null。

        $this->channel->exchange_declare($this->exchange, "direct", false, true, false);

        queue:队列名称,如果该队列不存在则会创建。
        passive:如果为true,则不会创建队列。如果队列不存在,则会返回一个错误。
        durable:如果为true,则队列将被持久化。当RabbitMQ服务器重启时,队列将保留下来。
        exclusive:如果为true,则队列只能被当前连接使用,当连接关闭时队列将被删除。该选项通常用于创建临时队列。
        auto_delete:如果为true,则当没有消费者使用时自动删除队列。
        arguments:一些额外的参数,例如队列的最大长度、消息的过期时间等。


        $this->channel->queue_declare($this->quent, false, true, false, false);


        //$this->quent  队列
        //$this->exchange 交换机  进行绑定
        $this->channel->queue_bind($this->quent, $this->exchange, "");


        //一次处理1条
        $this->channel->basic_qos(0, 1, false);


        $callback = function ($msg) {
                  //接收数据
                $info = json_decode($msg->body, true);
                //进行接收,否则以上文的配置 消息会一直存在
                $this->channel->basic_ack($msg->delivery_info['delivery_tag']);

        };


        //queue:需要消费的队列名称。
        //consumer_tag 是用于唯一标识一个消费者的字符串
        //no_local 防止消费者接收到自己发送的消息
        //no_ack指的是消费者在消费完消息后不需要向服务器发送确认消息
        //Exclusive指定了队列的排他性。如果一个队列被标记为Exclusive,那么只有创建该队列的连接可以使用它
        //nowait是指在使用 IBM MQ API 发送或获取消息时,如果队列中没有可用的消息,API 将立即返回,而不是等待消息到达。这可以避免程序在等待消息时被阻塞,从而提高程序的效率。
        //callback  接收消息后的处理函数

        $this->channel->basic_consume($this->quent, '', false, false, false, false, $callback,);
        while (count($this->channel->callbacks)) {
            try {
                $this->channel->wait();
            } catch (\Exception $e) {
                echo $e->getFile() . $e->getLine() . $e->getMessage();
                return "error";
            }
        }
        //关闭链接
        $this->channel->close();
        $this->connection->close();
    }

因为使用的tp6 所有在根目录 使用 php think  文件名就可以执行了  自定义指令 · ThinkPHP6.0完全开发手册 · 看云  这是官方文档

接下来说发布者


    public function __construct()
    {
        parent::__construct();
        if ($this->connection != null) {
            return $this->connection;
        }
        try {
            $this->connection = (new AMQPStreamConnection(
                $this->host,        ip
                $this->port,        端口
                $this->user,        用户
                $this->password,    密码
                $this->vhost,        暂未用到 默认 /
            ));
            $this->channel = $this->connection->channel();
        }catch (\Exception $e) {
            Log::write("连接错误:".$e->getMessage(), "rabbitmq-log");
            throw new apiException("MQ连接异常".$e->getMessage());
        }
    }


     public function send(){
        //exchange:要声明的 Exchange 的名称。
        //type:Exchange 的类型,如 direct、topic、fanout、headers 等。
        //passive:如果设置为 true,则不会创建 Exchange,只会检查该 Exchange 是否存在。默认为 false。
        //durable:如果设置为 true,则 Exchange 会被持久化到磁盘上,即使 RabbitMQ 服务器重启也不会丢失。默认为 false。
        //auto_delete:如果设置为 true,则当没有队列或者交换机绑定到该 Exchange 时,自动删除该 Exchange。默认为 false。
        //internal:如果设置为 true,则 Exchange 不能被客户端用来发送消息,只能被 Exchange 和队列之间的绑定使用。默认为 false。
        //arguments:用于声明 Exchange 的其他参数,如 x-message-ttl、x-dead-letter-exchange 等。默认为 null。

        $this->channel->exchange_declare($this->exchange, $this->type, true, false, false);


        //queue:队列名称,如果为空则表示由消息代理自动生成一个唯一的队列名称。
        //passive:如果为true,则不会创建该队列,而是检查该队列是否存在。如果该队列不存在,则返回一个通道级别的异常。
        //durable:如果为true,则表示该队列是持久化的,即在消息代理重启后该队列仍然存在。
        //exclusive:如果为true,则表示该队列只能被当前连接使用,并且在连接断开时会自动删除该队列。
        //auto_delete:如果为true,则表示该队列在没有任何消费者使用时会自动删除。
        //arguments:用于传递额外的参数,例如队列的最大长度、消息过期时间等。*/

                $this->channel->queue_declare($this->quent, false, false, false, false);
                
            //发送消息
                $message = new AMQPMessage($msg);
            }
            $this->channel->basic_publish($message, $this->exchange, $this->key);
     }

到这里就算完结了 这里是即时到达,还有延时到达会麻烦一点

首先两种实现方法,我用的比较简单,安装插件

./rabbitmq-plugins enable rabbitmq_delayed_message_exchange

然后创建延时交换机,和即时到达的有区别,建议去web管理端创建

tp6安装并使用rabbitMQ

tp6安装并使用rabbitMQ

插件完成后 会有这个选项

 tp6安装并使用rabbitMQ

 这就是最终填写的数据

提交后就有了.然后  发布和上面是一样的 ,不过类型要变  type 变成  x-delayed-message 也要设置 key  参数durable 变量为 true

tp6安装并使用rabbitMQ

接收的话  也是同理,type变化为  x-delayed-message    参数durable 变量为 true   

tp6安装并使用rabbitMQ

这里是你设置的key 

到这里 就结束了,安装 发布,消费,.整个过程,写的比较粗糙,有啥错误还请指正文章来源地址https://www.toymoban.com/news/detail-481031.html

到了这里,关于tp6安装并使用rabbitMQ的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • tp6 v3微信退款

    调用

    2024年02月13日
    浏览(33)
  • tp6用redis存储session

    tp6用redis存储session

    随着业务量的增加,很多时候会需要共享session的情况。共享session,其实就是说多台服务器共用一个session,或者是说一个主域跟多个子域之间共用一个session。工作中用tp也多一些,那么,我就用tp6来给大家讲解一下。 在共享session,我们需要用到redis。这儿我假设大家都能读懂

    2024年02月08日
    浏览(32)
  • tp6 rules内置验证规则thinkphp

    1、验证某个字段必须:‘name’=‘require’ 2、验证某个字段的值是否为纯数字:‘num’=‘number’ 3、验证某个字段的值是否为整数:‘num’=‘integer’ 4、验证某个字段的值是否为浮点数字:‘num’=‘float’ 5、验证某个字段的值是否为布尔值:‘num’=‘boolean’ 6、验证某个字

    2024年04月28日
    浏览(37)
  • TP6 对接阿里云短信接口2.0

    TP6 对接阿里云短信接口2.0

    首先下载 安装阿里云短信SDK composer require alibabacloud/sdk 安装 Alibaba Cloud SDK for PHP 作为依赖项 composer require alibabacloud/darabonba-openapi 最后安装对应的包 composer require alibabacloud/dysmsapi-20170525  上面3个都下载了,官方网站并没有说明下载 sdk,这个没有下载,查询资料花了几个小时,

    2024年02月16日
    浏览(35)
  • TP6----------阿里云短信包验证码登录

    首先开通阿里云短信包,之后申请短信包签名,这里大家自行去阿里云申请 安装阿里云sdk 首先创建Sample类方便调用,我们需要有短信签名,签名模板,阿里云keyId和accessKeySecret 阿里云key在阿里云首页,右上角有个acesskey管理就可以看到 Sample.php文件 业务逻辑层生成随机验证码

    2024年02月15日
    浏览(34)
  • tp6怎么做阿里云OSS存储呢?

    tp6怎么做阿里云OSS存储呢?

    作者:陈业贵 华为云享专家 51cto(专家博主 明日之星 TOP红人) 阿里云专家博主 阿里云oss存储是得买的。买后,还要获取参数。填入代码中就可以啦 获得四个参数: $accessKeyId $accessKeySecret $endpoint $bucket 不然不对了哈 告诉你怎么做阿里云OSS存储.

    2024年02月15日
    浏览(9)
  • TP6 + GatewayWorker 轻松实现web项目 websocket 功能

    TP6 + GatewayWorker 轻松实现web项目 websocket 功能

    一、在tp6项目下安装  GatewayWorker  安装成功后在配置文件目录下会出现gateway_worker.php 开始配置gateway_worker  下边我贴出了我的配置文件供大家参考   下面对gateway 配置部分的属性解释 name : 可以设置Gateway进程的名称,方便status命令中查看统计 count :可以设置Gateway进程的数量

    2024年02月07日
    浏览(8)
  • 万恶的Authorization问题;apache+小皮+tp6+vue3项目

    跨域问题可以在.htaccess内修改 Header always set Access-Control-Allow-Origin “*” Header always set Access-Control-Allow-Methods “GET, POST, OPTIONS” Header always set Access-Control-Allow-Headers “Content-Type,token,X-User-ID,Authorization” 本地出现Authorization问题 win+小皮+apache 的环境下,前端发送了Authorization但是

    2024年02月15日
    浏览(5)
  • tp6的runtime/Logs目录下产生大量日记文件,怎么取消自动生成?

    tp6的runtime/Logs目录下产生大量日记文件,怎么取消自动生成?

    一开始查了好多网上提供的,很幸运都是抄袭别人的,没一个成功,最后无奈只能自己解决方法 其实很简单,不用修改config/log.php文件,没用因为只要有登入错误,警告,消息或者sql错误都会写入 解决方法: 关闭调试模式 配置数据库文件  .env文件 true改为false即可  总结:

    2024年02月16日
    浏览(7)
  • tp6框架中Http类 请求的header、body参数传参 及post、file格式

    引入Http类: 在需要使用的地方引入Http类: use thinkfacadeHttp; GET请求示例: $response = Http::get(\\\'https://example.com/api/resource\\\');  设置Header参数: $headers = [ \\\'Authorization\\\' = \\\'Bearer YourAccessToken\\\', \\\'Content-Type\\\' = \\\'application/json\\\', ]; $response = Http::header($headers)-get(\\\'https://example.com/api/resource\\\'); POST请

    2024年01月19日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包