முயல்MQ. பகுதி 2. பரிமாற்றங்களைப் புரிந்துகொள்வது

Exchange - பரிமாற்றி அல்லது பரிமாற்ற புள்ளி. அதற்கு செய்திகள் அனுப்பப்படுகின்றன. Exchange செய்தியை விநியோகிக்கிறார் ஒன்று அல்லது அதற்கு மேற்பட்ட வரிசைகளில். அவர் செய்திகளை வரிசைக்கு அனுப்புகிறது உருவாக்கப்பட்ட இணைப்புகளின் அடிப்படையில் (bindings) அதற்கும் வரிசைக்கும் இடையில்.

Exchange இல்லை எர்லாங் செயல்முறை. அளவிடுதல் காரணங்களுக்காக exchange உட்பொதிக்கப்பட்ட தரவுத்தளத்தில் ஒரு சரம் (ரூட்டிங் லாஜிக் இருக்கும் குறியீட்டுடன் கூடிய தொகுதிக்கான இணைப்பு) ஞாபக மறதி. 1 ஆயிரம் பரிமாற்றிகள் 1MB நினைவகத்தை மட்டுமே பயன்படுத்துகின்றன.

உள்ளடக்க அட்டவணை

நேரடி பரிமாற்றம்

Direct exchange - தேவைப்படும் போது பயன்படுத்தப்படும் குறிப்பிட்ட வரிசைகளுக்கு ஒரு செய்தியை வழங்கவும். ஒரு குறிப்பிட்ட செய்தியுடன் பரிமாற்றிக்கு செய்தி வெளியிடப்படுகிறது ரூட்டிங் விசை மேலும் இந்த எக்ஸ்சேஞ்சருடன் தொடர்புடைய அனைத்து வரிசைகளிலும் ஒரே மாதிரியான ரூட்டிங் விசையைப் பெறுகிறது. ரூட்டிங் விசை ஒரு சரம். பொருத்துதல் பயன்படுத்தி செய்யப்படுகிறது சமத்துவத்திற்கான சரங்களை சரிபார்க்கிறது.

செய்தி ஓட்டத்தின் வரைகலை பிரதிநிதித்துவம்:

முயல்MQ. பகுதி 2. பரிமாற்றங்களைப் புரிந்துகொள்வது

В rabbitmq ஒரு கருத்து உள்ளது இயல்புநிலை பரிமாற்றி. அது direct exchange பெயர் இல்லை. இயல்புநிலை பரிமாற்றி பயன்படுத்தப்பட்டால், செய்தி சமமான பெயருடன் ஒரு வரிசையில் அனுப்பப்படும் செய்தி ரூட்டிங் விசை.

தலைப்பு பரிமாற்றம்

Topic exchange - ஒத்த direct exchange ரூட்டிங் விசையை ஒப்பிடுவதன் மூலம் தேர்ந்தெடுக்கப்பட்ட ரூட்டிங் செயல்படுத்துகிறது. ஆனால், இந்த வழக்கில், சாவி கொடுக்கப்பட்டுள்ளது டெம்ப்ளேட் மூலம். ஒரு டெம்ப்ளேட்டை உருவாக்கும் போது, ​​பயன்படுத்தவும் 0 அல்லது அதிக வார்த்தைகள் (கடிதங்கள் AZ и az மற்றும் எண்கள் 0-9), ஒரு புள்ளியால் பிரிக்கப்பட்டது, அத்துடன் சின்னங்கள் * и #.

  • * - சரியாக மாற்ற முடியும் 1 சொல்
  • # - மூலம் மாற்ற முடியும் 0 அல்லது அதிக வார்த்தைகள்

செய்தி ஓட்டத்தின் வரைகலை பிரதிநிதித்துவம்:

முயல்MQ. பகுதி 2. பரிமாற்றங்களைப் புரிந்துகொள்வது

பதிப்பில் இருந்து தொடங்குகிறது RabbitMQ 2.4.0 க்கான ரூட்டிங் அல்காரிதம் topic exchange வரை வேலை செய்ய ஆரம்பித்தார் 145 மடங்கு வேகமாக. அணுகுமுறையை செயல்படுத்துவதன் மூலம் அவர்கள் இதை அடைந்தனர் செயல்படுத்த முயற்சிக்கவும், இது ஒரு மர அமைப்பாக டெம்ப்ளேட்களின் பிரதிநிதித்துவத்தை குறிக்கிறது. உதாரணமாக வார்ப்புருக்கள் a.b.c, a.*.b.c, a.#.c и b.b.c பின்வரும் கட்டமைப்பால் குறிப்பிடப்படும்:

முயல்MQ. பகுதி 2. பரிமாற்றங்களைப் புரிந்துகொள்வது

பேட்டர்ன் மேட்சிங் ரூட்டிலிருந்து தொடங்கி மேலிருந்து கீழாகத் தேடப்படுகிறது.

அம்சங்கள்:

  • இந்த பரிமாற்றியின் பயன்பாடு ஆகலாம் எதிர்கால பயன்பாட்டு மேம்பாட்டிற்கான ஒரு நல்ல தேர்வு, ஏனெனில் வார்ப்புருக்கள் எப்போதுமே தனிப்பயனாக்கப்படலாம், இதனால் செய்தி அதே போன்று வெளியிடப்படும் direct exchange அல்லது fanout exchange
  • பயன்படுத்தும் வார்ப்புருக்கள் * மிக வேகமாகபயன்படுத்தும் டெம்ப்ளேட்களை விட #.
  • topic exchange மெதுவாக direct exchange

Fanout பரிமாற்றம்

Fanout exchange - அனைத்து செய்திகளும் அனைத்து வரிசைகளுக்கும் வழங்கப்படுகின்றன ஒரு ரூட்டிங் விசை செய்தியில் குறிப்பிடப்பட்டிருந்தாலும் கூட.

அம்சங்கள்:

  • RabbitMQ ரூட்டிங் விசைகள் மற்றும் டெம்ப்ளேட்களுடன் வேலை செய்யாது இது செயல்திறனில் நேர்மறையான விளைவைக் கொண்டுள்ளது. இதுவே வேகமானது exchange;
  • அனைத்து நுகர்வோரும் அனைத்து செய்திகளையும் செயலாக்க முடியும்;

செய்தி ஓட்டத்தின் வரைகலை பிரதிநிதித்துவம்:

முயல்MQ. பகுதி 2. பரிமாற்றங்களைப் புரிந்துகொள்வது

தலைப்புகள் பரிமாற்றம்

Headers exchange - (முக்கிய, மதிப்பு) பண்புகளின் ஜோடிகளின் ஒப்பீட்டின் அடிப்படையில் செய்திகளை தொடர்புடைய வரிசைகளுக்கு அனுப்புகிறது headers பிணைப்பு மற்றும் ஒத்த செய்தி சொத்து. headers ஒரு உள்ளது Dictionary<ключ, значение>.

அகராதியில் சிறப்பு விசையைச் சேர்த்தால் x-match அர்த்தத்துடன் any, பின்னர் ஜோடிகள் (விசை, மதிப்பு) ஓரளவு பொருந்தினால் செய்தி அனுப்பப்படும். இந்த நடத்தை ஆபரேட்டரைப் போன்றது or.

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

இயல்புநிலை விசை x-match மதிப்பைக் கொண்டுள்ளது all. இதன் பொருள், ஜோடிகள் (விசை, மதிப்பு) முழுமையாகப் பொருந்தும்போது செய்தி அனுப்பப்படும். இந்த நடத்தை ஆபரேட்டரைப் போன்றது and.

செய்தி ஓட்டத்தின் வரைகலை பிரதிநிதித்துவம்:

முயல்MQ. பகுதி 2. பரிமாற்றங்களைப் புரிந்துகொள்வது

அம்சங்கள்:

  • கூடுதல் நெகிழ்வுத்தன்மை
  • கூடுதல் கணக்கீட்டு மேல்நிலை. பண்புக்கூறின் அனைத்து ஜோடிகளும் (விசை, மதிப்பு). headers செய்தி ரூட்டிங் மதிப்புகளை கணக்கிடும் முன் முக்கிய பெயரால் வரிசைப்படுத்தப்பட வேண்டும். மற்ற வகை பரிமாற்றங்களை விட மெதுவாக.

நிலையான ஹாஷிங் பரிமாற்றம்

இந்த பரிமாற்றி சொருகு и கட்டப்படவில்லை в RabbitMQ.

Consistent-hashing exchange (நிலையான ஹாஷிங் மூலம் பரிமாற்றம்) - ஒரு செய்தியின் சாத்தியமான பெறுநர்களாக இருக்கும் பல வரிசைகள் இருக்கும்போது மற்றும் அவற்றுக்கிடையே உள்ள சுமையை நீங்கள் சமநிலைப்படுத்த வேண்டியிருக்கும் போது பயன்படுத்தப்படுகிறது. செய்தியானது எடையின் அடிப்படையில் வரிசையுடன் தொடர்புடையது (இதிலிருந்து ஒரு நிபந்தனை சர மதிப்பு 0 - n).

வரிசைகளின் சமமான எடை - ஒவ்வொரு வரிசையும் பெறும் என்பதைக் குறிக்கிறது சுமார் அதே அளவு செய்திகள் (ஒவ்வொரு செய்தியும் ஒரு வரிசையில் மட்டுமே வைக்கப்படும்). செய்திகளின் சீரான விநியோகத்திற்கு முழுமையான உத்தரவாதம் இல்லை.

செய்தி ஓட்டத்தின் வரைகலை பிரதிநிதித்துவம்:

முயல்MQ. பகுதி 2. பரிமாற்றங்களைப் புரிந்துகொள்வது

Hash ரூட்டிங் கீ அல்லது சொத்தின் அடிப்படையில் கணக்கிடப்படுகிறது headers செய்திகள். வெளியிடப்பட்ட எல்லா செய்திகளிலும் வெவ்வேறு ரூட்டிங் விசைகள் இருந்தால், அல்லது headers, பின்னர் விநியோகம் எடை மூலம் ஏற்படும். இல்லையெனில், ரூட்டிங் விசை பயன்படுத்தப்படும், அல்லது headers.

ஒரே வரிசையைப் பயன்படுத்தும் பல நுகர்வோர் கொண்ட தீர்வை விட நுகர்வோர் செயல்திறன் அதிகமாக வளர வேண்டியிருக்கும் போது உதவ வேண்டும்.

பரிமாற்றிகளின் சேர்க்கை (E2E)

அனைத்து பரிமாற்றிகளின் நடத்தை தகவல்தொடர்புகளைப் பயன்படுத்தி இணைக்கப்படலாம் பரிமாற்றம்-மாற்றம் (பரிமாற்றிகள் சேர்க்கை விவரக்குறிப்பில் சேர்க்கப்படவில்லை AMQP. இது பக்கத்திலிருந்து ஒரு நெறிமுறை நீட்டிப்பு RabbitMQ).

செய்தி ஓட்டத்தின் வரைகலை பிரதிநிதித்துவம்:

முயல்MQ. பகுதி 2. பரிமாற்றங்களைப் புரிந்துகொள்வது

செலவில் E2E தற்போதைய மற்றும் வளர்ந்து வரும் தேவைகளை பூர்த்தி செய்யும் சரியான அளவிடக்கூடிய உள்ளமைவை நாம் காணலாம்.

ஒரு பரிமாற்றத்தை உருவாக்கவும்

பரிமாற்றி ஒரு ஒத்திசைவைப் பயன்படுத்தி உருவாக்கப்பட்டது RPC சேவையகத்திற்கு கோரிக்கை. கோரிக்கை முறையைப் பயன்படுத்தி செய்யப்படுகிறது Exchange.Declare, அளவுருக்களுடன் அழைக்கப்படுகிறது:

  • பரிமாற்றி பெயர்
  • பரிமாற்றி வகை
  • மற்ற விருப்பங்கள்

உருவாக்கம் உதாரணம் exchange உதவியுடன் RabbitMQ. வாடிக்கையாளர்:

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

  • exchange - நாம் உருவாக்க விரும்பும் பரிமாற்றியின் பெயர். பெயர் தனிப்பட்டதாக இருக்க வேண்டும்
  • type - பரிமாற்றி வகை
  • durable - நிறுவப்பட்டிருந்தால் true, பின்னர் exchange நிரந்தரமாக இருக்கும். இது வட்டில் சேமிக்கப்படும் மற்றும் சேவையகம்/தரகர் மறுதொடக்கத்தைத் தக்கவைக்க முடியும். மதிப்பு என்றால் false, பின்னர் exchange தற்காலிகமானது மற்றும் சேவையகம்/தரகர் மறுதொடக்கம் செய்யப்படும் போது அகற்றப்படும்
  • autoDelete - தானியங்கி நீக்கம். Exchange தொடர்புடைய அனைத்து வரிசைகளும் நீக்கப்படும் போது நீக்கப்படும்
  • arguments விருப்ப வாதங்கள். பெரும்பாலும், வாதங்கள் மூலம் alternative exchange (மாற்று பரிமாற்றி) ஒரு செய்தி அசல் பாதையில் செல்ல முடியாவிட்டால், அதை வேறு பாதையில் அனுப்ப மாற்று பரிமாற்றத்திற்கு அனுப்பலாம்.

முயல்MQ. பகுதி 2. பரிமாற்றங்களைப் புரிந்துகொள்வது

படைப்பு என்றால் exchange சாத்தியமான, பின்னர் சேவையகம் கிளையண்டிற்கு ஒரு ஒத்திசைவை அனுப்பும் RPC பதில் Exchange.DeclareOk. படைப்பு என்றால் சாத்தியமற்றது (கோரிக்கைக்கு ஒரு மறுப்பு இருந்தது Exchange.Declare), பிறகு சேனல் மூடப்படும் ஒத்திசைவற்ற கட்டளையைப் பயன்படுத்தும் சேவையகம் Channel.Close மற்றும் வாடிக்கையாளர் விதிவிலக்கு பெறுவார் OperationInterruptedException, இது பிழைக் குறியீடு மற்றும் அதன் விளக்கத்தைக் கொண்டிருக்கும்.

இடுகையிடுவதற்கு முன் ஒரு பரிமாற்றி உருவாக்கப்பட வேண்டும். இல்லாத சில பரிமாற்றிக்கு நீங்கள் ஒரு செய்தியை வெளியிட்டால் - RabbitMQ அமைதியாக அதை அகற்று.

ஒரு பரிமாற்ற GUI ஐ உருவாக்கவும்

நிர்வாக குழுவிற்குச் செல்லவும் RabbitMQ பயனர் கீழ் guest (பயனர் பெயர்: guest மற்றும் கடவுச்சொல்: guest) பயனர் என்பதை நினைவில் கொள்ளவும் guest லோக்கல் ஹோஸ்டில் இருந்து மட்டுமே இணைக்க முடியும். இப்போது தாவலுக்கு செல்வோம் Exchanges மற்றும் கிளிக் செய்யவும் Add a new exchange. பண்புகளை நிரப்பவும்:

முயல்MQ. பகுதி 2. பரிமாற்றங்களைப் புரிந்துகொள்வது

பெரும்பாலான பண்புகள் மேலே விவரிக்கப்பட்டுள்ளன. நாம் அமைத்தால் என்பதை இங்கே கவனிக்கிறோம் Internal, பின்னர் பரிமாற்றம் மட்டுமே பயன்படுத்தப்படும் E2E. Producer அத்தகைய பரிமாற்றத்திற்கு செய்திகளை அனுப்ப முடியாது.

முடிவுக்கு

ஒரு அமைப்பை உருவாக்கும்போது, ​​இடவியலை விவரிக்க வசதியாக இருக்கும் ரூட்டிங் ஒரு வரைபடத்தைப் பயன்படுத்தி. ஆனால் நீங்கள் ஒரு வரைபடத்தை உருவாக்கத் தொடங்குவதற்கு முன், அதிக போக்குவரத்து கொண்ட பாதைகளை முன்னிலைப்படுத்துவது மதிப்பு, ஏனெனில். அவர்கள் தேவை அதிக செயல்திறன் (செயல்திறன்). அடுத்து, நீங்கள் போக்குவரத்தை வகைப்படுத்தலாம். பின்னர் கட்டத் தொடங்குங்கள்.

கட்டப்பட்ட வரைபடத்தில் இருந்தால் வரையறுக்கப்பட்ட தொகுப்பு ரூட்டிங் விசைகள், பின்னர், பலவற்றைப் பார்ப்பது மதிப்பு fanout exchange, இது ரூட்டிங் விசையுடன் தொடர்புடைய 1:1 ஆகும். அதை நினைவில் கொள் fanout exchange அதிவேகமான.

பாதைகளின் எண்ணிக்கை என்றால் முடிவிலியை நோக்கி செல்கிறது, கவனம் செலுத்துவது மதிப்பு topic exchange அல்லது, டெம்ப்ளேட் தேவையில்லை என்றால், நீங்கள் தேர்வு செய்யலாம் direct exchnge, ஏனெனில் அவர் வேகமாக இருக்கிறார் topic exchange.

பல்வேறு கலவைகள் exchange சரியானதைக் கண்டறிய உங்களுக்கு உதவ வேண்டும். அளவிடக்கூடிய கட்டமைப்பு, இது தற்போதைய மற்றும் வளர்ந்து வரும் கணினி தேவைகளை பூர்த்தி செய்கிறது.

எண்ணிக்கை exchange மற்றும் பாதைகளின் எண்ணிக்கையுடன் ஒப்பிடும்போது வரிசைகள் குறைவாக இருக்க வேண்டும்.

அடுத்த கட்டுரையில், வரிசைகள் மற்றும் பிணைப்புகள் பற்றி மேலும் புரிந்துகொள்ளத் தொடங்குவோம்.

குறிப்புகள்

ஆதாரம்: www.habr.com

கருத்தைச் சேர்