RabbitMQ အပိုင်း 2။ နားလည်မှုဖလှယ်မှုများ

Exchange - လဲလှယ်သူသို့မဟုတ်လဲလှယ်အချက်။ မက်ဆေ့ခ်ျတွေ ပို့တယ်။ Exchange သတင်းစကားဖြန့်ဝေသည်။ တစ်ခု သို့မဟုတ် တစ်ခုထက်ပိုသော တန်းစီခြင်းတွင် သူ စာတိုများကို တန်းစီရန် လမ်းကြောင်းပေးသည်။ ဖန်တီးထားသောလင့်ခ်များကို အခြေခံ၍ (bindings) ၎င်းနှင့်လူတန်းကြား။

Exchange မဟုတ်ပါဘူး Erlang လုပ်ငန်းစဉ်. လုပ်နိုင်ကိုင်နိုင်မှုကိစ္စတွေကြောင့်ပါ။ exchange Built-in ဒေတာဘေ့စ်တွင် လမ်းကြောင်းတင်ခြင်းဆိုင်ရာ ယုတ္တိဗေဒတည်ရှိရာ ကုဒ်ပါသော ကြိုးတစ်ချောင်း (မော်ဂျူးသို့ လင့်ခ်) သတိမေ့ခြင်း။. ငွေလဲလှယ်သူ ၁ဝဝဝ သည် မမ်မိုရီ 1MB သာ စားသုံးမည်ဖြစ်သည်။

မာတိကာ

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

တိုက်ရိုက်ချိန်း

Direct exchange - လိုအပ်တဲ့အခါ သုံးတယ်။ သီးခြားစီတန်းများသို့ မက်ဆေ့ချ်ပေးပို့ပါ။. မက်ဆေ့ချ်ကို သတ်သတ်မှတ်မှတ်ဖြင့် လဲလှယ်သူထံ လွှင့်တင်ထားသည်။ Routing သော့ နှင့် အလားတူလမ်းကြောင်းပြသော့ဖြင့် ဤလဲလှယ်သူနှင့် ဆက်စပ်နေသည့် တန်းစီများအားလုံးသို့ ရောက်သည်။ Routing key သည် string တစ်ခုဖြစ်သည်။. Matching ကို အသုံးပြု၍ လုပ်ဆောင်သည်။ တန်းတူညီမျှမှုအတွက် ကြိုးများကို စစ်ဆေးခြင်း။.

မက်ဆေ့ဂျ်စီးဆင်းမှု၏ ဂရပ်ဖစ်ကိုယ်စားပြုမှု-

RabbitMQ အပိုင်း 2။ နားလည်မှုဖလှယ်မှုများ

В rabbitmq အယူအဆတစ်ခုရှိပါတယ်။ ပုံသေလဲလှယ်သူ။ ဤ direct exchange နာမည်မရှိ။ ပုံသေလဲလှယ်သူကို အသုံးပြုပါက၊ မက်ဆေ့ချ်ကို အမည်နှင့် ညီမျှသော တန်းစီတစ်ခုသို့ ပို့ဆောင်မည်ဖြစ်သည်။ မက်ဆေ့ချ်လမ်းကြောင်းပြသော့.

ခေါင်းစဉ်ချိန်း

Topic exchange - အလားတူ direct exchange လမ်းကြောင်းကီးကို နှိုင်းယှဉ်ခြင်းဖြင့် ရွေးချယ်ထားသောလမ်းကြောင်းကို ဖွင့်ပေးသည်။ သို့သော် ဤကိစ္စတွင် သော့ကို ပေးထားသည်။ ပုံစံခွက်ဖြင့်. နမူနာပုံစံဖန်တီးသောအခါတွင် အသုံးပြုပါ။ 0 သို့မဟုတ် ထို့ထက်ပိုသော စကားလုံးများ (စာလုံးများ AZ и az နံပါတ်များ 0-9) အစက်အပြင် သင်္ကေတများဖြင့် ပိုင်းခြားထားသည်။ * и #.

  • * -အတိအကျဖြင့် အစားထိုးနိုင်ပါသည်။ 1 စကားလုံး
  • # - ဖြင့် အစားထိုးနိုင်ပါသည်။ 0 သို့မဟုတ် ထို့ထက်ပိုသော စကားလုံးများ

မက်ဆေ့ဂျ်စီးဆင်းမှု၏ ဂရပ်ဖစ်ကိုယ်စားပြုမှု-

RabbitMQ အပိုင်း 2။ နားလည်မှုဖလှယ်မှုများ

ဗားရှင်းမှစတင်သည်။ RabbitMQ 2.4.0 routing algorithm သည် topic exchange သည်အထိအလုပ်လုပ်ခဲ့သည်။ 145 အဆ ပိုမြန်တယ်။ ချဉ်းကပ်မှုကို အကောင်အထည်ဖော်ခြင်းဖြင့် ၎င်းတို့အောင်မြင်ခဲ့သည်။ ကြိုးစားအကောင်အထည်ဖော်ပါ။နမူနာပုံစံများကို သစ်ပင်ဖွဲ့စည်းပုံအဖြစ် ဖော်ပြခြင်းကို ဆိုလိုသည်။ ဥပမာ နမူနာပုံစံများ a.b.c, a.*.b.c, a.#.c и b.b.c အောက်ပါဖွဲ့စည်းပုံဖြင့် ကိုယ်စားပြုပါမည်။

RabbitMQ အပိုင်း 2။ နားလည်မှုဖလှယ်မှုများ

Pattern ကိုက်ညီမှုကို အမြစ်မှစတင်ကာ အပေါ်မှအောက်ခြေအထိ ရှာဖွေသည်။

အင်္ဂါရပ်များ:

  • ဒီ exchanger ကိုအသုံးပြုမှုဖြစ်လာနိုင်ပါတယ်။ ဖြစ်နိုင်ချေရှိသော အနာဂတ်အက်ပ်ဖွံ့ဖြိုးတိုးတက်မှုအတွက် ရွေးချယ်မှုကောင်းတစ်ခု, ဘာဖြစ်လို့လဲဆိုတော့ မက်ဆေ့ချ်ကို အလားတူထုတ်ဝေနိုင်ရန် တင်းပလိတ်များကို အမြဲတမ်းစိတ်ကြိုက်ပြင်ဆင်နိုင်သည်။ direct exchange သို့မဟုတ် fanout exchange
  • အသုံးပြုသောပုံစံများ * အများကြီးပိုမြန်တယ်သုံးတဲ့ ပုံစံတွေထက် #.
  • topic exchange ဖြေးဖြေး direct exchange

Fanout ချိန်း

Fanout exchange - မက်ဆေ့ဂျ်အားလုံးကို တန်းစီများအားလုံးသို့ ပို့ပေးပါသည်။ မက်ဆေ့ချ်တွင် လမ်းကြောင်းပြသော့ကို သတ်မှတ်ထားသော်လည်း၊

အင်္ဂါရပ်များ:

  • RabbitMQ လမ်းပြသော့များနှင့် ပုံစံများဖြင့် အလုပ်မလုပ်ပါ။ ၎င်းသည် စွမ်းဆောင်ရည်အပေါ် အပြုသဘောဆောင်သော သက်ရောက်မှုရှိသည်။ ဒါက အမြန်ဆုံးပါ။ exchange;
  • စားသုံးသူအားလုံးသည် မက်ဆေ့ဂျ်အားလုံးကို လုပ်ဆောင်နိုင်ရမည်။

မက်ဆေ့ဂျ်စီးဆင်းမှု၏ ဂရပ်ဖစ်ကိုယ်စားပြုမှု-

RabbitMQ အပိုင်း 2။ နားလည်မှုဖလှယ်မှုများ

ခေါင်းစီးများလဲလှယ်ခြင်း။

Headers exchange - အတွဲများ (သော့၊ တန်ဖိုး) ဂုဏ်သတ္တိများ နှိုင်းယှဉ်မှုအပေါ် အခြေခံ၍ သက်ဆိုင်ရာ တန်းစီများသို့ မက်ဆေ့ချ်များကို ညွှန်ကြားသည်။ headers binding နှင့်အလားတူမက်ဆေ့ခ်ျပိုင်ဆိုင်မှု။ headers ဒါဟာကိုယ်စားပြုတယ် Dictionary<ключ, значение>.

အဘိဓာန်တွင် အထူးသော့ထည့်လျှင် x-match အဓိပ္ပါယ်နဲ့ anyထို့နောက် အတွဲများ (သော့၊ တန်ဖိုး) တစ်စိတ်တစ်ပိုင်း ကိုက်ညီပါက မက်ဆေ့ချ်ကို ဖြတ်သွားပါမည်။ ဤအပြုအမူသည် အော်ပရေတာနှင့် ဆင်တူသည်။ or.

var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");

ပုံသေသော့ x-match တန်ဖိုးတစ်ခုပါရှိသည်။ all. ဆိုလိုသည်မှာ အတွဲများ (သော့၊ တန်ဖိုး) လုံးဝကိုက်ညီသောအခါတွင် မက်ဆေ့ဂျ်ကို လမ်းကြောင်းပြောင်းသွားခြင်းဖြစ်သည်။ ဤအပြုအမူသည် အော်ပရေတာနှင့် ဆင်တူသည်။ and.

မက်ဆေ့ဂျ်စီးဆင်းမှု၏ ဂရပ်ဖစ်ကိုယ်စားပြုမှု-

RabbitMQ အပိုင်း 2။ နားလည်မှုဖလှယ်မှုများ

အင်္ဂါရပ်များ:

  • အပိုပြောင်းလွယ်ပြင်လွယ်
  • အပိုထပ်ဆောင်းတွက်ချက်မှုအပေါ်။ ရည်ညွှန်းချက်၏ အတွဲများအားလုံး (သော့၊ တန်ဖိုး) headers မက်ဆေ့ချ်လမ်းကြောင်းတန်ဖိုးများကို မတွက်ချက်မီ သော့အမည်ဖြင့် စီရပါမည်။ အခြားလဲလှယ်မှုအမျိုးအစားများထက် နှေးကွေးသည်။.

တစ်သမတ်တည်း Hashing Exchange

ဤလဲလှယ်သူသည် ပလပ်အင် и built in မဟုတ်ပါ။ в RabbitMQ.

Consistent-hashing exchange (hash-consistent exchange) - မက်ဆေ့ချ်တစ်ခု၏ ဖြစ်နိုင်ချေရှိသော လက်ခံသူများဖြစ်ကြသည့် တန်းစီအများအပြားရှိသည့်အခါနှင့် ၎င်းတို့ကြားမှ လက်ကျန်ငွေကို သင်တင်ရန် လိုအပ်သည့်အခါတွင် အသုံးပြုသည်။ မက်ဆေ့ချ်သည် အလေးချိန်အလိုက် တန်းစီခြင်းနှင့် ဆက်စပ်နေသည် (အခြေအနေအလိုက် စာကြောင်းတန်ဖိုးတစ်ခု 0 - n).

တန်းစီခြင်း၏ ညီမျှသောအလေးချိန် - တန်းစီတိုင်း လက်ခံရရှိကြောင်း ညွှန်ပြသည်။ တူညီသောပမာဏနှင့် ပတ်သက် မက်ဆေ့ချ်များ (မက်ဆေ့ဂျ်တစ်ခုစီကို တန်းစီတစ်ခုတည်းတွင်သာ ထည့်သွင်းပါမည်)။ တူညီသော မက်ဆေ့ချ်များ ဖြန့်ဝေခြင်းအတွက် အာမခံချက် အပြည့်အဝ မရှိပါ။.

မက်ဆေ့ဂျ်စီးဆင်းမှု၏ ဂရပ်ဖစ်ကိုယ်စားပြုမှု-

RabbitMQ အပိုင်း 2။ နားလည်မှုဖလှယ်မှုများ

Hash လမ်းကြောင်းပြသော့ သို့မဟုတ် ပိုင်ဆိုင်မှုအပေါ် အခြေခံ၍ တွက်ချက်ထားသည်။ headers မက်ဆေ့ခ်ျများ လွှင့်တင်ထားသောစာများအားလုံးတွင် မတူညီသောလမ်းကြောင်းပြသော့များရှိလျှင် သို့မဟုတ် headersထို့နောက် အလေးချိန်အားဖြင့် ဖြန့်ဖြူးမှု ဖြစ်ပေါ်မည်ဖြစ်သည်။ သို့မဟုတ်ပါက၊ လမ်းပြသော့ကိုအသုံးပြုလိမ့်မည်၊ သို့မဟုတ် headers.

တူညီသောတန်းစီခြင်းကိုအသုံးပြုသော စားသုံးသူများစွာရှိသည့် ဖြေရှင်းချက်ထက် စားသုံးသူများ၏ ဖြတ်သန်းမှု တိုးလာရန် လိုအပ်သည့်အခါ ကူညီသင့်သည်။

ငွေလဲသူများ ပေါင်းစပ်ခြင်း (E2E)

ဖလှယ်သူအားလုံး၏ အပြုအမူသည် ဆက်သွယ်ရေးကို အသုံးပြု၍ ပေါင်းစပ်နိုင်သည်။ Exchange-to-Exchange (လဲလှယ်သူ၏ပေါင်းစပ်မှုသတ်မှတ်ချက်တွင်မပါဝင်ပါ။ AMQP. ၎င်းသည် ဘေးဘက်မှ ပရိုတိုကော တိုးချဲ့မှုတစ်ခုဖြစ်သည်။ RabbitMQ).

မက်ဆေ့ဂျ်စီးဆင်းမှု၏ ဂရပ်ဖစ်ကိုယ်စားပြုမှု-

RabbitMQ အပိုင်း 2။ နားလည်မှုဖလှယ်မှုများ

မသုံးဘူး E2E လက်ရှိနှင့် ကြီးထွားလာနေသော လိုအပ်ချက်များနှင့် ကိုက်ညီသည့် မှန်ကန်သော အရွယ်အစားရှိ ဖွဲ့စည်းမှုပုံစံကို ကျွန်ုပ်တို့ ရှာဖွေနိုင်သည်။

Exchange တစ်ခုဖန်တီးပါ။

ဖလှယ်မှုအား synchronous ဖြင့် ဖန်တီးထားသည်။ RPC ဆာဗာကို တောင်းဆိုပါ။ တောင်းဆိုမှုနည်းလမ်းကို အသုံးပြု Exchange.Declareကန့်သတ်ချက်များဖြင့် ခေါ်သည်-

  • လဲလှယ်သူအမည်
  • exchanger အမျိုးအစား
  • အခြားရွေးချယ်စရာများ

ဖန်တီးမှုဥပမာ exchange အားဖြင့် RabbitMQ.Client:

//...
channel.ExchangeDeclare(
    exchange: "my_exchange",
    type: "direct",
    durable: "false",
    autoDelete: "false",
    arguments: null
);
//...

  • exchange - ကျွန်ုပ်တို့ဖန်တီးလိုသော ငွေလဲလှယ်သူ၏အမည်။ အမည်သည် ထူးခြားရမည်။
  • type - exchanger အမျိုးအစား
  • durable - တပ်ဆင်လျှင် trueထိုအခါ exchange အမြဲတမ်းဖြစ်လိမ့်မည်။ ၎င်းကို ဒစ်ခ်ပေါ်တွင် သိမ်းဆည်းထားမည်ဖြစ်ပြီး ဆာဗာ/ပွဲစား ပြန်လည်စတင်ခြင်းတွင် အသက်ရှင်ရပ်တည်နိုင်မည်ဖြစ်သည်။ ဖိုးလျှင် falseထိုအခါ exchange ယာယီဖြစ်ပြီး ဆာဗာ/ပွဲစားကို ပြန်လည်စတင်သည့်အခါ ဖယ်ရှားပါမည်။
  • autoDelete - အလိုအလျောက်ဖျက်ခြင်း။ Exchange ဆက်စပ်တန်းစီများအားလုံးကို ဖျက်လိုက်သောအခါ ဖျက်လိုက်ပါမည်။
  • arguments ရွေးချယ်နိုင်သော အကြောင်းပြချက်များဖြစ်သည်။ အများစုကတော့ အငြင်းအခုံတွေကနေတဆင့် သတ်မှတ်ကြပါတယ်။ alternative exchange (အစားထိုးလဲလှယ်သူ) မက်ဆေ့ချ်သည် မူရင်းလမ်းကြောင်းကို ဖြတ်သန်း၍မရပါက၊ ၎င်းကို အခြားလမ်းကြောင်းတစ်လျှောက် ဖြတ်သန်းရန်အတွက် အစားထိုးလဲလှယ်မှုတစ်ခုသို့ ပေးပို့နိုင်ပါသည်။

RabbitMQ အပိုင်း 2။ နားလည်မှုဖလှယ်မှုများ

ဖန်တီးမှုရှိရင် exchange ဖြစ်နိုင်အောင်ထို့နောက် server သည် client ကို synchronous ပေးပို့လိမ့်မည်။ RPC အဖွေ Exchange.DeclareOk. ဖန်တီးမှုရှိရင် မဖြစ်နိုင်သော (တောင်းဆိုမှုကို ငြင်းဆိုခဲ့ပါသည်။ Exchange.Declare), အဆိုပါ ချန်နယ်ကို ပိတ်ပါမည်။ asynchronous command ကို အသုံးပြု၍ ဆာဗာ Channel.Close နှင့် client သည်ခြွင်းချက်တစ်ခုရလိမ့်မည်။ OperationInterruptedExceptionအမှားကုဒ်နှင့် ၎င်း၏ဖော်ပြချက်ပါ၀င်မည်ဖြစ်သည်။

ပို့စ်မတင်မီ ငွေလဲလှယ်သူကို ဖန်တီးရပါမည်။ နဂိုရှိပြီးသား ဖလှယ်သူထံ မက်ဆေ့ချ်တစ်ခု ထုတ်ဝေပါက၊ RabbitMQ တိတ်တိတ်လေး ဖယ်လိုက်ပါ။

Exchange GUI ဖန်တီးပါ။

စီမံခန့်ခွဲရေးအဖွဲ့သို့ သွားပါ။ RabbitMQ အသုံးပြုသူအောက်မှာ guest (အသုံးပြုသူအမည်- guest နှင့် စကားဝှက်- guest) အသုံးပြုသူကို သတိပြုပါ။ guest localhost မှသာ ချိတ်ဆက်နိုင်သည်။ ကဲ တက်ဘ်ကို သွားကြရအောင် Exchanges ပေါ်တွင်ကလစ်နှိပ်ပါ။ Add a new exchange. ဂုဏ်သတ္တိများကိုဖြည့်ပါ

RabbitMQ အပိုင်း 2။ နားလည်မှုဖလှယ်မှုများ

ဂုဏ်သတ္တိအများစုကို အထက်တွင်ဖော်ပြခဲ့ပြီးဖြစ်သည်။ ဤနေရာတွင် ကျွန်ုပ်တို့သတ်မှတ်ထားလျှင် သတိပြုပါ။ Internalထို့နောက် လဲလှယ်မှုအတွက်သာ အသုံးပြုနိုင်သည်။ E2E. Producer ထိုသို့သောဖလှယ်မှုသို့ မက်ဆေ့ချ်များ ပေးပို့နိုင်မည်မဟုတ်ပါ။

ကောက်ချက်

စနစ်တစ်ခုတည်ဆောက်သောအခါ topology ကိုဖော်ပြရန်အဆင်ပြေသည်။ လမ်းကြောင်း ဂရပ်ကို အသုံးပြု. သို့သော် ဂရပ်ဖ်တစ်ခု မတည်ဆောက်မီတွင် ယာဉ်ကြောအသွားအလာများသော လမ်းကြောင်းများကို မီးမောင်းထိုးပြသင့်သောကြောင့် ဖြစ်သည်။ သူတို့လိုအပ်တယ်။ မြင့်မားသောဖြတ်သန်းမှု (စွမ်းဆောင်ရည်)။ ထို့နောက် သင်သည် ယာဉ်အသွားအလာကို အမျိုးအစားခွဲနိုင်သည်။ ပြီးမှ စတင်တည်ဆောက်ပါ။

တည်ဆောက်ထားသော ဂရပ်တွင် ရှိနေလျှင် ကန့်သတ်သတ်မှတ်ထားသည်။ routing သော့များ, သို့ဖြစ်လျှင်, အများအပြားဆီသို့ရှာဖွေရကျိုးနပ်သည်။ fanout exchangerouting key နှင့် ဆက်စပ်နေသော 1:1 ဖြစ်သည် ။ အဲဒါကို သတိရပါ။ fanout exchange အမြန်ဆုံး။

လမ်းကြောင်း အရေအတွက် များလာလျှင် အဆုံးမရှိဖြစ်တတ်သည်။, အာရုံစိုက်ဖို့ထိုက်တန်ပါတယ်။ topic exchange သို့မဟုတ် template မလိုအပ်ပါက၊ သင်ရွေးချယ်နိုင်သည်။ direct exchnge, ဘာဖြစ်လို့လဲဆိုတော့ သူက ပိုမြန်တယ်။ topic exchange.

အမျိုးမျိုးပေါင်းစပ် exchange မှန်ကန်သောတစ်ခုကို ရှာဖွေရန် ကူညီသင့်သည်။ အရွယ်တင်နိုင်သော ဖွဲ့စည်းမှုပုံစံလက်ရှိနှင့် တိုးတက်နေသော စနစ်လိုအပ်ချက်များနှင့် ကိုက်ညီသည့်၊

ဂဏန်း exchange လမ်းကြောင်းအရေအတွက်နှင့် နှိုင်းယှဉ်ပါက တန်းစီမှု အနည်းငယ်သာ ရှိသင့်သည်။

နောက်ဆောင်းပါးတွင်၊ Quues နှင့် Bindings များအကြောင်း ပိုမိုနားလည်လာပါမည်။

ကိုးကား

source: www.habr.com

မှတ်ချက် Add