র্যাবিটএমকিউ। পার্ট 2. এক্সচেঞ্জ বোঝা

Exchange - এক্সচেঞ্জার বা বিনিময় পয়েন্ট। এতে বার্তা পাঠানো হয়। Exchange বার্তা বিতরণ করে এক বা একাধিক সারিতে। সে একটি সারিতে বার্তা রুট করে তৈরি লিঙ্কের উপর ভিত্তি করে (bindings) এটি এবং সারির মধ্যে।

Exchange হয় না Erlang প্রক্রিয়া. মাপযোগ্যতার কারণে exchange এমবেডেড ডাটাবেসে একটি স্ট্রিং (কোড সহ মডিউলের একটি লিঙ্ক যেখানে রাউটিং লজিক রয়েছে) স্মৃতিশক্তি. 1 হাজার এক্সচেঞ্জার শুধুমাত্র 1MB মেমরি ব্যবহার করবে।

বিষয়বস্তু সূচি

  • র্যাবিটএমকিউ। পার্ট 1. ভূমিকা. Erlang, AMQP এবং RPC
  • র্যাবিটএমকিউ। পার্ট 2. এক্সচেঞ্জ বোঝা
  • খরগোশ এমকিউ। পার্ট 3. সারি এবং বাঁধাই বোঝা
  • খরগোশ এমকিউ। পার্ট 4. বার্তা এবং ফ্রেম কি তা নিয়ে কাজ করা
  • র্যাবিটএমকিউ। পার্ট 5: বার্তা কার্য সম্পাদন এবং প্রকাশ করা
  • খরগোশ এমকিউ। পার্ট 6. ফেডারেশন এবং বেলচা মডিউলের ওভারভিউ
  • খরগোশ এমকিউ। পার্ট 7. সংযোগ এবং চ্যানেল সম্পর্কে বিশদ বিবরণ
  • র্যাবিটএমকিউ। পার্ট 8. .NET-এ RabbitMQ
  • খরগোশ এমকিউ। পার্ট 9. মনিটরিং

সরাসরি বিনিময়

Direct exchange - প্রয়োজনে ব্যবহার করা হয় নির্দিষ্ট সারিতে একটি বার্তা প্রদান করুন. বার্তা একটি নির্দিষ্ট সঙ্গে এক্সচেঞ্জার প্রকাশ করা হয় রাউটিং কী এবং অনুরূপ রাউটিং কী সহ এই এক্সচেঞ্জারের সাথে যুক্ত সমস্ত সারিতে প্রবেশ করে। রাউটিং কী একটি স্ট্রিং. ব্যবহার করে ম্যাচিং করা হয় সমতা জন্য স্ট্রিং চেকিং.

বার্তা প্রবাহের গ্রাফিক্যাল উপস্থাপনা:

র্যাবিটএমকিউ। পার্ট 2. এক্সচেঞ্জ বোঝা

В rabbitmq একটি ধারণা আছে ডিফল্ট এক্সচেঞ্জার. এই direct exchange নামহীন. যদি ডিফল্ট এক্সচেঞ্জার ব্যবহার করা হয়, তাহলে বার্তাটি একটি সারিতে রাউট করা হবে যার নামের সমান বার্তা রাউটিং কী.

বিষয় বিনিময়

Topic exchange - অনুরূপ direct exchange রাউটিং কী তুলনা করে নির্বাচনী রাউটিং সক্ষম করে। কিন্তু, এই ক্ষেত্রে, চাবি দেওয়া হয় টেমপ্লেট দ্বারা. একটি টেমপ্লেট তৈরি করার সময়, ব্যবহার করুন 0 বা আরও শব্দ (অক্ষর AZ и az এবং সংখ্যা 0-9), একটি বিন্দু, সেইসাথে প্রতীক দ্বারা পৃথক করা হয় * и #.

  • * - ঠিক সঙ্গে প্রতিস্থাপিত করা যেতে পারে 1 শব্দটি
  • # - দ্বারা প্রতিস্থাপিত করা যেতে পারে 0 বা আরো শব্দ

বার্তা প্রবাহের গ্রাফিক্যাল উপস্থাপনা:

র্যাবিটএমকিউ। পার্ট 2. এক্সচেঞ্জ বোঝা

সংস্করণ থেকে শুরু RabbitMQ 2.4.0 জন্য রাউটিং অ্যালগরিদম topic exchange পর্যন্ত কাজ শুরু করে 145 বার দ্রুত। তারা পন্থা বাস্তবায়ন করে এটি অর্জন করেছে বাস্তবায়নের চেষ্টা করুন, যা একটি গাছের কাঠামো হিসাবে টেমপ্লেটগুলির উপস্থাপনাকে বোঝায়। উদাহরণস্বরূপ টেমপ্লেট a.b.c, a.*.b.c, a.#.c и b.b.c নিম্নলিখিত কাঠামো দ্বারা প্রতিনিধিত্ব করা হবে:

র্যাবিটএমকিউ। পার্ট 2. এক্সচেঞ্জ বোঝা

প্যাটার্ন মিল অনুসন্ধান করা হয় রুট থেকে শুরু করে এবং উপরে থেকে নীচের দিকে যাচ্ছে।

বৈশিষ্ট্য:

  • এই এক্সচেঞ্জার ব্যবহার হয়ে যেতে পারে সম্ভাব্য ভবিষ্যতের অ্যাপ বিকাশের জন্য একটি ভাল পছন্দ, কারণ টেমপ্লেট সবসময় কাস্টমাইজ করা যেতে পারে যাতে বার্তা একইভাবে প্রকাশিত হয় direct exchange বা fanout exchange
  • যে টেমপ্লেটগুলি ব্যবহার করে * অনেক দ্রুতযে টেমপ্লেটগুলি ব্যবহার করে তার চেয়ে #.
  • topic exchange ধীর direct exchange

ফ্যানআউট এক্সচেঞ্জ

Fanout exchange - সব বার্তা সব সারি বিতরণ করা হয় এমনকি যদি বার্তায় একটি রাউটিং কী নির্দিষ্ট করা থাকে।

বৈশিষ্ট্য:

  • RabbitMQ রাউটিং কী এবং টেমপ্লেটগুলির সাথে কাজ করে না যা কর্মক্ষমতা উপর একটি ইতিবাচক প্রভাব আছে. এটি দ্রুততম exchange;
  • সমস্ত গ্রাহকদের অবশ্যই সমস্ত বার্তা প্রক্রিয়া করতে সক্ষম হতে হবে;

বার্তা প্রবাহের গ্রাফিক্যাল উপস্থাপনা:

র্যাবিটএমকিউ। পার্ট 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.

বার্তা প্রবাহের গ্রাফিক্যাল উপস্থাপনা:

র্যাবিটএমকিউ। পার্ট 2. এক্সচেঞ্জ বোঝা

বৈশিষ্ট্য:

  • অতিরিক্ত নমনীয়তা
  • অতিরিক্ত কম্পিউটেশনাল ওভারহেড। বৈশিষ্ট্যের সমস্ত জোড়া (কী, মান) headers বার্তা রাউটিং মান গণনা করার আগে মূল নামের দ্বারা বাছাই করা আবশ্যক। অন্যান্য ধরনের বিনিময়ের তুলনায় ধীর.

সামঞ্জস্যপূর্ণ হ্যাশিং এক্সচেঞ্জ

এই এক্সচেঞ্জার হয় প্লাগ লাগানো и নির্মিত না в RabbitMQ.

Consistent-hashing exchange (হ্যাশ-সামঞ্জস্যপূর্ণ বিনিময়) - যখন একাধিক সারি থাকে যেগুলি একটি বার্তার সম্ভাব্য প্রাপক এবং যখন আপনার তাদের মধ্যে ব্যালেন্স লোড করার প্রয়োজন হয় তখন ব্যবহৃত হয়। বার্তাটি ওজন দ্বারা সারির সাথে যুক্ত (এর থেকে একটি শর্তসাপেক্ষ স্ট্রিং মান 0 - n).

সারিগুলির সমান ওজন - নির্দেশ করে যে প্রতিটি সারি পাবে প্রায় একই পরিমাণ বার্তা (প্রতিটি বার্তা শুধুমাত্র একটি সারিতে রাখা হবে)। বার্তাগুলির অভিন্ন বিতরণের কোনও সম্পূর্ণ গ্যারান্টি নেই.

বার্তা প্রবাহের গ্রাফিক্যাল উপস্থাপনা:

র্যাবিটএমকিউ। পার্ট 2. এক্সচেঞ্জ বোঝা

Hash রাউটিং কী বা সম্পত্তির উপর ভিত্তি করে গণনা করা হয় headers বার্তা যদি সমস্ত প্রকাশিত বার্তার বিভিন্ন রাউটিং কী থাকে, বা headers, তারপর বন্টন ওজন দ্বারা ঘটবে. অন্যথায়, রাউটিং কী ব্যবহার করা হবে, বা headers.

যখন একই সারি ব্যবহার করে একাধিক ভোক্তাদের সাথে একটি সমাধানের চেয়ে ভোক্তা থ্রুপুটকে উচ্চতর করতে হবে তখন সাহায্য করা উচিত।

এক্সচেঞ্জারের সংমিশ্রণ (E2E)

সমস্ত এক্সচেঞ্জারের আচরণ যোগাযোগ ব্যবহার করে একত্রিত করা যেতে পারে বিনিময় থেকে বিনিময় (এক্সচেঞ্জারগুলির সংমিশ্রণ স্পেসিফিকেশনে অন্তর্ভুক্ত নয় AMQP. এটি পাশ থেকে একটি প্রোটোকল এক্সটেনশন RabbitMQ).

বার্তা প্রবাহের গ্রাফিক্যাল উপস্থাপনা:

র্যাবিটএমকিউ। পার্ট 2. এক্সচেঞ্জ বোঝা

ব্যয়ে E2E আমরা সঠিক মাপযোগ্য কনফিগারেশন খুঁজে পেতে পারি যা বর্তমান এবং ক্রমবর্ধমান উভয় প্রয়োজনীয়তা পূরণ করে।

একটি এক্সচেঞ্জ তৈরি করুন

এক্সচেঞ্জার একটি সিঙ্ক্রোনাস ব্যবহার করে তৈরি করা হয় RPC সার্ভারের কাছে অনুরোধ। অনুরোধ পদ্ধতি ব্যবহার করে করা হয় Exchange.Declareপরামিতি সহ বলা হয়:

  • এক্সচেঞ্জারের নাম
  • এক্সচেঞ্জার প্রকার
  • অন্যান্য অপশন

সৃষ্টির উদাহরণ exchange সাহায্যে RabbitMQ.Client:

//...
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 (বিকল্প এক্সচেঞ্জার) যদি একটি বার্তা মূল রুটের মধ্য দিয়ে যেতে না পারে, তবে এটি একটি ভিন্ন পথে রুট করার জন্য একটি বিকল্প বিনিময়ে পাঠানো যেতে পারে।

র্যাবিটএমকিউ। পার্ট 2. এক্সচেঞ্জ বোঝা

সৃষ্টি হলে exchange সম্ভবত, তারপর সার্ভার ক্লায়েন্টকে একটি সিঙ্ক্রোনাস পাঠাবে RPC উত্তর Exchange.DeclareOk. সৃষ্টি হলে অসম্ভব (অনুরোধে একটি প্রত্যাখ্যান ছিল Exchange.Declare) তারপর চ্যানেল বন্ধ হবে একটি অ্যাসিঙ্ক্রোনাস কমান্ড ব্যবহার করে সার্ভার Channel.Close এবং ক্লায়েন্ট একটি ব্যতিক্রম পাবেন Operation InterruptedException, যাতে ত্রুটি কোড এবং এর বিবরণ থাকবে।

পোস্ট করার আগে একটি এক্সচেঞ্জার তৈরি করতে হবে। আপনি যদি কিছু অস্তিত্বহীন এক্সচেঞ্জারের কাছে একটি বার্তা প্রকাশ করেন - RabbitMQ নিঃশব্দে এটি সরান।

একটি এক্সচেঞ্জ GUI তৈরি করুন

অ্যাডমিন প্যানেলে যান RabbitMQ ব্যবহারকারীর অধীনে guest (ব্যবহারকারীর নাম: guest এবং পাসওয়ার্ড: guest) দয়া করে নোট করুন যে ব্যবহারকারী guest শুধুমাত্র স্থানীয় হোস্ট থেকে সংযোগ করতে পারেন। এখন ট্যাবে যাওয়া যাক Exchanges এবং ক্লিক করুন Add a new exchange. বৈশিষ্ট্য পূরণ করুন:

র্যাবিটএমকিউ। পার্ট 2. এক্সচেঞ্জ বোঝা

বেশিরভাগ বৈশিষ্ট্য উপরে বর্ণিত হয়েছে। এখানে আমরা উল্লেখ্য যে যদি আমরা সেট করি Internal, তারপর বিনিময় শুধুমাত্র জন্য ব্যবহার করা যেতে পারে E2E. Producer যেমন একটি বিনিময় বার্তা পাঠাতে সক্ষম হবে না.

উপসংহার

একটি সিস্টেম বিকাশ করার সময়, টপোলজি বর্ণনা করা সুবিধাজনক রাউটিং একটি গ্রাফ ব্যবহার করে। কিন্তু আপনি একটি গ্রাফ নির্মাণ শুরু করার আগে, এটি উচ্চ ট্রাফিক সঙ্গে পাথ হাইলাইট মূল্য, কারণ. তারা প্রয়োজন উচ্চতর থ্রুপুট (কর্মক্ষমতা). পরবর্তী, আপনি ট্রাফিক শ্রেণীবদ্ধ করতে পারেন. এবং তারপর বিল্ডিং শুরু.

যদি নির্মিত গ্রাফে বিদ্যমান থাকে সসীম সেট রাউটিং কী, তারপর, এটি বেশ কয়েকটি দিকে তাকানোর মূল্য fanout exchange, যা 1:1 রাউটিং কী এর সাথে সম্পর্কিত। মনে রাখবেন, যে fanout exchange দ্রুততর.

রুট সংখ্যা হলে অনন্তের দিকে ঝোঁক, এটা মনোযোগ দিতে মূল্য topic exchange অথবা, যদি টেমপ্লেটের প্রয়োজন না হয়, তাহলে আপনি বেছে নিতে পারেন direct exchnge, কারণ তিনি দ্রুত topic exchange.

বিভিন্ন সমন্বয় exchange আপনাকে সঠিক খুঁজে পেতে সাহায্য করা উচিত। মাপযোগ্য কনফিগারেশন, যা বর্তমান এবং ক্রমবর্ধমান উভয় সিস্টেমের প্রয়োজনীয়তা পূরণ করে।

সংখ্যা exchange এবং সারি রুটের সংখ্যার তুলনায় ন্যূনতম হওয়া উচিত।

পরবর্তী নিবন্ধে, আমরা সারি এবং বাঁধাই সম্পর্কে আরও বুঝতে শুরু করব।

রেফারেন্স

উত্স: www.habr.com

একটি মন্তব্য জুড়ুন