Explorar o código

Amqp collector 导入

15313670163 hai 6 meses
pai
achega
7a095dcc81

+ 25 - 0
app/Amqp/Consumer/GatherConsumer.php

@@ -0,0 +1,25 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Amqp\Consumer;
+
+use Hyperf\Amqp\Result;
+use Hyperf\Amqp\Annotation\Consumer;
+use Hyperf\Amqp\Message\ConsumerMessage;
+use PhpAmqpLib\Message\AMQPMessage;
+use App\JsonRpc\CollectorService;
+#[Consumer(exchange: 'gather', routingKey: 'gather', queue: 'gather', name: "GatherConsumer", nums: 1, enable: true)]
+class GatherConsumer extends ConsumerMessage
+{
+    public function consumeMessage($data, AMQPMessage $message): Result
+    {
+        $collectorService = new CollectorService();
+        $collectorService->goCrawler($data);
+        return Result::ACK;
+    }
+    public function isEnable(): bool
+    {
+        return parent::isEnable();
+    }
+}

+ 30 - 0
app/Amqp/Consumer/ImportConsumer.php

@@ -0,0 +1,30 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Amqp\Consumer;
+
+use App\JsonRpc\CollectorService;
+use Hyperf\Amqp\Result;
+use Hyperf\Amqp\Annotation\Consumer;
+use Hyperf\Amqp\Message\ConsumerMessage;
+use PhpAmqpLib\Message\AMQPMessage;
+
+#[Consumer(exchange: 'import', routingKey: 'import', queue: 'import', name: "ImportConsumer", nums: 1, enable: true)]
+class ImportConsumer extends ConsumerMessage
+{
+    public function consumeMessage($data, AMQPMessage $message): Result
+    {
+
+        $collector = new CollectorService();
+        var_dump('文章---------------------',$data);
+        $result = $collector->goAddArt($data);
+        
+
+        return Result::ACK;
+    }
+    public function isEnable(): bool
+    {
+        return parent::isEnable();
+    }
+}

+ 17 - 0
app/Amqp/Producer/GatherProducer.php

@@ -0,0 +1,17 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Amqp\Producer;
+
+use Hyperf\Amqp\Annotation\Producer;
+use Hyperf\Amqp\Message\ProducerMessage;
+
+#[Producer(exchange: 'gather', routingKey: 'gather')]
+class GatherProducer extends ProducerMessage
+{
+    public function __construct($data)
+    {
+        $this->payload = $data;
+    }
+}

+ 17 - 0
app/Amqp/Producer/ImportProducer.php

@@ -0,0 +1,17 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Amqp\Producer;
+
+use Hyperf\Amqp\Annotation\Producer;
+use Hyperf\Amqp\Message\ProducerMessage;
+
+#[Producer(exchange: 'import', routingKey: 'import')]
+class ImportProducer extends ProducerMessage
+{
+    public function __construct($data)
+    {
+        $this->payload = $data;
+    }
+}

+ 75 - 25
app/JsonRpc/CollectorService.php

@@ -1,6 +1,7 @@
 <?php
 namespace App\JsonRpc;
 
+use App\Amqp\Producer\GatherProducer;
 use App\Model\ArticleData;
 use App\Model\OldModel\Article as OldArticle;
 use App\Model\OldModel\ArticleData as OldArticleData;
@@ -8,18 +9,25 @@ use App\Model\OldModel\Category;
 use App\Model\Article;
 use App\Model\Rule;
 use App\Model\Web;
+use Hyperf\Amqp\Producer;
+use Hyperf\Context\ApplicationContext as ContextApplicationContext;
 use Hyperf\DbConnection\Db;
+use Hyperf\Di\Annotation\Inject;
 use Hyperf\RpcServer\Annotation\RpcService;
 use App\Tools\Result;
 use QL\QueryList;
 use Swoole\Coroutine;
+use App\Service\GatherQueueService;
+use App\Amqp\Producer\ImportProducer;
+
 
 use function Hyperf\Support\retry;
 
 #[RpcService(name: "CollectorService", protocol: "jsonrpc-http", server: "jsonrpc-http")]
 class CollectorService implements CollectorServiceInterface
 {
-
+    #[Inject]
+    protected GatherQueueService $Gservice;
     /**
      * 添加网站
      * @param array $data
@@ -141,6 +149,7 @@ class CollectorService implements CollectorServiceInterface
         }
         return Result::success($result);
     }
+
     /**
      * 添加任务规则
      * @param array $data
@@ -195,16 +204,15 @@ class CollectorService implements CollectorServiceInterface
                         break;              
                 }
                 if(!empty($data['source']) && $data['type'] != 3){
+
                     $rule ['source'] = $data['source'];
                 }
                 if(isset($data['writer_class']) && $data['type'] != 3){
                     $rule ['writer_class'] = $data['writer_class'];
                 }
-
                 if(isset($data['writer']) && $data['type'] != 3){
                     $rule ['writer'] = $data['writer'];
                 }
-
                 date_default_timezone_set('Asia/Shanghai');
                 //若不存在,根据网站类型添加到不行类型的规则表中
                 $result = Rule::insertGetId($rule);
@@ -246,7 +254,6 @@ class CollectorService implements CollectorServiceInterface
                 ['name','like','%'.$data['keyWord'].'%']
             ];
         }
-
         if(empty($where)){
             $rep = Rule::withCount(relations:'arts')->limit($data['pageSize'])->orderBy("created_at","desc")->offset(($data['page']-1)*$data['pageSize'])->get();
         }else{
@@ -282,6 +289,7 @@ class CollectorService implements CollectorServiceInterface
         }else{
             return Result::success($result);
         } 
+
     }
     /**
      * 修改规则任务
@@ -351,7 +359,23 @@ class CollectorService implements CollectorServiceInterface
      * @param array $data
      * @return array
      */
+
     public function sendCrawler(array $data): array
+    {
+        var_dump("接收到的数据:",$data);
+        $message = new GatherProducer($data);
+        $producer = ContextApplicationContext::getContainer()->get(Producer::class);
+        $a = $producer->produce($message);
+        var_dump("生产者:",$a);
+//       $result =  $this->Gservice->push($data,rand(5,20));
+       return  Result::success([]);
+    }
+
+    /**
+     * @param array $data
+     * @return array
+     */
+    public function goCrawler(array $data): array
     {
         //通过规则id 查询规则类型
         $where = [
@@ -364,10 +388,10 @@ class CollectorService implements CollectorServiceInterface
 
         switch ($info['web_type']){
             case 1:
-                var_dump("wojinlailaile======",$info);
+                var_dump("===========规则采集======",$info);
                 Rule::where(['id'=>$data['id']])->update(['status'=>1]);
                 $data['copyfrom'] = $info['web_name'];
-                $data['author'] = '刘德华';
+                $data['author'] = $info['writer'];;
                 $data['first_url'] = $info['first_url'];
                 $data['second_start'] = $info['second_start'];
                 $data['second_num'] = $info['second_num'];
@@ -379,28 +403,36 @@ class CollectorService implements CollectorServiceInterface
                 $urlList = $this->addUrlArr($data);
                 if($urlList){
                     foreach ($urlList as $val){
-                        var_dump("单列表地址:",$val);
+//                        var_dump("单列表地址:",$val);
                         $this->ruleCollection($val,$data);
                     }
                 }
                 Rule::where(['id'=>$data['id']])->update(['status'=>2]);
                 break;
             case 2:
-
+                Rule::where(['id'=>$data['id']])->update(['status'=>1]);
                 $wecUrl = $info['first_url'];//'https://www.ndcpa.gov.cn/queryList';
                 $parames = json_decode($info['parameter'],true);
+
+//                var_dump($parames);die;
+
                 $parames['webSiteCode'] = [trim($parames['webSiteCode'], "[]")]; //['jbkzzx'];//
                 $parames['channelCode'] =  [trim($parames['channelCode'], "[]")]; // ['c100008'];//
                 $other = [
                     'web_url'=>$info['web_url'],
                     'copyfrom'=>$info['web_name'],
                     'admin_user_id'=>$data['admin_user_id'],
-                    'rule_id'=>$data['id']
+                    'rule_id'=>$data['id'],
+                    'writer'=>$info['writer'],
                 ];
-                var_dump("开始调用接口方法====",$parames);
+                var_dump("=======开始接口采集====",$parames);
 //                die;
                 $this->foreachCurl($wecUrl,$parames,$other);
 
+                Rule::where(['id'=>$data['id']])->update(['status'=>2]);
+
+
+
         }
         return  Result::success([]);
     }
@@ -420,7 +452,7 @@ class CollectorService implements CollectorServiceInterface
                 $i++;
                 $url = $data['second_start'].$i.$data['second_end'];
                 $respon1 = Result::pageExists($url);
-                var_dump("采集地址:",$respon1,$url);
+//                var_dump("采集地址:",$respon1,$url);
 //                Coroutine::sleep(2);
                 if ($i==intval($data['end_pagenum'])-1) {
                     $exit = true;
@@ -434,19 +466,20 @@ class CollectorService implements CollectorServiceInterface
         return $arrList;
     }
 
+    
     /**
      * 按照规则采集数据
      * @return void
      */
     public function ruleCollection($url,$data)
     {
-        var_dump("采集参数:",$data);
+//        var_dump("采集参数:",$data);
         $list = QueryList::get($url);
         $dataList = $list->rules([
             'title' => ['a', 'text'],
             'link'  => ['a', 'href'],
         ])->range('.list1 li')->query()->getData();
-        var_dump("采集的内容:",$dataList);
+//        var_dump("采集的内容:",$dataList);
 //        var_dump("====",$dataList);die;
         $firstUrlArr =  explode("/", $url);
         array_pop($firstUrlArr);
@@ -464,10 +497,10 @@ class CollectorService implements CollectorServiceInterface
                 ])->range(".news-details")->query()->getData();
 
                 $detailData = $detailData->toArray();
-                var_dump("内容详情:",$detailData,$newUrlStr);
+//                var_dump("内容详情:",$detailData,$newUrlStr);
                 if($detailData){
                     foreach ($detailData as $val){
-                        var_dump("进没进foreach:",$newUrlStr,$val);
+//                        var_dump("进没进foreach:",$newUrlStr,$val);
                         $data['fromurl'] = $newUrlStr;
                         $data['title'] = $val['title'];
                         $data['content'] = $val['content'];
@@ -480,7 +513,7 @@ class CollectorService implements CollectorServiceInterface
                         $data['admin_user_id'] = $data['admin_user_id']??'';
                         $data['rule_id'] = $data['rule_id']??'';
 //                        $data['copyfrom'] = $data['copyfrom'];
-                        var_dump("要插入的数据:",$data);
+//                        var_dump("要插入的数据:",$data);
                         $this->insertArticleData($data);
                     }
                 }
@@ -501,7 +534,7 @@ class CollectorService implements CollectorServiceInterface
             Db::beginTransaction();
             try{
                 $articleInfo =  Article::where(['title'=>$data['title']])->first();
-                var_dump("获取详情:",$articleInfo,$data);
+//                var_dump("获取详情:",$articleInfo,$data);
                 if(empty($articleInfo)){
                     $insertData = [];
                     $insertData['fromurl'] =$data['newUrlStr'];
@@ -519,7 +552,7 @@ class CollectorService implements CollectorServiceInterface
                     $insertDataDetail = [];
                     $insertDataDetail['article_id'] = $article_id;
                     $insertDataDetail['content'] = $data['content'];
-                    var_dump("插入ArticleData:",$insertDataDetail);
+//                    var_dump("插入ArticleData:",$insertDataDetail);
                     ArticleData::insertGetId($insertDataDetail);
 //                        Coroutine::sleep(2);
 //                    var_dump("插入成功一次:",$article_id,$insertDataDetail);
@@ -548,7 +581,7 @@ class CollectorService implements CollectorServiceInterface
         ];
         $result = Result::http_post($wecUrl,$parames,$options);
         $result = json_decode($result['response'],true);
-        var_dump("获取数据:",$result);
+//        var_dump("获取数据:",$result);
         if($result['data'] && $result['data']['results']){
             $dataList  = $result['data']['results'];
 //            var_dump("取数据结构体:",$dataList);
@@ -565,7 +598,7 @@ class CollectorService implements CollectorServiceInterface
                     'content'=>$val['source']['content']['content']??'',
                     'admin_user_id'=>$other['admin_user_id']??'',
                     'rule_id'=>$other['rule_id']??'',
-                    'author'=>'冯蕊'
+                    'author'=>$other['writer']??''
                 ];
 //                var_dump("调用插入数据方法,组装数据:",$insertData);
                 $this->insertArticleData($insertData);
@@ -576,7 +609,7 @@ class CollectorService implements CollectorServiceInterface
         $parames['current'] = $pages;
         $twoResult = Result::http_post($wecUrl,$parames,$options);
         if($result['data'] && $result['data']['results'] && count($result['data']['results'])>0){
-            var_dump("分页测试:",$parames,$parames['current']);
+//            var_dump("分页测试:",$parames,$parames['current']);
             $this->foreachCurl($wecUrl,$parames,$other,$pages);
         }
 //        var_dump("正确的数据:",$result);
@@ -762,22 +795,39 @@ class CollectorService implements CollectorServiceInterface
         return  Result::success($result);
     }
     /**
-    * 导入文章
+    * 导入文章(生产者)
     * @param array $data
     * @return array
     */
     public function addArt(array $data): array
     {
+        var_dump("接收到的数据:",$data);
+        $message = new ImportProducer($data);
+        $producer = ContextApplicationContext::getContainer()->get(Producer::class);
+        $a = $producer->produce($message);
+        var_dump("生产者:",$a);
+//       $result =  $this->Gservice->push($data,rand(5,20));
+       return  Result::success([]);
+    }
+    /**
+    * 导入文章(消费者)
+    * @param array $data
+    * @return array
+    */
+    public function goAddArt(array $data): array
+    {
+        // var_dump('准备去消费------',$data);
         // var_dump("======@@@====");
         $where = [
             'rule_id' => $data['rule_id'],
             'state' => 0
         ];
         //获取某个规则任务下的已采集未导入的文章及文章详情
-        $arts_id = Article::where($where)->wherenotNull('catid')->orderBy('id')->select('id')->get();
+        $arts_id = Article::where($where)->wherenotNull('catid')->select('id')->orderBy('id')->get()->toArray();
         $arts = Article::where($where)->wherenotNull('catid')->select('title','catid','level','introduce','keyword','author','copyfrom','fromurl','hits','islink','imgurl','admin_user_id','is_original')->orderBy('id')->get()->toArray();       
-        $arts_data = ArticleData::whereIn('article_id',$arts_id)->select('content')->orderBy('article_id')->get()->toArray();
-        // var_dump($article_data);
+        // var_dump('=============:::',$arts_id);
+        $arts_data = ArticleData::whereIn('article_id',$arts_id)->select('content')->orderBy('article_id','desc')->get()->toArray();
+        // var_dump('=============',$arts);
         $data = [
             'articles' => $arts,
             'art_content' => $arts_data

+ 1 - 0
composer.json

@@ -14,6 +14,7 @@
     "require": {
         "php": ">=8.1",
         "doctrine/annotations": "^2.0",
+        "hyperf/amqp": "^3.1",
         "hyperf/cache": "~3.1.0",
         "hyperf/command": "~3.1.0",
         "hyperf/config": "~3.1.0",

+ 387 - 3
composer.lock

@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "1935bfafe4523350f25d98a64e75d710",
+    "content-hash": "1858a823a9c3a001377487835051883d",
     "packages": [
         {
             "name": "carbonphp/carbon-doctrine-types",
@@ -832,6 +832,82 @@
             ],
             "time": "2024-07-18T11:15:46+00:00"
         },
+        {
+            "name": "hyperf/amqp",
+            "version": "v3.1.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hyperf/amqp.git",
+                "reference": "45f1c42c84af67668040db936e11b1e64e2531d7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hyperf/amqp/zipball/45f1c42c84af67668040db936e11b1e64e2531d7",
+                "reference": "45f1c42c84af67668040db936e11b1e64e2531d7",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/instantiator": "^1.2.0",
+                "hyperf/codec": "~3.1.0",
+                "hyperf/contract": "~3.1.0",
+                "hyperf/coroutine": "~3.1.0",
+                "hyperf/pool": "~3.1.0",
+                "hyperf/process": "~3.1.0",
+                "hyperf/support": "~3.1.0",
+                "hyperf/utils": "~3.1.0",
+                "php": ">=8.1",
+                "php-amqplib/php-amqplib": "^3.5",
+                "psr/container": "^1.0 || ^2.0",
+                "psr/event-dispatcher": "^1.0",
+                "psr/log": "^1.0 || ^2.0 || ^3.0"
+            },
+            "suggest": {
+                "hyperf/di": "Required to use annotations.",
+                "hyperf/event": "Declare queue and start consumers automatically."
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                },
+                "hyperf": {
+                    "config": "Hyperf\\Amqp\\ConfigProvider"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Hyperf\\Amqp\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A amqplib for hyperf.",
+            "homepage": "https://hyperf.io",
+            "keywords": [
+                "AMQP",
+                "hyperf",
+                "php"
+            ],
+            "support": {
+                "docs": "https://hyperf.wiki",
+                "issues": "https://github.com/hyperf/hyperf/issues",
+                "pull-request": "https://github.com/hyperf/hyperf/pulls",
+                "source": "https://github.com/hyperf/hyperf"
+            },
+            "funding": [
+                {
+                    "url": "https://hyperf.wiki/#/zh-cn/donate",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://opencollective.com/hyperf",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-09-25T02:54:12+00:00"
+        },
         {
             "name": "hyperf/cache",
             "version": "v3.1.43",
@@ -4766,6 +4842,204 @@
             },
             "time": "2024-09-29T15:01:53+00:00"
         },
+        {
+            "name": "paragonie/constant_time_encoding",
+            "version": "v3.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/paragonie/constant_time_encoding.git",
+                "reference": "df1e7fde177501eee2037dd159cf04f5f301a512"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/df1e7fde177501eee2037dd159cf04f5f301a512",
+                "reference": "df1e7fde177501eee2037dd159cf04f5f301a512",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^8"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9",
+                "vimeo/psalm": "^4|^5"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "ParagonIE\\ConstantTime\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Paragon Initiative Enterprises",
+                    "email": "security@paragonie.com",
+                    "homepage": "https://paragonie.com",
+                    "role": "Maintainer"
+                },
+                {
+                    "name": "Steve 'Sc00bz' Thomas",
+                    "email": "steve@tobtu.com",
+                    "homepage": "https://www.tobtu.com",
+                    "role": "Original Developer"
+                }
+            ],
+            "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)",
+            "keywords": [
+                "base16",
+                "base32",
+                "base32_decode",
+                "base32_encode",
+                "base64",
+                "base64_decode",
+                "base64_encode",
+                "bin2hex",
+                "encoding",
+                "hex",
+                "hex2bin",
+                "rfc4648"
+            ],
+            "support": {
+                "email": "info@paragonie.com",
+                "issues": "https://github.com/paragonie/constant_time_encoding/issues",
+                "source": "https://github.com/paragonie/constant_time_encoding"
+            },
+            "time": "2024-05-08T12:36:18+00:00"
+        },
+        {
+            "name": "paragonie/random_compat",
+            "version": "v9.99.100",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/paragonie/random_compat.git",
+                "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a",
+                "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">= 7"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "4.*|5.*",
+                "vimeo/psalm": "^1"
+            },
+            "suggest": {
+                "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
+            },
+            "type": "library",
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Paragon Initiative Enterprises",
+                    "email": "security@paragonie.com",
+                    "homepage": "https://paragonie.com"
+                }
+            ],
+            "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
+            "keywords": [
+                "csprng",
+                "polyfill",
+                "pseudorandom",
+                "random"
+            ],
+            "support": {
+                "email": "info@paragonie.com",
+                "issues": "https://github.com/paragonie/random_compat/issues",
+                "source": "https://github.com/paragonie/random_compat"
+            },
+            "time": "2020-10-15T08:29:30+00:00"
+        },
+        {
+            "name": "php-amqplib/php-amqplib",
+            "version": "v3.7.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-amqplib/php-amqplib.git",
+                "reference": "738a73eb0019b6c99d9bc25d7a0c0dd8f56a5199"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-amqplib/php-amqplib/zipball/738a73eb0019b6c99d9bc25d7a0c0dd8f56a5199",
+                "reference": "738a73eb0019b6c99d9bc25d7a0c0dd8f56a5199",
+                "shasum": ""
+            },
+            "require": {
+                "ext-mbstring": "*",
+                "ext-sockets": "*",
+                "php": "^7.2||^8.0",
+                "phpseclib/phpseclib": "^2.0|^3.0"
+            },
+            "conflict": {
+                "php": "7.4.0 - 7.4.1"
+            },
+            "replace": {
+                "videlalvaro/php-amqplib": "self.version"
+            },
+            "require-dev": {
+                "ext-curl": "*",
+                "nategood/httpful": "^0.2.20",
+                "phpunit/phpunit": "^7.5|^9.5",
+                "squizlabs/php_codesniffer": "^3.6"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "PhpAmqpLib\\": "PhpAmqpLib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Alvaro Videla",
+                    "role": "Original Maintainer"
+                },
+                {
+                    "name": "Raúl Araya",
+                    "email": "nubeiro@gmail.com",
+                    "role": "Maintainer"
+                },
+                {
+                    "name": "Luke Bakken",
+                    "email": "luke@bakken.io",
+                    "role": "Maintainer"
+                },
+                {
+                    "name": "Ramūnas Dronga",
+                    "email": "github@ramuno.lt",
+                    "role": "Maintainer"
+                }
+            ],
+            "description": "Formerly videlalvaro/php-amqplib.  This library is a pure PHP implementation of the AMQP protocol. It's been tested against RabbitMQ.",
+            "homepage": "https://github.com/php-amqplib/php-amqplib/",
+            "keywords": [
+                "message",
+                "queue",
+                "rabbitmq"
+            ],
+            "support": {
+                "issues": "https://github.com/php-amqplib/php-amqplib/issues",
+                "source": "https://github.com/php-amqplib/php-amqplib/tree/v3.7.2"
+            },
+            "time": "2024-11-21T09:21:41+00:00"
+        },
         {
             "name": "php-di/phpdoc-reader",
             "version": "2.2.1",
@@ -4883,6 +5157,116 @@
             ],
             "time": "2024-07-20T21:41:07+00:00"
         },
+        {
+            "name": "phpseclib/phpseclib",
+            "version": "3.0.42",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phpseclib/phpseclib.git",
+                "reference": "db92f1b1987b12b13f248fe76c3a52cadb67bb98"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/db92f1b1987b12b13f248fe76c3a52cadb67bb98",
+                "reference": "db92f1b1987b12b13f248fe76c3a52cadb67bb98",
+                "shasum": ""
+            },
+            "require": {
+                "paragonie/constant_time_encoding": "^1|^2|^3",
+                "paragonie/random_compat": "^1.4|^2.0|^9.99.99",
+                "php": ">=5.6.1"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "*"
+            },
+            "suggest": {
+                "ext-dom": "Install the DOM extension to load XML formatted public keys.",
+                "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
+                "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.",
+                "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.",
+                "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations."
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "phpseclib/bootstrap.php"
+                ],
+                "psr-4": {
+                    "phpseclib3\\": "phpseclib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jim Wigginton",
+                    "email": "terrafrost@php.net",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Patrick Monnerat",
+                    "email": "pm@datasphere.ch",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Andreas Fischer",
+                    "email": "bantu@phpbb.com",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Hans-Jürgen Petrich",
+                    "email": "petrich@tronic-media.com",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Graham Campbell",
+                    "email": "graham@alt-three.com",
+                    "role": "Developer"
+                }
+            ],
+            "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
+            "homepage": "http://phpseclib.sourceforge.net",
+            "keywords": [
+                "BigInteger",
+                "aes",
+                "asn.1",
+                "asn1",
+                "blowfish",
+                "crypto",
+                "cryptography",
+                "encryption",
+                "rsa",
+                "security",
+                "sftp",
+                "signature",
+                "signing",
+                "ssh",
+                "twofish",
+                "x.509",
+                "x509"
+            ],
+            "support": {
+                "issues": "https://github.com/phpseclib/phpseclib/issues",
+                "source": "https://github.com/phpseclib/phpseclib/tree/3.0.42"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/terrafrost",
+                    "type": "github"
+                },
+                {
+                    "url": "https://www.patreon.com/phpseclib",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-09-16T03:06:04+00:00"
+        },
         {
             "name": "psr/cache",
             "version": "3.0.0",
@@ -10272,12 +10656,12 @@
     ],
     "aliases": [],
     "minimum-stability": "dev",
-    "stability-flags": {},
+    "stability-flags": [],
     "prefer-stable": true,
     "prefer-lowest": false,
     "platform": {
         "php": ">=8.1"
     },
-    "platform-dev": {},
+    "platform-dev": [],
     "plugin-api-version": "2.6.0"
 }

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
runtime/container/classes.cache


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
runtime/container/scan.cache


Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio