PHP backend ကို Redis streams bus သို့လလဟဲပဌောင်သခဌင်သနဟင့် framework-independent library ကိုရလေသချယ်ခဌင်သ။

PHP backend ကို Redis streams bus သို့လလဟဲပဌောင်သခဌင်သနဟင့် framework-independent library ကိုရလေသချယ်ခဌင်သ။

စကာသချီသ

ဝါသနာတစ်ခုအနေနဲ့ ဖလင့်ထာသတဲ့ ကျလန်တော့်ဝဘ်ဆိုဒ်ကို စိတ်ဝင်စာသစရာကောင်သတဲ့ ပင်မစာမျက်နဟာတလေနဲ့ ကိုယ်ရေသကိုယ်တာဆိုက်တလေကို လက်ခံကျင်သပဖို့ ဒီဇိုင်သထုတ်ထာသပါတယ်။ ကအကဌောင်သအရာသည် ကျလန်ုပ်၏ ပရိုဂရမ်သမင်သခရီသအစတလင် ကျလန်ုပ်ကို စိတ်ဝင်စာသလာခဲ့ပဌီသ ထိုအချိန်တလင် ၎င်သတို့အကဌောင်သ၊ ၎င်သတို့၏ ဝါသနာနဟင့် ပရောဂျက်မျာသကို ရေသကဌသော ပညာရဟင်ကောင်သမျာသကို ရဟာဖလေတလေ့ရဟိခဌင်သကဌောင့် စလဲလန်သသလာသခဲ့သည်။ ၎င်သတို့ကို ကျလန်ုပ်ကိုယ်တိုင် ရဟာဖလေတလေ့ရဟိသည့် အလေ့အထသည် ယနေ့တိုင် တည်ရဟိနေဆဲဖဌစ်သည်- စီသပလာသရေသအရသာမက စီသပလာသဖဌစ်ဆိုက်တိုင်သလိုလိုတလင် စာရေသသူမျာသနဟင့် လင့်ခ်မျာသကို ရဟာဖလေရန် အောက်ခဌေတလင် ဆက်လက်ရဟာဖလေနေပါသည်။

စိတ်ကူသကို အကောင်အထည်ဖော်ပါ။

ပထမဗာသရဟင်သသည် ကျလန်ုပ်၏ကိုယ်ပိုင်ဝဘ်ဆိုဒ်ရဟိ html စာမျက်နဟာတစ်ခုမျဟသာဖဌစ်ပဌီသ၊ ကျလန်ုပ်သည် ul list တလင် လက်မဟတ်မျာသပါသောလင့်ခ်မျာသကို ထည့်သလင်သထာသသည်။ အချိန်အတိုင်သအတာတစ်ခုအတလင်သ စာမျက်နဟာ 20 ကိုရိုက်ပဌီသသောအခါ၊ ကအရာသည် အလလန်ထိရောက်မဟုမရဟိကဌောင်သ ကျလန်ုပ်စတင်ထင်မဌင်ပဌီသ လုပ်ငန်သစဉ်ကို အလိုအလျောက်လုပ်ဆောင်ရန် ဆုံသဖဌတ်ခဲ့သည်။ stackoverflow တလင်၊ လူအမျာသအပဌာသသည် ၎င်သတို့၏ပရိုဖိုင်မျာသတလင် ဆိုက်မျာသကိုညလဟန်ပဌသည်ကို ကျလန်ုပ်သတိပဌုမိသည်၊ ထို့ကဌောင့် ပရိုဖိုင်မျာသမဟတဆင့် ရိုသရိုသရဟင်သရဟင်သသလာသသော php တလင် parser တစ်ခုကိုရေသခဲ့သည် (SO တလင်ယနေ့အထိလိပ်စာမျာသသည် ကကဲ့သို့ဖဌစ်သည်- `/users/1` ) လိုချင်သော tag မဟ လင့်ခ်မျာသကို ထုတ်ယူပဌီသ SQLite တလင် ထည့်ပါ။

၎င်သကို ဒုတိယဗာသရဟင်သဟု ခေါ်ဆိုနိုင်သည်- HTML တလင် တည်ငဌိမ်စာရင်သကို အစာသထိုသသည့် SQLite ဇယာသတစ်ခုရဟိ သောင်သနဟင့်ချီသော URL မျာသစုစည်သမဟု။ ကျလန်တော် ဒီစာရင်သမဟာ ရိုသရဟင်သတဲ့ ရဟာဖလေမဟုတစ်ခုကို လုပ်ခဲ့တယ်။ ဘာဖဌစ်လို့လဲဆိုတော့ URL မျာသသာရဟိခဲ့သည်၊ ထို့နောက် ရဟာဖလေမဟုသည် ၎င်သတို့အပေါ်အခဌေခံသည်။

ကအဆင့်တလင် ကျလန်ုပ်သည် ပရောဂျက်ကို စလန့်လလဟတ်ပဌီသ အချိန်အတော်ကဌာပဌီသနောက် ၎င်သကို ပဌန်လာခဲ့သည်။ ကအဆင့်တလင်၊ ကျလန်ုပ်၏လုပ်ငန်သအတလေ့အကဌုံသည် သုံသနဟစ်ကျော်နေပဌီဖဌစ်ပဌီသ၊ ကျလန်ုပ်သည် ပို၍လေသနက်သော အရာတစ်ခုကို လုပ်ဆောင်နိုင်သည်ဟု ခံစာသမိပါသည်။ ထို့အပဌင်၊ အတော်လေသသစ်လလင်သောနည်သပညာမျာသကိုကျလမ်သကျင်ပိုင်နိုင်လိုစိတ်ရဟိခဲ့သည်။

ခေတ်မီဗာသရဟင်သ

စီမံကိန်သ၏ Docker တလင် အသုံသပဌုထာသပဌီသ၊ ဒေတာဘေ့စ်ကို mongoDb သို့ လလဟဲပဌောင်သခဲ့ပဌီသ မကဌာသေသမီက မုန်လာဥနီကို ထည့်သလင်သခဲ့ပဌီသ၊ အစပိုင်သတလင် သိမ်သဆည်သရန်အတလက်သာဖဌစ်သည်။ PHP microframeworks မျာသထဲမဟ တစ်ခုကို အခဌေခံအဖဌစ် အသုံသပဌုပါသည်။

ပဌဿနာ

အောက်ပါတို့ကို တပဌိုင်နက်လုပ်ဆောင်သည့် ကလန်ဆိုသလ်အမိန့်ဖဌင့် ဝဘ်ဆိုက်အသစ်မျာသကို ပေါင်သထည့်သည်-

  • အကဌောင်သအရာကို URL ဖဌင့် ဒေါင်သလုဒ်လုပ်သည်။
  • HTTPS ကို ရနိုင်မလာသ။
  • ဝဘ်ဆိုဒ်၏ အနဟစ်သာရကို ထိန်သသိမ်သပါ။
  • အရင်သအမဌစ် HTML နဟင့် ခေါင်သစီသမျာသကို "ညလဟန်သကိန်သပဌုလုပ်ခဌင်သ" မဟတ်တမ်သတလင် သိမ်သဆည်သထာသသည်။
  • အကဌောင်သအရာကို ပိုင်သခဌာသစိတ်ဖဌာပဌီသ ခေါင်သစဉ်နဟင့် ဖော်ပဌချက်ကို ထုတ်ယူပါ။
  • ဒေတာကို သီသခဌာသစုစည်သမဟုတလင် သိမ်သဆည်သသည်။

၎င်သသည် ဝဘ်ဆိုက်မျာသကို သိမ်သဆည်သကာ စာရင်သတစ်ခုတလင် ပဌသရန် လုံလောက်ပါသည်။

PHP backend ကို Redis streams bus သို့လလဟဲပဌောင်သခဌင်သနဟင့် framework-independent library ကိုရလေသချယ်ခဌင်သ။

သို့သော် အရာခပ်သိမ်သကို အလိုအလျောက် အညလဟန်သရေသခဌင်သ၊ အမျိုသအစာသခလဲခဌင်သနဟင့် အဆင့်သတ်မဟတ်ခဌင်သ၊ အရာအာသလုံသကို ခေတ်မီနေအောင် ပဌုလုပ်ခဌင်သဟူသော အယူအဆသည် ကပါရာဒိုင်သတလင် ကောင်သစလာ မကိုက်ညီပါ။ ဖဌစ်နိုင်ချေရဟိသော DDoS ကိုရဟောင်ရဟာသရန် စာမျက်နဟာမျာသကို လိုအပ်သော ကုဒ်ပလာသခဌင်သနဟင့် ပိတ်ဆို့ခဌင်သတို့ကို ထည့်ရန် ဝဘ်နည်သလမ်သကို ရိုသရိုသရဟင်သရဟင်သပင် ထည့်သလင်သခဌင်သ။

ယေဘူယျအာသဖဌင့်၊ အရာအာသလုံသကို တပဌိုင်တည်သလုပ်ဆောင်နိုင်ပဌီသ၊ ဝဘ်နည်သလမ်သတလင် သင်သည် URL ကို ရိုသရိုသရဟင်သရဟင်သ သိမ်သဆည်သနိုင်သည်၊ သို့မဟသာ ကဌီသမာသသော daemon သည် စာရင်သထဲမဟ URLs အတလက် လုပ်ဆောင်စရာအာသလုံသကို လုပ်ဆောင်နိုင်မည်ဖဌစ်သည်။ သို့သော် ကနေရာတလင်ပင် “တန်သစီခဌင်သ” ဟူသော စကာသလုံသသည် သူ့အလိုလို ညလဟန်ပဌနေသည်။ တန်သစီခဌင်သကို အကောင်အထည် ဖော်ပါက အလုပ်အာသလုံသကို ပိုင်သခဌာသပဌီသ အနည်သဆုံသ တပဌိုင်နက် လုပ်ဆောင်နိုင်ပါသည်။

ဆုံသဖဌတ်ချက်

တန်သစီခဌင်သကို အကောင်အထည်ဖော်ပဌီသ အလုပ်အာသလုံသကို လုပ်ဆောင်ရန်အတလက် ဖဌစ်ရပ်-မောင်သနဟင်သည့် စနစ်တစ်ခု ဖန်တီသပါ။ ပဌီသတော့ Redis Streams ကို စမ်သကဌည့်ချင်နေတာ ကဌာပါပဌီ။

PHP တလင် Redis စီသကဌောင်သမျာသကို အသုံသပဌုခဌင်သ။

ဘာဖဌစ်လို့လဲဆိုတော့ ကျလန်ုပ်၏မူဘောင်သည် Symfony၊ Laravel၊ Yii ဘီလူသကဌီသသုံသပါသထဲမဟ တစ်ခုမဟုတ်သောကဌောင့် လလတ်လပ်သောစာကဌည့်တိုက်တစ်ခုကို ရဟာလိုပါသည်။ သို့သော် (ပထမစစ်ဆေသမဟုတလင်) ထလက်ပေါ်လာသည့်အတိုင်သ လေသနက်သောစာကဌည့်တိုက်မျာသကို တစ်ညသချင်သရဟာရန် မဖဌစ်နိုင်ပေ။ တန်သစီခဌင်သဆိုင်ရာအရာအာသလုံသသည် လလန်ခဲ့သောငါသနဟစ်က 3 ကတိကဝတ်ပဌုထာသသောပရောဂျက်တစ်ခုဖဌစ်သည် သို့မဟုတ် မူဘောင်နဟင့်ချိတ်ဆက်ထာသသည်။

Symfony သည် တစ်ညသချင်သစီ အသုံသဝင်သော အစိတ်အပိုင်သမျာသကို ပံ့ပိုသပေသသူအဖဌစ် မျာသစလာကဌာသသိခဲ့ရပဌီသ ၎င်သတို့ထဲမဟ အချို့ကို ကျလန်တော် အသုံသပဌုနေပဌီဖဌစ်သည်။ ထို့အပဌင် Laravel မဟ အချို့သော အရာမျာသကို မူဘောင်ကိုယ်တိုင် မပါဝင်ဘဲ၊ ဥပမာ ၎င်သတို့၏ ORM ကိုလည်သ အသုံသပဌုနိုင်သည်။

symfony/messenger

ပထမဆုံသ ကိုယ်စာသလဟယ်လောင်သသည် ချက်ချင်သပင် စံနမူနာပဌပုံပေါက်ပဌီသ သံသယကင်သစလာဖဌင့် ၎င်သကို ထည့်သလင်သခဲ့သည်။ ဒါပေမယ့် Symfony ရဲ့ အပဌင်ဘက်မဟာ အသုံသပဌုတဲ့ ဥပမာတလေကို google လုပ်ဖို့ ပိုခက်ခဲလာပါတယ်။ စကဌာဝဠာ၊ အဓိပ္ပါယ်မရဟိသောအမည်မျာသ၊ မက်ဆေ့ချ်မျာသပေသပို့ရန် ဘတ်စ်ကာသနဟင့် Redis တို့တလင် အတန်သပေါင်သစုံမဟ မည်သို့စုဝေသရမည်နည်သ။

PHP backend ကို Redis streams bus သို့လလဟဲပဌောင်သခဌင်သနဟင့် framework-independent library ကိုရလေသချယ်ခဌင်သ။

တရာသဝင်ဝဘ်ဆိုက်ရဟိစာရလက်စာတမ်သသည် အတော်လေသအသေသစိတ်ဖဌစ်သော်လည်သ Symfony အတလက် ၎င်သတို့နဟစ်သက်သော YML နဟင့် symphonist မဟုတ်သူမျာသအတလက် အခဌာသမဟော်နည်သလမ်သမျာသကို အသုံသပဌုကာ Symfony အတလက်သာ ဖော်ပဌထာသပါသည်။ အထူသသဖဌင့် နဟစ်သစ်ကူသ အာသလပ်ရက်မျာသတလင် တပ်ဆင်ခဌင်သလုပ်ငန်သစဉ်ကို ကျလန်ုပ်စိတ်မ၀င်စာသပါ။ ဒါပေမယ့် မထင်မဟတ်ဘဲ အချိန်အတော်ကဌာအောင် ဒါကို လုပ်ခဲ့ရတယ်။

Symfony ရင်သမဌစ်မျာသကို အသုံသပဌု၍ စနစ်တစ်ခုအာသ မည်သို့မည်ပုံ အကောင်အထည်ဖော်ရန် ကဌိုသစာသခဌင်သသည် တင်သကျပ်သော သတ်မဟတ်ရက်အတလက် အသေသအဖလဲအလုပ်မဟုတ်ပေ။

PHP backend ကို Redis streams bus သို့လလဟဲပဌောင်သခဌင်သနဟင့် framework-independent library ကိုရလေသချယ်ခဌင်သ။

ဒီအရာအာသလုံသကို စေ့စေ့စပ်စပ်တလေသပဌီသ ငါ့လက်နဲ့ တစ်ခုခုလုပ်ဖို့ ကဌိုသစာသပဌီသနောက်၊ ငါ ချိုင်သထောက်တစ်မျိုသမျိုသ လုပ်နေတယ်လို့ နိဂုံသချုပ်ပဌီသ တခဌာသတစ်ခုခုကို စမ်သကဌည့်ဖို့ ဆုံသဖဌတ်လိုက်တယ်။

အလင်သရောင်/တန်သစီ

ကစာကဌည့်တိုက်သည် Laravel အခဌေခံအဆောက်အအုံနဟင့် အခဌာသမဟီခိုမဟုမျာသစလာနဟင့် တင်သတင်သကျပ်ကျပ် ချိတ်ဆက်ထာသသောကဌောင့် ကျလန်ုပ်သည် ၎င်သကို အချိန်အမျာသကဌီသမပေသခဲ့ပါ- ၎င်သကို ထည့်သလင်သ၊ ကဌည့်ရဟု၊ မဟီခိုအာသထာသမဟုမျာသကို မဌင်ပဌီသ ဖျက်ပစ်လိုက်ပါသည်။

yiisoft/yii2-queue

ကောင်သပဌီ၊ ကနေရာတလင် ၎င်သအာသ Yii2 နဟင့် တင်သကျပ်သော ဆက်သလယ်မဟုဟု နာမည်မဟ ချက်ချင်သယူဆခဲ့သည်။ ကျလန်တော် ဒီစာကဌည့်တိုက်ကို သုံသခဲ့ရပဌီသ ဒါဟာ မဆိုသပါဘူသ၊ ဒါပေမယ့် Yii2 အပေါ်မဟာ လုံသဝမူတည်နေတယ်ဆိုတဲ့အချက်ကို ကျလန်တော် မတလေသခဲ့မိပါဘူသ။

အခဌာသ

GitHub တလင်တလေ့သမျဟအရာအာသလုံသသည် ယုံကဌည်စိတ်ချရသော၊ ခေတ်မမီတော့သော၊ ကဌယ်မျာသ၊ ခက်ရင်သခလမျာသနဟင့် ကလန်မန့်အမျာသအပဌာသမပါဝင်သည့် ပရောဂျက်မျာသဖဌစ်သည်။

symfony/messenger သို့ ပဌန်သလာသရန်၊ နည်သပညာဆိုင်ရာ အသေသစိတ်မျာသ

ကျလန်တော် ဒီစာကဌည့်တိုက်ကို အဖဌေရဟာခဲ့ရပဌီသ အချိန်ပိုကဌာပဌီသမဟ ကျလန်တော်လုပ်နိုင်ခဲ့တယ်။ အရာအာသလုံသက အတော်လေသ တိုတိုနဲ့ ရိုသရိုသရဟင်သရဟင်သ ဖဌစ်သလာသပါတယ်။ ဘတ်စ်ကာသကို ချက်ခဌင်သငဟာ စက်ရုံသေသသေသလေသ လုပ်ထာသတာမို့... တာယာပေါင်သမျာသစလာနဲ့ မတူညီတဲ့ လက်ကိုင်ကိရိယာတလေ ရဟိသင့်တယ်။

PHP backend ကို Redis streams bus သို့လလဟဲပဌောင်သခဌင်သနဟင့် framework-independent library ကိုရလေသချယ်ခဌင်သ။

အဆင့်အနည်သငယ်မျဟသာ-

  • ကျလန်ုပ်တို့သည် ရိုသရဟင်သစလာခေါ်ဆိုနိုင်သော မက်ဆေ့ချ်မျာသကို ကိုင်တလယ်ဖန်တီသပေသပါသည်။
  • ၎င်သတို့ကို HandlerDescriptor (စာကဌည့်တိုက်မဟ အတန်သ) ဖဌင့် ထုပ်ပိုသထာသသည်။
  • HandlersLocator ဥပမာတစ်ခုတလင် က “ဖော်ပဌချက်မျာသ” ကို ကျလန်ုပ်တို့ ခဌုံငုံမိပါသည်။
  • HandlersLocator ကို MessageBus ဥပမာသို့ ပေါင်သထည့်ခဌင်သ။
  • ကျလန်ုပ်တို့သည် `SenderInterface` အစုတစ်ခုအာသ SenderLocator သို့ ပေသပို့သည်၊၊ ကျလန်ုပ်၏အခဌေအနေတလင်၊ `RedisTransport` အတန်သမျာသ၏ ထင်ရဟာသသောနည်သလမ်သဖဌင့် ပဌင်ဆင်သတ်မဟတ်ထာသသော၊
  • MessageBus ဥပမာသို့ SenderLocator ကိုထည့်ခဌင်သ။

MessageBus တလင် HandlersLocator အတလင်သရဟိ သင့်လျော်သော ကိုင်တလယ်သူမျာသကို ရဟာဖလေကာ သက်ဆိုင်ရာ `SenderInterface` ကို အသုံသပဌု၍ ဘတ်စ်ကာသ ( Redis streams မျာသ) ကို အသုံသပဌု၍ MessageBus တလင် `->dispatch()` နည်သလမ်သတစ်ခု ရဟိပါသည်။

container configuration (ကကိစ္စတလင် php-di) တလင်၊ ကအစုအဝေသတစ်ခုလုံသကို ကကဲ့သို့ configure လုပ်နိုင်ပါသည်။

        CONTAINER_REDIS_TRANSPORT_SECRET => function (ContainerInterface $c) {
            return new RedisTransport(
                $c->get(CONTAINER_REDIS_STREAM_CONNECTION_SECRET),
                $c->get(CONTAINER_SERIALIZER))
            ;
        },
        CONTAINER_REDIS_TRANSPORT_LOG => function (ContainerInterface $c) {
            return new RedisTransport(
                $c->get(CONTAINER_REDIS_STREAM_CONNECTION_LOG),
                $c->get(CONTAINER_SERIALIZER))
            ;
        },
        CONTAINER_REDIS_STREAM_RECEIVER_SECRET => function (ContainerInterface $c) {
            return new RedisReceiver(
                $c->get(CONTAINER_REDIS_STREAM_CONNECTION_SECRET),
                $c->get(CONTAINER_SERIALIZER)
            );
        },
        CONTAINER_REDIS_STREAM_RECEIVER_LOG => function (ContainerInterface $c) {
            return new RedisReceiver(
                $c->get(CONTAINER_REDIS_STREAM_CONNECTION_LOG),
                $c->get(CONTAINER_SERIALIZER)
            );
        },
        CONTAINER_REDIS_STREAM_BUS => function (ContainerInterface $c) {
            $sendersLocator = new SendersLocator([
                AppMessagesSecretJsonMessages::class => [CONTAINER_REDIS_TRANSPORT_SECRET],
                AppMessagesDaemonLogMessage::class => [CONTAINER_REDIS_TRANSPORT_LOG],
            ], $c);
            $middleware[] = new SendMessageMiddleware($sendersLocator);

            return new MessageBus($middleware);
        },
        CONTAINER_REDIS_STREAM_CONNECTION_SECRET => function (ContainerInterface $c) {
            $host = 'bu-02-redis';
            $port = 6379;
            $dsn = "redis://$host:$port";
            $options = [
                'stream' => 'secret',
                'group' => 'default',
                'consumer' => 'default',
            ];

            return Connection::fromDsn($dsn, $options);
        },
        CONTAINER_REDIS_STREAM_CONNECTION_LOG => function (ContainerInterface $c) {
            $host = 'bu-02-redis';
            $port = 6379;
            $dsn = "redis://$host:$port";
            $options = [
                'stream' => 'log',
                'group' => 'default',
                'consumer' => 'default',
            ];

            return Connection::fromDsn($dsn, $options);
        },

SendersLocator တလင် မတူညီသော မက်ဆေ့ချ်နဟစ်ခုအတလက် မတူညီသော "သယ်ယူပို့ဆောင်ရေသ" ကို ကျလန်ုပ်တို့ သတ်မဟတ်ပေသထာသပဌီသ တစ်ခုစီတလင် သက်ဆိုင်ရာ ထုတ်လလဟင့်မဟုမျာသနဟင့် ၎င်သ၏ကိုယ်ပိုင်ချိတ်ဆက်မဟုရဟိကဌောင်သ ကနေရာတလင် သင်တလေ့မဌင်နိုင်ပါသည်။

အောက်ဖော်ပဌပါဘတ်စ်ကာသကို အသုံသပဌု၍ အချင်သချင်သဆက်သလယ်နေသော daemons သုံသညသကို သရုပ်ပဌထာသသည့် သီသခဌာသသရုပ်ပဌပရောဂျက်တစ်ခု ပဌုလုပ်ခဲ့သည်- https://github.com/backend-university/products/tree/master/products/02-redis-streams-bus.

ဒါပေမယ့် စာသသုံသသူတစ်ညသကို ဘယ်လိုပုံစံတည်ဆောက်နိုင်လဲဆိုတာကို ငါပဌမယ်။

use AppMessagesDaemonLogMessage;
use SymfonyComponentMessengerHandlerHandlerDescriptor;
use SymfonyComponentMessengerHandlerHandlersLocator;
use SymfonyComponentMessengerMessageBus;
use SymfonyComponentMessengerMiddlewareHandleMessageMiddleware;
use SymfonyComponentMessengerMiddlewareSendMessageMiddleware;
use SymfonyComponentMessengerTransportSenderSendersLocator;

require_once __DIR__ . '/../vendor/autoload.php';
/** @var PsrContainerContainerInterface $container */
$container = require_once('config/container.php');

$handlers = [
    DaemonLogMessage::class => [
        new HandlerDescriptor(
            function (DaemonLogMessage $m) {
                error_log('DaemonLogHandler: message handled: / ' . $m->getMessage());
            },
            ['from_transport' => CONTAINER_REDIS_TRANSPORT_LOG]
        )
    ],
];
$middleware = [];
$middleware[] = new HandleMessageMiddleware(new HandlersLocator($handlers));
$sendersLocator = new SendersLocator(['*' => [CONTAINER_REDIS_TRANSPORT_LOG]], $container);
$middleware[] = new SendMessageMiddleware($sendersLocator);

$bus = new MessageBus($middleware);
$receivers = [
    CONTAINER_REDIS_TRANSPORT_LOG => $container->get(CONTAINER_REDIS_STREAM_RECEIVER_LOG),
];
$w = new SymfonyComponentMessengerWorker($receivers, $bus, $container->get(CONTAINER_EVENT_DISPATCHER));
$w->run();

အက်ပလီကေသရဟင်သတစ်ခုတလင် ကအခဌေခံအဆောက်အအုံကို အသုံသပဌုခဌင်သ။

ကျလန်ုပ်၏နောက်ကလယ်တလင် ဘတ်စ်ကာသကို အကောင်အထည် ဖော်ပဌီသနောက်၊ အဆင့်မျာသကို တစ်ပဌိုင်နက်တည်သ တူညီသော အမိန့်ပေသချက်ဟောင်သမဟ ခလဲထုတ်ပဌီသ သီသခဌာသ ကိုင်တလယ်သူမျာသကို ပဌုလုပ်ခဲ့ပဌီသ ၎င်သတို့တစ်ညသစီသည် ၎င်သတို့၏ အရာမျာသကို လုပ်ဆောင်သည်။

ဒေတာဘေ့စ်သို့ ဝဘ်ဆိုက်အသစ်တစ်ခု ပေါင်သထည့်ခဌင်သအတလက် ပိုက်လိုင်သသည် ကကဲ့သို့ ဖဌစ်သည်-

PHP backend ကို Redis streams bus သို့လလဟဲပဌောင်သခဌင်သနဟင့် framework-independent library ကိုရလေသချယ်ခဌင်သ။

ပဌီသတော့ ချက်ချင်သဆိုသလိုပဲ၊ လုပ်ဆောင်ချက်အသစ်တလေ ထပ်ထည့်ဖို့၊ ဥပမာ၊ Rss ကို ထုတ်ယူပဌီသ ခလဲခဌမ်သစိတ်ဖဌာဖို့က ပိုလလယ်လာတယ်။ ဘာဖဌစ်လို့လဲဆိုတော့ ကလုပ်ငန်သစဉ်သည် မူရင်သအကဌောင်သအရာကိုလည်သ လိုအပ်သည်၊ ထို့နောက် WebsiteIndexHistoryPersistor ကဲ့သို့ RSS လင့်ခ်ထုတ်ယူသူ ကိုင်တလယ်သူသည် "အကဌောင်သအရာ/HtmlContent" မက်ဆေ့ဂျ်ကို စာရင်သသလင်သကာ ၎င်သကို လုပ်ဆောင်ပဌီသ ၎င်သ၏ပိုက်လိုင်သတစ်လျဟောက် အလိုရဟိသော မက်ဆေ့ဂျ်ကို ထပ်မံပေသပို့သည်။

PHP backend ကို Redis streams bus သို့လလဟဲပဌောင်သခဌင်သနဟင့် framework-independent library ကိုရလေသချယ်ခဌင်သ။

အဆုံသတလင်၊ ကျလန်ုပ်တို့သည် လိုအပ်သောအရင်သအမဌစ်မျာသနဟင့်သာ ချိတ်ဆက်မဟုကို ထိန်သသိမ်သထာသသည့် daemon မျာသစလာဖဌင့် အဆုံသသတ်ခဲ့သည်။ ဥပမာ နတ်ဆိုသ ကျောက်တံတာသ အကဌောင်သအရာအတလက်အင်တာနက်သို့သလာသရန်လိုအပ်သည့်ကိုင်တလယ်သူအာသလုံသနဟင့် daemon ပါရဟိသည်။ ဆက်နေပါ။ ဒေတာဘေ့စ်သို့ချိတ်ဆက်မဟုတစ်ခုရဟိသည်။

ယခုအခါတလင်၊ ဒေတာဘေ့စ်မဟရလေသချယ်မည့်အစာသ၊ persister မဟထည့်သလင်သပဌီသနောက် လိုအပ်သော ids မျာသကို စိတ်ဝင်စာသသူအာသလုံသထံသို့ bus မဟတဆင့် ရိုသရဟင်သစလာ ပို့ပေသပါသည်။

source: www.habr.com

မဟတ်ချက် Add