Jadual Kandungan
1. Apakah itu pembalakan
2. Pengelogan tak segerak ThinkPHP6
3. Ringkasan
Rumah rangka kerja php ThinkPHP Bagaimana untuk menggunakan ThinkPHP6 untuk operasi pembalakan tak segerak?

Bagaimana untuk menggunakan ThinkPHP6 untuk operasi pembalakan tak segerak?

Jun 12, 2023 am 09:57 AM
thinkphp tak segerak pembalakan

Dengan perkembangan pesat Internet, perkhidmatan pembalakan telah menjadi modul penting untuk setiap aplikasi web berskala besar. Untuk memudahkan pelbagai keperluan seperti penyelesaian masalah ralat dan pemantauan prestasi, artikel ini akan memperkenalkan cara menggunakan rangka kerja ThinkPHP6 untuk melaksanakan operasi pengelogan tak segerak.

1. Apakah itu pembalakan

Dalam bidang sains komputer, pembalakan merujuk kepada rakaman peristiwa dan maklumat yang berlaku dalam sistem komputer. Biasanya, rekod ini disimpan dalam fail atau pangkalan data. Pembalakan membantu memahami status pengendalian sistem, menemui dan menyelesaikan masalah tepat pada masanya, dan dengan itu meningkatkan kebolehpercayaan dan kestabilan sistem.

Dalam aplikasi web, pengelogan boleh membantu pembangun lebih memahami masalah dan ralat yang dihadapi oleh sistem. Berdasarkan pengelogan, pembangun dapat memahami dengan jelas tingkah laku aplikasi dan di mana dan bila ralat berlaku.

2. Pengelogan tak segerak ThinkPHP6

Dalam proses pembangunan aplikasi, pengelogan ialah modul penting. Selain itu, pengelogan selalunya merupakan operasi yang memakan masa yang boleh menjejaskan prestasi sistem jika dilakukan secara serentak. Untuk tujuan ini, ThinkPHP6 memperkenalkan fungsi pengelogan tak segerak, supaya pengelogan tidak lagi menjejaskan kelajuan tindak balas aplikasi.

Biasanya log masuk pengawal atau model, kami menggunakan antara muka PsrLogLoggerInterface yang disuntik untuk mencapainya.

// Controller或Model中
use PsrLogLoggerInterface;

public function index(LoggerInterface $logger){
    $logger->info('hello world');
}
Salin selepas log masuk

Mudah digunakan. Untuk menggunakan pengelogan tak segerak, takrifkan pengelog tak segerak:

use MonologLogger;
use MonologHandlerStreamHandler;

$logger=new Logger("AsyncLogger");
$logger->pushHandler(new StreamHandler('runtime/log/async.log'), Logger::INFO);
Salin selepas log masuk

Selepas pengelog ditakrifkan, gunakan baris gilir untuk menghantar maklumat pengelogan Di sini kami memilih untuk menggunakan RabbitMQ sebagai perkhidmatan baris gilir.

// Message类
namespace appcommon;

class Message
{
    /**
     * 记录日志
     * @param $level
     * @param $message
     * @param array $context
     * @return bool
     */
    public static function log($level,$message,array $context=[]){
        $data=[
            'level'=>$level,
            'message'=>$message,
            'context'=>$context,
            'channel'=>'AsyncLogger',
            'datetime'=>date('Y-m-d H:i:s'),
            'host'=>$_SERVER['SERVER_ADDR'] ?? '',
            'uri'=>$_SERVER['REQUEST_URI'] ?? '',
        ];

        $producer=Queue::getConnection('AsyncLogger',true);
        $producer->setExchangeOptions(['name'=>'async_logs','type'=>'topic','durable'=>true])->declareExchange();

        try{
            $producer->publish(json_encode($data),[
                'routing_key' =>'log',
                'exchange' =>'async_logs',
            ]);
            return true;
        }catch (Exception $e){
            return false;
        }
    }
}
Salin selepas log masuk

Antaranya, kami menggunakan kelas appcommonQueue untuk menyediakan contoh sambungan rabbitmq selain merekod maklumat log, data juga mengandungi beberapa maklumat persekitaran, seperti masa, alamat IP, alamat uri yang diminta; , dsb.

Pengendali baris gilir:

// Consumer类
use BunnyMessage;
use PsrLogLoggerInterface;

class Consumer
{
    /**
     * @param Message $message
     * @param LoggerInterface $logger
     */
    public function process(Message $message,LoggerInterface $logger){
        $body=$message->content;
        $data= json_decode($body,true);
        $channel=$data['channel'] ?? 'default_logger';

        $logger->notice($data['message'], $data);
    }
}
Salin selepas log masuk

Sudah tentu, kami juga memerlukan kelas untuk membantu dalam memproses log.

// Queue类
namespace appcommon;

use BunnyAsyncClient;
use BunnyChannel;
use BunnyMessage;
use BunnyProtocolMethodBasicConsumeOkFrame;
use BunnyProtocolMethodChannelCloseFrame;
use BunnyProtocolMethodChannelCloseOkFrame;
use BunnyProtocolMethodConnectionCloseFrame;
use BunnyProtocolMethodConnectionCloseOkFrame;
use BunnyProtocolMethodConnectionStartFrame;
use BunnyClientStateEnum;
use BunnyMessage as BunnyMessage;

class Queue
{
    /**
     * @param string $queueName
     * @return Client|null
     */
    public static function getConnection(string $routingKey, bool $persistent=false):?Client
    {
        $config=config('rabbitmq.async_log');
        $client=new Client([
            'host' => $config['host'],
            'port' => $config['port'],
            'user' => $config['user'],
            'password' => $config['password'],
            'vhost' => $config['vhost'],//注意此处改为需要的 VHOST
            'concurrency' => 2,
        ]);

        try{
            $client->connect();
            $client->channel()
                ->then(function (Channel $channel) use($client,$routingKey,$persistent){
                    $channel->exchangeDeclare('async_logs','topic',true,true);
                    $channel->queueDeclare($routingKey, $passive=false,$durable=true,$exclusive=false,$autoDelete=false,$nowait=false);
                    $channel->queueBind($routingKey, 'async_logs', $routingKey);

                    $channel->consume(
                        function ($msg, Channel $channel, BunnyMessage $message) use($client,$routingKey){
                            $className=config('rabbitmq.async_log.consumer');
                            $consumer=new $className($client,$routingKey);
                            $consumer->process($message,app('log.async_logger'));
                            $channel->ack($msg);//处理消息
                        },
                        $routingKey,//队列Name
                        '',//消费Tag
                        false,//no_local
                        false,//no_ack
                        false,//exclusive
                        $persistent ? ['delivery_mode'=>2] : []
                    );
                });
        }catch (Exception $e){
            return null;
        }finally{
            return $client;
        }
    }
}
Salin selepas log masuk

Kod di atas mentakrifkan hos, port, dll. sambungan baris gilir, mencipta objek saluran melalui $client->channel(), mencipta pertukaran dan baris gilir melalui $channel->exchangeDeclare() dan $channel->queueDeclare(), serta menghubungkannya Mengikat . Akhir sekali, gunakan $channel->consume() untuk menggunakan mesej daripada baris gilir secara tidak segerak dan menghantar mesej ke kelas pemprosesan mesej.

3. Ringkasan

Artikel ini memperkenalkan cara menggunakan rangka kerja ThinkPHP6 untuk melaksanakan operasi pengelogan tak segerak supaya pengelogan tidak lagi menjejaskan kelajuan tindak balas aplikasi. Secara keseluruhannya, berikut ialah langkah-langkahnya:

  1. Bangunkan pembalak tak segerak anda sendiri
  2. Gunakan RabbitMQ untuk pemprosesan baris gilir mesej
  3. Tulis pengendali mesej

Dalam projek sebenar, kami perlu mengoptimumkan kod dan melaraskan konfigurasi baris gilir mengikut keperluan khusus. Melalui pengelogan tak segerak, kecekapan pengendalian aplikasi web boleh dipertingkatkan dengan berkesan, dan kestabilan dan kebolehpercayaan sistem boleh dipertingkatkan.

Atas ialah kandungan terperinci Bagaimana untuk menggunakan ThinkPHP6 untuk operasi pembalakan tak segerak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menjalankan projek thinkphp Bagaimana untuk menjalankan projek thinkphp Apr 09, 2024 pm 05:33 PM

Untuk menjalankan projek ThinkPHP, anda perlu: memasang Komposer untuk mencipta projek, masukkan direktori projek dan laksanakan php bin/console serve;

Terdapat beberapa versi thinkphp Terdapat beberapa versi thinkphp Apr 09, 2024 pm 06:09 PM

ThinkPHP mempunyai berbilang versi yang direka untuk versi PHP yang berbeza. Versi utama termasuk 3.2, 5.0, 5.1 dan 6.0, manakala versi kecil digunakan untuk membetulkan pepijat dan menyediakan ciri baharu. Versi stabil terkini ialah ThinkPHP 6.0.16. Apabila memilih versi, pertimbangkan versi PHP, keperluan ciri dan sokongan komuniti. Adalah disyorkan untuk menggunakan versi stabil terkini untuk prestasi dan sokongan terbaik.

Bagaimana untuk menjalankan thinkphp Bagaimana untuk menjalankan thinkphp Apr 09, 2024 pm 05:39 PM

Langkah-langkah untuk menjalankan ThinkPHP Framework secara setempat: Muat turun dan nyahzip ThinkPHP Framework ke direktori tempatan. Buat hos maya (pilihan) yang menunjuk ke direktori akar ThinkPHP. Konfigurasikan parameter sambungan pangkalan data. Mulakan pelayan web. Mulakan aplikasi ThinkPHP. Akses URL aplikasi ThinkPHP dan jalankannya.

Mana yang lebih baik, laravel atau thinkphp? Mana yang lebih baik, laravel atau thinkphp? Apr 09, 2024 pm 03:18 PM

Perbandingan prestasi rangka kerja Laravel dan ThinkPHP: ThinkPHP umumnya berprestasi lebih baik daripada Laravel, memfokuskan pada pengoptimuman dan caching. Laravel berfungsi dengan baik, tetapi untuk aplikasi yang kompleks, ThinkPHP mungkin lebih sesuai.

Bagaimana untuk memasang thinkphp Bagaimana untuk memasang thinkphp Apr 09, 2024 pm 05:42 PM

Langkah pemasangan ThinkPHP: Sediakan persekitaran PHP, Komposer dan MySQL. Buat projek menggunakan Komposer. Pasang rangka kerja dan kebergantungan ThinkPHP. Konfigurasikan sambungan pangkalan data. Hasilkan kod aplikasi. Lancarkan aplikasi dan lawati http://localhost:8000.

Bagaimanakah prestasi thinkphp? Bagaimanakah prestasi thinkphp? Apr 09, 2024 pm 05:24 PM

ThinkPHP ialah rangka kerja PHP berprestasi tinggi dengan kelebihan seperti mekanisme caching, pengoptimuman kod, pemprosesan selari dan pengoptimuman pangkalan data. Ujian prestasi rasmi menunjukkan bahawa ia boleh mengendalikan lebih daripada 10,000 permintaan sesaat, dan digunakan secara meluas dalam tapak web dan sistem perusahaan berskala besar seperti JD.com dan Ctrip dalam aplikasi praktikal.

Bagaimana untuk mencipta penyelesaian pengelogan tersuai untuk tapak web PHP anda Bagaimana untuk mencipta penyelesaian pengelogan tersuai untuk tapak web PHP anda May 03, 2024 am 08:48 AM

Terdapat beberapa cara untuk mencipta penyelesaian pengelogan tersuai untuk tapak web PHP anda, termasuk: menggunakan perpustakaan serasi PSR-3 (seperti Monolog, Log4php, PSR-3Logger) atau menggunakan fungsi pengelogan asli PHP (seperti error_log(), syslog( ), debug_print_backtrace()). Memantau tingkah laku aplikasi anda dan isu penyelesaian masalah boleh dilakukan dengan mudah menggunakan penyelesaian pengelogan tersuai, contohnya: Gunakan Monolog untuk mencipta pembalak yang merekodkan mesej ke fail cakera.

Bagaimana untuk melakukan pengendalian ralat dan log masuk dalam reka bentuk kelas C++? Bagaimana untuk melakukan pengendalian ralat dan log masuk dalam reka bentuk kelas C++? Jun 02, 2024 am 09:45 AM

Ralat pengendalian dan log masuk dalam reka bentuk kelas C++ termasuk: Pengendalian pengecualian: menangkap dan mengendalikan pengecualian, menggunakan kelas pengecualian tersuai untuk memberikan maklumat ralat khusus. Kod ralat: Gunakan integer atau penghitungan untuk mewakili keadaan ralat dan mengembalikannya dalam nilai pulangan. Penegasan: Sahkan syarat pra dan pasca, dan buang pengecualian jika ia tidak dipenuhi. Pengelogan perpustakaan C++: pengelogan asas menggunakan std::cerr dan std::clog. Perpustakaan pengelogan luaran: Integrasikan perpustakaan pihak ketiga untuk ciri lanjutan seperti penapisan tahap dan putaran fail log. Kelas log tersuai: Buat kelas log anda sendiri, abstrak mekanisme asas dan sediakan antara muka biasa untuk merekodkan tahap maklumat yang berbeza.

See all articles