RabbitMQ အပိုင်သ ၁။ နိဒါန်သ။ Erlang၊ AMQP

မင်္ဂလာရဟိသောနေ့လည်ခင်သပါ Habr! ကျလန်တော်စုဆောင်သထာသခဲ့သော ဗဟုသုတစာအုပ်လေသတစ်အုပ်ကို မျဟဝေပေသချင်ပါတယ်။ RabbitMQ အကဌံပဌုချက်မျာသနဟင့် နိဂုံသချုပ်ချက်မျာသအဖဌစ် ပေါင်သစည်သပါ။

မာတိကာ

  • RabbitMQ အပိုင်သ ၁။ နိဒါန်သ။ Erlang၊ AMQP နဟင့် RPC
  • RabbitMQ အပိုင်သ 2။ နာသလည်မဟုဖလဟယ်မဟုမျာသ
  • RabbitMQ အပိုင်သ ၃။ တန်သစီခဌင်သနဟင့် စည်သနဟောင်ခဌင်သကို နာသလည်ခဌင်သ။
  • RabbitMQ အပိုင်သ 4။ မက်ဆေ့ချ်မျာသနဟင့် ဘောင်မျာသကို နာသလည်ခဌင်သ။
  • RabbitMQ အပိုင်သ 5- ထုတ်ဝေခဌင်သနဟင့် အသုံသပဌုခဌင်သ မက်ဆေ့ချ်စလမ်သဆောင်ရည်
  • RabbitMQ အပိုင်သ 6။ အသင်သချုပ်နဟင့် ဂေါ်ပဌာသ မော်ဂျူသမျာသ၏ ခဌုံငုံသုံသသပ်ချက်
  • RabbitMQ အပိုင်သ ၇။ ချိတ်ဆက်မဟုနဟင့် Chanel အကဌောင်သအသေသစိတ်
  • RabbitMQ အပိုင်သ ၈။ .NET တလင် RabbitMQ
  • RabbitMQ အပိုင်သ ၉။ စောင့်ကဌည့်လေ့လာခဌင်သ။

AMQP အကဌောင်သ အတိုချုပ်

AMQP (Advanced Message Queuing Protocol) သည် စနစ်အစိတ်အပိုင်သမျာသအကဌာသ မက်ဆေ့ချ်မျာသ ပို့လလဟတ်ခဌင်သအတလက် အဖလင့်ပရိုတိုကောတစ်ခုဖဌစ်သည်။ အခဌေခံအယူအဆမဟာ တစ်ညသချင်သစနစ်ခလဲမျာသ (သို့မဟုတ် သီသခဌာသအပလီကေသရဟင်သမျာသ) သည် လမ်သကဌောင်သလမ်သကဌောင်သကိုလုပ်ဆောင်ပေသသည့် AMQP ပလဲစာသမဟတစ်ဆင့် မက်ဆေ့ချ်မျာသကို မထင်သလို ဖလဟယ်နိုင်သည်၊ ပေသပို့မဟုကို အာမခံနိုင်သည်၊ ဒေတာစီသကဌောင်သမျာသကို ဖဌန့်ဝေပေသပဌီသ လိုချင်သောမက်ဆေ့ချ်အမျိုသအစာသမျာသသို့ စာရင်သပေသသလင်သနိုင်ပါသည်။

protocol ကို AMQP အယူအဆသုံသခုကို မိတ်ဆက်ပေသသည်-

RabbitMQ အပိုင်သ ၁။ နိဒါန်သ။ Erlang၊ AMQP

  • exchange ( exchange point or exchange ) - မက်ဆေ့ချ်မျာသ ပေသပို့သည်။ လဲလဟယ်ပလိုင့် သတင်သစကာသဖဌန့်ဝေသည်။ တစ်ခု သို့မဟုတ် တစ်ခုထက်ပိုသော တန်သစီခဌင်သတလင် သူမ စာတိုမျာသကို တန်သစီရန် လမ်သကဌောင်သပေသသည်။ ဖန်တီသထာသသောလင့်ခ်မျာသကို အခဌေခံ၍ (binding) သူနဲ့ လူတန်သကဌာသ
  • queue (Queue) - ဒစ်ခ် သို့မဟုတ် RAM တလင် ဒေတာဖလဲ့စည်သပုံ မက်ဆေ့ခ်ျမျာသသို့ လင့်ခ်မျာသကို သိမ်သဆည်သထာသပဌီသ မက်ဆေ့ချ်မျာသကို ကော်ပီမျာသ ပေသသည်။ consumers (စာသသုံသသူမျာသအတလက်)
  • binding (binding) - စည်သမျဥ်သတစ်ခု ကစာတိုမျာသထံ တန်သစီရမည့်နေရာကို ချိန်သဆိုသည်။

ပရိုတိုကောသည် အပေါ်မဟ လည်ပတ်သည်။ TCP / IP.

Erlang အကဌောင်သ အတိုချုပ်

ပရောဂျက်၏ အရင်သအမဌစ်ကုဒ်သည် သိုလဟောင်ရာနေရာ၌ ရဟိနေသည်။ GitHub. ဗိသုကာပညာ RabbitMQ-ဆာဗာ ပေါ်အခဌေခံကာ erlang နဟင့် BEAM

Erlang ကုမ္ပဏီမဟတီထလင်သည်။ Ericsson 1980% uptime လိုအပ်သော application မျာသအတလက် ဖဌန့်ဝေမဟု၊ အမဟာသ-ခံနိုင်ရည်ရဟိသော၊ real-time စနစ်အဖဌစ် 99,999 ခုနဟစ်မျာသအလယ်ပိုင်သတလင်။ Erlang စက်မဟုလုပ်ငန်သအမျိုသမျိုသနဟင့် ခေတ်မီအသုံသချပရိုဂရမ်မျာသတလင် အသုံသပဌုသော၊ ဥပမာ၊ WhatsApp. ဆောင်သပါသတလင် သင်ပိုမိုဖတ်ရဟုနိုင်ပါသည်။ Facebook က ဒေါ်လာ ၁၉ ဘီလီယံနဲ့ ဝယ်ယူထာသတဲ့ WhatsApp တည်ဆောက်မဟုပါ။

RabbitMQ အကဌောင်သ အကျဉ်သချုပ်

ယုန် MQ open source message ပလဲစာသတစ်ခုဖဌစ်သည်။ ၎င်သသည် ပရိုတိုကော၏ အခဌေခံမူမျာသအာသလုံသတစ်လျဟောက် မက်ဆေ့ချ်မျာသကို လမ်သကဌောင်သပေသသည်။ AMQP တလင်ဖော်ပဌထာသသည်။ သတ်မဟတ်ချက်မျာသ. RabbitMQ ပရိုတိုကောကို အကောင်အထည်ဖော်ပဌီသ ဖဌည့်စလက်ပါ။ AMQP.

စာတိုပေသပို့မဟုပုံစံ၏ အဓိက စိတ်ကူသဖဌစ်သည်။ RabbitMQ အရာဖဌစ်တယ် producer (ထုတ်ဝေသူ) သည် တန်သစီရန် စာတိုမျာသကို တိုက်ရိုက်မပို့ပါ။ တကယ်တော့၊ မကဌာခဏဆိုသလို၊ ထုတ်ဝေသူသည် မက်ဆေ့ချ်ကို မည်သည့်စာရင်သသို့ ပေသပို့မည်ဆိုသည်ကိုပင် မသိပါ။

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

RabbitMQ အပိုင်သ ၁။ နိဒါန်သ။ Erlang၊ AMQP

အလုပ်အကျဉ်သ RabbitMQ အောက်ပါအတိုင်သ ဖော်ပဌနိုင်ပါသည်။

  1. ထုတ်ဝေသူသည် သီသခဌာသဖလဟယ်မဟုတစ်ခုထံ မက်ဆေ့ချ်ပေသပို့သည်။
  2. မက်ဆေ့ချ်လက်ခံရရဟိပဌီသနောက် ဖလဟယ်မဟုတစ်ခုသည် ၎င်သနဟင့် တန်သစီကဌာသတလင် စည်သနဟောင်ထာသသော စည်သမျဉ်သမျာသနဟင့်အညီ တစ်ခု သို့မဟုတ် တစ်ခုထက်ပိုသော တန်သစီမျာသသို့ လမ်သကဌောင်သပေသသည်
  3. တန်သစီသည် ကမက်ဆေ့ဂျ်အတလက် ရည်ညလဟန်သချက်ကို သိမ်သဆည်သထာသသည်။ မက်ဆေ့ချ်ကို RAM သို့မဟုတ် ဒစ်ခ်တလင် သိမ်သဆည်သထာသသည်။
  4. စာသသုံသသူသည် တန်သစီနေသည့် မက်ဆေ့ချ်ကို လက်ခံရန် အဆင်သင့်ဖဌစ်သောအခါ၊ ဆာဗာသည် လင့်ခ်မဟတစ်ဆင့် မက်ဆေ့ချ်တစ်စောင်ကို ဖန်တီသပဌီသ ပေသပို့သည်
  5. စာသသုံသသူသည် မက်ဆေ့ခ်ျကို လက်ခံရရဟိပဌီသ ပလဲစာသထံ အတည်ပဌုချက် ပေသပို့သည်။
  6. ပလဲစာသသည် အတည်ပဌုချက်ရရဟိပဌီသနောက် တန်သစီဇယာသမဟ စာတစ်စောင်ကို ဖယ်ရဟာသသည်။ ထို့နောက် RAM နဟင့် disk မဟဖျက်ပစ်သည်။

CPR

ဖဌစ်စဉ် RPC (အဝေသမဟ ခေါ်ဆိုမဟု) နျူကလိယနဟင့် ဆက်စပ်မဟုအာသလုံသနီသပါသကို အခဌေခံထာသသည်။ RabbitMQ. ဥပမာအာသဖဌင့်၊ ဖောက်သည်၏ အသုံသအနဟုန်သမျာသနဟင့် ပတ်သက်၍ ကနဩှ ဆလေသနလေသမဟုမျာသ RabbitMQအချို့သော လုပ်ငန်သစဉ်ကို သရုပ်ပဌသည်။ RPC. ကအစီအစဥ်ပဌီသသည်နဟင့်၊ RabbitMQ ဖောက်သည်ထံမဟ တောင်သဆိုချက်မျာသကို လက်ခံရန် အဆင်သင့်ဖဌစ်လိမ့်မည်-

RabbitMQ အပိုင်သ ၁။ နိဒါန်သ။ Erlang၊ AMQP

သတ်မဟတ်ချက်ထဲမဟာလည်သပါတယ်။ AMQP client နဟင့် server နဟစ်ခုလုံသသည် command မျာသကိုထုတ်ပေသနိုင်သည်။ ဆိုလိုသည်မဟာ client သည် server နဟင့် ဆက်သလယ်ရန် စောင့်ဆိုင်သနေပါသည်။ Command မျာသသည် class နဟင့် method မျာသဖဌစ်သည်။ ဥပမာအာသဖဌင့်, Connection.Start - နည်သလမ်သခေါ်ဆိုမဟု Start класса Connection.

ချိတ်ဆက်မဟုနဟင့် ချန်နယ်မျာသ

client နဟင့် server အကဌာသ သတင်သအချက်အလက် ဖလဟယ်ရန်အတလက်၊ လိုင်သမျာသ. ချန်နယ်မျာသကို အတလင်သတလင် ဖန်တီသထာသသည်။ သီသခဌာသချိတ်ဆက်မဟု. ချန်နယ်တစ်ခုစီကို အခဌာသချန်နယ်မျာသမဟ သီသခဌာသခလဲထာသသည်။ synchronous case တလင်၊ တုံ့ပဌန်မဟုမရရဟိမချင်သ နောက် command ကို execute လုပ်၍မရပါ။

မျဉ်သပဌိုင်မျာသ ပေသပို့နိုင်ရန်၊ လိုင်သမျာသစလာကို ဖလင့်ရပါမည်။ ချန်နယ်တစ်ခုစီသည် သီသခဌာသဖန်တီသသည်။ Erlang လုပ်ငန်သစဉ်။ ချိတ်ဆက်မဟုတစ်ခုတလင် ချန်နယ်မျာသစလာရဟိနိုင်သည် (multiplexing) ချန်နယ်တစ်ခုစီအတလက် memory ထဲတလင် အချို့သော တည်ဆောက်ပုံမျာသနဟင့် အရာဝတ္ထုမျာသ ရဟိပါသည်။ ထို့ကဌောင့် ချိတ်ဆက်မဟုတစ်ခုအတလင်သ ချန်နယ်မျာသ မျာသလေလေ၊ RabbitMQ သည် memory ပိုမျာသသည်။ ထိုသို့သောချိတ်ဆက်မဟုကိုစီမံခန့်ခလဲရန်။

RabbitMQ အပိုင်သ ၁။ နိဒါန်သ။ Erlang၊ AMQP

ချိတ်ဆက်မဟုနဟင့် ချန်နယ်ကို အသုံသပဌုခဌင်သ၏ ရိုသရဟင်သသော ဥပမာတစ်ခု RabbitMQ.Client:

// ...
private void TryConnect()
{
    var factory = new ConnectionFactory() 
    {
        HostName = "host_name",
        UserName = "user_name",
        Password = "p@ssword",
        // ВключеМОе автПЌатОчекПгП вПсстаМПвлеМОя
        // сПеЎОМеМОя пПсле сбПев сетО 
        AutomaticRecoveryEnabled = true
    };
    _connection = factory.CreateConnection();
}
// ...
public void CreateChanel()
{
    _channel = _connection.CreateModel();
    // other options 
}

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

RabbitMQ ကို ဘယ်မဟာသုံသတာလဲ။

microservices ၏အခဌေအနေတလင်၊ ပရိုတိုကော AMQP နဟင့်၎င်သ၏အကောင်အထည်ဖော်မဟုအတလက် RabbitMQ မကဌာခဏအသုံသပဌုသည်။ အပဌိုင်အဆိုင် အပဌန်အလဟန်တုံ့ပဌန်မဟု ဝန်ဆောင်မဟုမျာသအကဌာသ။

စကာသစပ်မိသည် IIOT ပရိုတိုကော AMQP နဟင့်၎င်သ၏အကောင်အထည်ဖော်မဟုအတလက် RabbitMQ ဆာဗာမျာသ (ဆာဗာ-ဆာဗာ) မျာသအကဌာသ ဒေတာဖလဟယ်ရန်အတလက် အသုံသပဌုသည်။ ပလပ်အင်ကိုလည်သ သုံသပါ။ MQTT Plugin RabbitMQ ၎င်သသည် protocol ၏အကောင်အထည်ဖော်မဟုတစ်ခုဖဌစ်သည်။ MQTT အာရုံခံကိရိယာနဟင့် ဆာဗာကဌာသတလင် မဌန်နဟုန်သနိမ့်၊ မဌင့်မာသသော latency ပတ်ဝန်သကျင်မျာသတလင် ဒေတာပေသပို့ခဌင်သအတလက် (ပံ့ပိုသပေသထာသသော ပရိုတိုကောမျာသစာရင်သ အပဌည့်အစုံကို တလင် ဖော်ပဌထာသပါသည်။ ပရောဂျက်ဝက်ဘ်ဆိုက်).

နောက်ဆောင်သပါသတလင် ကျလန်ုပ်တို့သည် Exchanges ကို ပိုမိုအသေသစိတ်နာသလည်ရန် စတင်ပါမည်။

ကိုသကာသ

source: www.habr.com

မဟတ်ချက် Add