റാബിറ്റ്എംക്യു. ഭാഗം 2. എക്സ്ചേഞ്ചുകൾ മനസ്സിലാക്കുന്നു
Exchange - എക്സ്ചേഞ്ചർ അല്ലെങ്കിൽ എക്സ്ചേഞ്ച് പോയിന്റ്. അതിലേക്ക് സന്ദേശങ്ങൾ അയയ്ക്കുന്നു. Exchangeസന്ദേശം വിതരണം ചെയ്യുന്നു ഒന്നോ അതിലധികമോ ക്യൂവിൽ. അവൻ സന്ദേശങ്ങൾ ഒരു ക്യൂവിലേക്ക് നയിക്കുന്നു സൃഷ്ടിച്ച ലിങ്കുകളെ അടിസ്ഥാനമാക്കി (bindings) അതിനും ക്യൂവിനുമിടയിൽ.
Exchange ഇല്ല യാവ്ലിയേറ്റ്സ്യ എർലാംഗ് പ്രക്രിയ. സ്കെയിലബിളിറ്റിയുടെ കാരണങ്ങളാൽ exchange ബിൽറ്റ്-ഇൻ ഡാറ്റാബേസിലെ ഒരു സ്ട്രിംഗ് (റൂട്ടിംഗ് ലോജിക് സ്ഥിതി ചെയ്യുന്ന കോഡുള്ള മൊഡ്യൂളിലേക്കുള്ള ലിങ്ക്) ആണ് ഓർമ്മക്കുറവ്. 1 ആയിരം എക്സ്ചേഞ്ചറുകൾ 1MB മെമ്മറി മാത്രമേ ഉപയോഗിക്കൂ.
റാബിറ്റ്എംക്യു. ഭാഗം 3. ക്യൂകളും ബൈൻഡിംഗുകളും മനസ്സിലാക്കൽ
റാബിറ്റ്എംക്യു. ഭാഗം 4. സന്ദേശങ്ങളും ഫ്രെയിമുകളും എന്താണ് കൈകാര്യം ചെയ്യുന്നത്
റാബിറ്റ്എംക്യു. ഭാഗം 5: സന്ദേശ പ്രകടനം പ്രസിദ്ധീകരിക്കലും ഉപഭോഗവും
റാബിറ്റ്എംക്യു. ഭാഗം 6. ഫെഡറേഷന്റെയും ഷോവൽ മൊഡ്യൂളുകളുടെയും അവലോകനം
റാബിറ്റ്എംക്യു. ഭാഗം 7. കണക്ഷനെയും ചാനലിനെയും കുറിച്ചുള്ള വിശദാംശങ്ങൾ
റാബിറ്റ്എംക്യു. ഭാഗം 8. .NET-ൽ RabbitMQ
റാബിറ്റ്എംക്യു. ഭാഗം 9. നിരീക്ഷണം
നേരിട്ടുള്ള എക്സ്ചേഞ്ച്
Direct exchange - ആവശ്യമുള്ളപ്പോൾ ഉപയോഗിക്കുന്നു നിർദ്ദിഷ്ട ക്യൂകളിലേക്ക് ഒരു സന്ദേശം എത്തിക്കുക. സന്ദേശം എക്സ്ചേഞ്ചറിന് ഒരു നിർദ്ദിഷ്ട സഹിതം പ്രസിദ്ധീകരിക്കുന്നു റൂട്ടിംഗ് കീ സമാനമായ ഒരു റൂട്ടിംഗ് കീ ഉപയോഗിച്ച് ഈ എക്സ്ചേഞ്ചറുമായി ബന്ധപ്പെട്ടിരിക്കുന്ന എല്ലാ ക്യൂകളിലും പ്രവേശിക്കുന്നു. റൂട്ടിംഗ് കീ ഒരു സ്ട്രിംഗ് ആണ്. ഉപയോഗിച്ചാണ് പൊരുത്തപ്പെടുത്തൽ നടത്തുന്നത് സമത്വത്തിനായുള്ള തന്ത്രങ്ങൾ പരിശോധിക്കുന്നു.
സന്ദേശ പ്രവാഹത്തിന്റെ ഗ്രാഫിക്കൽ പ്രാതിനിധ്യം:
В rabbitmq ഒരു ആശയം ഉണ്ട് ഡിഫോൾട്ട് എക്സ്ചേഞ്ചർ. ഈ direct exchange പേരില്ല. ഡിഫോൾട്ട് എക്സ്ചേഞ്ചറാണ് ഉപയോഗിക്കുന്നതെങ്കിൽ, സന്ദേശം തുല്യമായ പേരുള്ള ഒരു ക്യൂവിലേക്ക് നയിക്കും സന്ദേശ റൂട്ടിംഗ് കീ.
വിഷയം കൈമാറ്റം
Topic exchange - സമാനമായ direct exchange റൂട്ടിംഗ് കീ താരതമ്യം ചെയ്തുകൊണ്ട് തിരഞ്ഞെടുത്ത റൂട്ടിംഗ് പ്രാപ്തമാക്കുന്നു. പക്ഷേ, ഈ സാഹചര്യത്തിൽ, താക്കോൽ നൽകിയിരിക്കുന്നു ടെംപ്ലേറ്റ് പ്രകാരം. ഒരു ടെംപ്ലേറ്റ് സൃഷ്ടിക്കുമ്പോൾ, ഉപയോഗിക്കുക 0 അല്ലെങ്കിൽ കൂടുതൽ വാക്കുകൾ (അക്ഷരങ്ങൾ AZ и az അക്കങ്ങളും 0-9), ഒരു ഡോട്ട് കൊണ്ട് വേർതിരിച്ചിരിക്കുന്നു, അതുപോലെ ചിഹ്നങ്ങളും * и #.
* - കൃത്യമായി മാറ്റിസ്ഥാപിക്കാം 1 വചനം
# - ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കാം 0 അല്ലെങ്കിൽ കൂടുതൽ വാക്കുകൾ
സന്ദേശ പ്രവാഹത്തിന്റെ ഗ്രാഫിക്കൽ പ്രാതിനിധ്യം:
പതിപ്പിൽ നിന്ന് ആരംഭിക്കുന്നു RabbitMQ 2.4.0 റൂട്ടിംഗ് അൽഗോരിതം topic exchange വരെ പ്രവർത്തിക്കാൻ തുടങ്ങി 145 തവണ വേഗത്തിൽ. സമീപനം നടപ്പിലാക്കിയാണ് അവർ ഇത് നേടിയത് നടപ്പിലാക്കാൻ ശ്രമിക്കുക, ഇത് ഒരു ട്രീ ഘടനയായി ടെംപ്ലേറ്റുകളുടെ പ്രതിനിധാനം സൂചിപ്പിക്കുന്നു. ഉദാഹരണത്തിന് ടെംപ്ലേറ്റുകൾ a.b.c, a.*.b.c, a.#.c и b.b.c ഇനിപ്പറയുന്ന ഘടനയാൽ പ്രതിനിധീകരിക്കപ്പെടും:
പാറ്റേൺ പൊരുത്തപ്പെടുത്തൽ റൂട്ടിൽ നിന്ന് ആരംഭിച്ച് മുകളിൽ നിന്ന് താഴേക്ക് തിരയുന്നു.
സവിശേഷതകൾ:
ഈ എക്സ്ചേഞ്ചറിന്റെ ഉപയോഗം ആകാം ഭാവിയിൽ സാധ്യമായ ആപ്പ് വികസനത്തിന് ഒരു നല്ല ചോയ്സ്, കാരണം ടെംപ്ലേറ്റുകൾ എല്ലായ്പ്പോഴും ഇഷ്ടാനുസൃതമാക്കാൻ കഴിയുന്നതിനാൽ സന്ദേശം സമാനമായി പ്രസിദ്ധീകരിക്കും direct exchange അഥവാ fanout exchange
ഉപയോഗിക്കുന്ന ടെംപ്ലേറ്റുകൾ *വളരെ വേഗത്തിൽഉപയോഗിക്കുന്ന ടെംപ്ലേറ്റുകളേക്കാൾ #.
topic exchange പതുക്കെ പോകൂ direct exchange
ഫാനൗട്ട് എക്സ്ചേഞ്ച്
Fanout exchange - എല്ലാ സന്ദേശങ്ങളും എല്ലാ ക്യൂകളിലേക്കും കൈമാറുന്നു സന്ദേശത്തിൽ ഒരു റൂട്ടിംഗ് കീ വ്യക്തമാക്കിയിട്ടുണ്ടെങ്കിലും.
സവിശേഷതകൾ:
RabbitMQറൂട്ടിംഗ് കീകളും ടെംപ്ലേറ്റുകളും ഉപയോഗിച്ച് പ്രവർത്തിക്കില്ല പ്രകടനത്തിൽ നല്ല സ്വാധീനം ചെലുത്തുന്നു. ഇതാണ് ഏറ്റവും വേഗതയേറിയത് exchange;
എല്ലാ ഉപഭോക്താക്കൾക്കും എല്ലാ സന്ദേശങ്ങളും പ്രോസസ്സ് ചെയ്യാൻ കഴിയണം;
സന്ദേശ പ്രവാഹത്തിന്റെ ഗ്രാഫിക്കൽ പ്രാതിനിധ്യം:
ഹെഡ്ഡേഴ്സ് എക്സ്ചേഞ്ച്
Headers exchange - (കീ, മൂല്യം) പ്രോപ്പർട്ടികളുടെ ജോഡികളുടെ താരതമ്യത്തെ അടിസ്ഥാനമാക്കി ബന്ധപ്പെട്ട ക്യൂകളിലേക്ക് സന്ദേശങ്ങൾ നയിക്കുന്നു headers ബൈൻഡിംഗും സമാനമായ സന്ദേശ സ്വത്തും. headers ഒരു മണി Dictionary<ключ, значение>.
നിങ്ങൾ നിഘണ്ടുവിൽ ഒരു പ്രത്യേക കീ ചേർക്കുകയാണെങ്കിൽ x-match അർത്ഥം കൊണ്ട് any, ജോഡികൾ (കീ, മൂല്യം) ഭാഗികമായി പൊരുത്തപ്പെടുന്നെങ്കിൽ സന്ദേശം റൂട്ട് ചെയ്യപ്പെടും. ഈ പെരുമാറ്റം ഓപ്പറേറ്ററുമായി സാമ്യമുള്ളതാണ് or.
var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");
ഡിഫോൾട്ട് കീ x-match ഒരു മൂല്യം അടങ്ങിയിരിക്കുന്നു all. ജോഡികൾ (കീ, മൂല്യം) പൂർണ്ണമായും പൊരുത്തപ്പെടുമ്പോൾ സന്ദേശം റൂട്ട് ചെയ്യപ്പെടുന്നു എന്നാണ് ഇതിനർത്ഥം. ഈ പെരുമാറ്റം ഓപ്പറേറ്ററുമായി സാമ്യമുള്ളതാണ് and.
സന്ദേശ പ്രവാഹത്തിന്റെ ഗ്രാഫിക്കൽ പ്രാതിനിധ്യം:
സവിശേഷതകൾ:
അധിക വഴക്കം
അധിക കമ്പ്യൂട്ടേഷണൽ ഓവർഹെഡ്. ആട്രിബ്യൂട്ടിന്റെ എല്ലാ ജോഡികളും (കീ, മൂല്യം). headers സന്ദേശ റൂട്ടിംഗ് മൂല്യങ്ങൾ കണക്കാക്കുന്നതിന് മുമ്പ് കീ നാമം ഉപയോഗിച്ച് അടുക്കിയിരിക്കണം. മറ്റ് തരത്തിലുള്ള വിനിമയത്തേക്കാൾ വേഗത കുറവാണ്.
സ്ഥിരമായ ഹാഷിംഗ് എക്സ്ചേഞ്ച്
ഈ എക്സ്ചേഞ്ചർ ആണ് പ്ലഗിൻ и നിർമ്മിച്ചിട്ടില്ല в RabbitMQ.
Consistent-hashing exchange (ഹാഷ്-കോൺസിസ്റ്റന്റ് എക്സ്ചേഞ്ച്) - ഒരു സന്ദേശത്തിന്റെ സ്വീകർത്താക്കളുടെ സാധ്യതയുള്ള ഒന്നിലധികം ക്യൂകൾ ഉള്ളപ്പോഴും അവയ്ക്കിടയിൽ ബാലൻസ് ലോഡ് ചെയ്യേണ്ട സമയത്തും ഉപയോഗിക്കുന്നു. സന്ദേശം ഭാരം അനുസരിച്ച് ക്യൂവുമായി ബന്ധപ്പെട്ടിരിക്കുന്നു (ഇതിൽ നിന്നുള്ള ഒരു സോപാധിക സ്ട്രിംഗ് മൂല്യം 0 - n).
ക്യൂവിന്റെ തുല്യമായ ഭാരം - ഓരോ ക്യൂവിനും ലഭിക്കുമെന്ന് സൂചിപ്പിക്കുന്നു ഏകദേശം ഒരേ തുക സന്ദേശങ്ങൾ (ഓരോ സന്ദേശവും ഒരു ക്യൂവിൽ മാത്രം ഇടും). സന്ദേശങ്ങളുടെ ഏകീകൃത വിതരണത്തിന് പൂർണ്ണമായ ഗ്യാരണ്ടി ഇല്ല.
സന്ദേശ പ്രവാഹത്തിന്റെ ഗ്രാഫിക്കൽ പ്രാതിനിധ്യം:
Hash റൂട്ടിംഗ് കീ അല്ലെങ്കിൽ പ്രോപ്പർട്ടി അടിസ്ഥാനമാക്കി കണക്കാക്കുന്നു headers സന്ദേശങ്ങൾ. പ്രസിദ്ധീകരിച്ച എല്ലാ സന്ദേശങ്ങൾക്കും വ്യത്യസ്ത റൂട്ടിംഗ് കീകൾ ഉണ്ടെങ്കിൽ, അല്ലെങ്കിൽ headers, അപ്പോൾ വിതരണം ഭാരം കൊണ്ട് സംഭവിക്കും. അല്ലെങ്കിൽ, റൂട്ടിംഗ് കീ ഉപയോഗിക്കും, അല്ലെങ്കിൽ headers.
ഒരേ ക്യൂ ഉപയോഗിക്കുന്ന ഒന്നിലധികം ഉപഭോക്താക്കൾ ഉള്ള പരിഹാരത്തേക്കാൾ ഉപഭോക്തൃ ത്രൂപുട്ട് വളരേണ്ടിവരുമ്പോൾ സഹായിക്കണം.
എക്സ്ചേഞ്ചറുകളുടെ സംയോജനം (E2E)
എല്ലാ എക്സ്ചേഞ്ചറുകളുടെയും പെരുമാറ്റം ആശയവിനിമയം ഉപയോഗിച്ച് സംയോജിപ്പിക്കാം എക്സ്ചേഞ്ച്-ടു-എക്സ്ചേഞ്ച് (എക്സ്ചേഞ്ചറുകളുടെ സംയോജനം സ്പെസിഫിക്കേഷനിൽ ഉൾപ്പെടുത്തിയിട്ടില്ല AMQP. ഇത് വശത്ത് നിന്നുള്ള ഒരു പ്രോട്ടോക്കോൾ വിപുലീകരണമാണ് RabbitMQ).
സന്ദേശ പ്രവാഹത്തിന്റെ ഗ്രാഫിക്കൽ പ്രാതിനിധ്യം:
ചെലവിൽ E2E നിലവിലുള്ളതും വളരുന്നതുമായ ആവശ്യകതകൾ നിറവേറ്റുന്ന ശരിയായ സ്കെയിലബിൾ കോൺഫിഗറേഷൻ നമുക്ക് കണ്ടെത്താനാകും.
ഒരു എക്സ്ചേഞ്ച് സൃഷ്ടിക്കുക
ഒരു സിൻക്രണസ് ഉപയോഗിച്ചാണ് എക്സ്ചേഞ്ചർ സൃഷ്ടിച്ചിരിക്കുന്നത് RPC സെർവറിനോട് അഭ്യർത്ഥിക്കുക. രീതി ഉപയോഗിച്ചാണ് അഭ്യർത്ഥന നടത്തുന്നത് Exchange.Declare, പരാമീറ്ററുകൾ ഉപയോഗിച്ച് വിളിക്കുന്നു:
exchange - ഞങ്ങൾ സൃഷ്ടിക്കാൻ ആഗ്രഹിക്കുന്ന എക്സ്ചേഞ്ചറിന്റെ പേര്. പേര് അദ്വിതീയമായിരിക്കണം
type - എക്സ്ചേഞ്ചറിന്റെ തരം
durable - ഇൻസ്റ്റാൾ ചെയ്താൽ true, പിന്നെ exchange സ്ഥിരമായിരിക്കും. ഇത് ഡിസ്കിൽ സൂക്ഷിക്കുകയും സെർവർ/ബ്രോക്കർ പുനരാരംഭിക്കുമ്പോൾ അതിജീവിക്കാൻ കഴിയുകയും ചെയ്യും. മൂല്യമാണെങ്കിൽ false, പിന്നെ exchange താൽക്കാലികമാണ്, സെർവർ/ബ്രോക്കർ പുനരാരംഭിക്കുമ്പോൾ നീക്കം ചെയ്യപ്പെടും
autoDelete - യാന്ത്രിക ഇല്ലാതാക്കൽ. Exchange ബന്ധപ്പെട്ട എല്ലാ ക്യൂകളും ഇല്ലാതാക്കുമ്പോൾ ഇല്ലാതാക്കപ്പെടും
arguments ഓപ്ഷണൽ ആർഗ്യുമെന്റുകളാണ്. മിക്കപ്പോഴും, സെറ്റ് ആർഗ്യുമെന്റുകളിലൂടെ alternative exchange (ബദൽ എക്സ്ചേഞ്ചർ). ഒരു സന്ദേശത്തിന് യഥാർത്ഥ റൂട്ടിലൂടെ പോകാൻ കഴിയുന്നില്ലെങ്കിൽ, അത് മറ്റൊരു വഴിയിലൂടെ റൂട്ട് ചെയ്യുന്നതിനായി ഒരു ഇതര എക്സ്ചേഞ്ചിലേക്ക് അയയ്ക്കാം.
സൃഷ്ടി ആണെങ്കിൽ exchangeഒരുപക്ഷേ, അപ്പോൾ സെർവർ ക്ലയന്റിന് ഒരു സിൻക്രണസ് അയയ്ക്കും RPC ഉത്തരം Exchange.DeclareOk. സൃഷ്ടി ആണെങ്കിൽ അസാധ്യമാണ് (അഭ്യർത്ഥനയിൽ ഒരു വിസമ്മതം ഉണ്ടായിരുന്നു Exchange.Declare), പിന്നെ ചാനൽ അടയ്ക്കും ഒരു അസിൻക്രണസ് കമാൻഡ് ഉപയോഗിക്കുന്ന സെർവർ Channel.Close കൂടാതെ ക്ലയന്റിന് ഒരു ഒഴിവാക്കൽ ലഭിക്കും ഓപ്പറേഷൻഇന്ററപ്റ്റഡ് എക്സെപ്ഷൻ, അതിൽ പിശക് കോഡും അതിന്റെ വിവരണവും അടങ്ങിയിരിക്കും.
പോസ്റ്റുചെയ്യുന്നതിന് മുമ്പ് ഒരു എക്സ്ചേഞ്ചർ സൃഷ്ടിക്കണം. നിലവിലില്ലാത്ത ചില എക്സ്ചേഞ്ചറിന് നിങ്ങൾ ഒരു സന്ദേശം പ്രസിദ്ധീകരിക്കുകയാണെങ്കിൽ - RabbitMQ നിശബ്ദമായി അത് നീക്കം ചെയ്യുക.
ഒരു എക്സ്ചേഞ്ച് GUI സൃഷ്ടിക്കുക
അഡ്മിൻ പാനലിലേക്ക് പോകുക RabbitMQ ഉപയോക്താവിന് കീഴിൽ guest (ഉപയോക്തൃനാമം: guest പാസ്വേഡും: guest). ഉപയോക്താവ് എന്നത് ദയവായി ശ്രദ്ധിക്കുക guest ലോക്കൽ ഹോസ്റ്റിൽ നിന്ന് മാത്രമേ കണക്റ്റുചെയ്യാൻ കഴിയൂ. ഇനി ടാബിലേക്ക് പോകാം Exchanges ക്ലിക്ക് ചെയ്യുക Add a new exchange. പ്രോപ്പർട്ടികൾ പൂരിപ്പിക്കുക:
മിക്ക സ്വത്തുക്കളും മുകളിൽ വിവരിച്ചിരിക്കുന്നു. സെറ്റ് ചെയ്താൽ ഇവിടെ നമ്മൾ ശ്രദ്ധിക്കുന്നു Internal, അപ്പോൾ മാത്രമേ എക്സ്ചേഞ്ച് ഉപയോഗിക്കാൻ കഴിയൂ E2E. Producer അത്തരം ഒരു എക്സ്ചേഞ്ചിലേക്ക് സന്ദേശങ്ങൾ അയയ്ക്കാൻ കഴിയില്ല.
തീരുമാനം
ഒരു സിസ്റ്റം വികസിപ്പിക്കുമ്പോൾ, ടോപ്പോളജി വിവരിക്കുന്നത് സൗകര്യപ്രദമാണ് റൂട്ടിംഗ് ഒരു ഗ്രാഫ് ഉപയോഗിക്കുന്നു. എന്നാൽ നിങ്ങൾ ഒരു ഗ്രാഫ് നിർമ്മിക്കാൻ തുടങ്ങുന്നതിനുമുമ്പ്, ഉയർന്ന ട്രാഫിക് ഉള്ള പാതകൾ ഹൈലൈറ്റ് ചെയ്യുന്നത് മൂല്യവത്താണ്, കാരണം. അവർ ആവശ്യപ്പെടുന്നു ഉയർന്ന ത്രൂപുട്ട് (പ്രകടനം). അടുത്തതായി, നിങ്ങൾക്ക് ട്രാഫിക് തരം തിരിക്കാം. എന്നിട്ട് പണി തുടങ്ങും.
നിർമ്മിച്ച ഗ്രാഫിൽ നിലവിലുണ്ടെങ്കിൽ പരിമിതമായ സെറ്റ് റൂട്ടിംഗ് കീകൾ, അപ്പോൾ, പലതിലേക്ക് നോക്കുന്നത് മൂല്യവത്താണ് fanout exchange, റൂട്ടിംഗ് കീയുമായി ബന്ധപ്പെട്ട 1:1 ആണ്. എന്ന് ഓർക്കണം fanout exchange ഏറ്റവും വേഗമേറിയ.
റൂട്ടുകളുടെ എണ്ണം എങ്കിൽ അനന്തതയിലേക്ക് ചായുന്നു, അത് ശ്രദ്ധിക്കേണ്ടതാണ് topic exchange അല്ലെങ്കിൽ, ടെംപ്ലേറ്റ് ആവശ്യമില്ലെങ്കിൽ, നിങ്ങൾക്ക് തിരഞ്ഞെടുക്കാം direct exchnge, കാരണം അവൻ വേഗതയുള്ളവനാണ് topic exchange.
വിവിധ കോമ്പിനേഷനുകൾ exchange ശരിയായത് കണ്ടെത്താൻ നിങ്ങളെ സഹായിക്കണം. അളക്കാവുന്ന കോൺഫിഗറേഷൻ, നിലവിലുള്ളതും വളരുന്നതുമായ സിസ്റ്റം ആവശ്യകതകൾ നിറവേറ്റുന്നു.
എണ്ണം exchange റൂട്ടുകളുടെ എണ്ണവുമായി താരതമ്യപ്പെടുത്തുമ്പോൾ ക്യൂകൾ കുറവായിരിക്കണം.
അടുത്ത ലേഖനത്തിൽ, ക്യൂകളെയും ബൈൻഡിംഗുകളെയും കുറിച്ച് നമ്മൾ കൂടുതൽ മനസ്സിലാക്കാൻ തുടങ്ങും.