AMQP প্রোটোকল "হুডের নীচে" কী করে তার একটি ভাল ধারণাটি উপলব্ধি এখানে দরকারী। আমি প্রস্তাব দেব যে ডকুমেন্টেশন এবং এপিআই যেটি এএমকিউপি ০.৯.১ স্থাপন করা বেছে নিয়েছিল তা এটি বিশেষত বিভ্রান্তিকর করে তোলে, তাই প্রশ্নটি নিজেই একটি যা বহু লোককে লড়াই করতে হয়।
টি এল; ডিআর
একজন সংযোগ হ'ল এটিএমকিপি সার্ভারের সাথে শারীরিক আলোচিত টিসিপি সকেট। যথাযথভাবে প্রয়োগকৃত ক্লায়েন্টদের এই অ্যাপ্লিকেশন অনুযায়ী থ্রেড-সেফ, থ্রেডগুলির মধ্যে ভাগযোগ্য per
একজন চ্যানেল সংযোগের একটি একক অ্যাপ্লিকেশন সেশন। একটি থ্রেডে এই সেশনগুলির এক বা একাধিক থাকবে। এএমকিউপি আর্কিটেকচার 0.9.1 হ'ল এগুলি থ্রেডগুলির মধ্যে ভাগ করে নেওয়া উচিত নয় এবং এটি তৈরি করা থ্রেডটি সমাপ্ত হলে এটি বন্ধ / নষ্ট করা উচিত। যখন বিভিন্ন প্রোটোকল লঙ্ঘন ঘটে তখন সেগুলি সার্ভার দ্বারা বন্ধ করা হয়।
একজন গ্রাহক একটি ভার্চুয়াল কনস্ট্রাক্ট যে একটি নির্দিষ্ট চ্যানেলে একটি "ডাকবাক্স" উপস্থিতিতে প্রতিনিধিত্ব করে। কোনও ভোক্তার ব্যবহার ব্রোকারকে একটি নির্দিষ্ট সারি থেকে সেই চ্যানেলটির শেষ পয়েন্টে বার্তা চাপতে বলে push
সংযোগের তথ্য
প্রথমত, অন্যরা যেমন সঠিকভাবে উল্লেখ করেছেন, একটি সংযোগ হ'ল বস্তু যা সার্ভারের সাথে প্রকৃত টিসিপি সংযোগ উপস্থাপন করে। এএমকিউপিতে প্রোটোকল স্তরে সংযোগগুলি নির্দিষ্ট করা হয় এবং ব্রোকারের সাথে সমস্ত যোগাযোগ এক বা একাধিক সংযোগের মধ্যে ঘটে।
- যেহেতু এটি একটি আসল টিসিপি সংযোগ, তাই এর একটি আইপি ঠিকানা এবং পোর্ট # রয়েছে।
- সংযোগ স্থাপনের অংশ হিসাবে প্রোটোকল পরামিতিগুলি প্রতি ক্লায়েন্ট ভিত্তিতে আলোচনা করা হয় ( হ্যান্ডশেক হিসাবে পরিচিত একটি প্রক্রিয়া) ।
- এটা হতে ডিজাইন করা হয়েছে দীর্ঘস্থায়ী ; এমন কয়েকটি ঘটনা রয়েছে যেখানে সংযোগ বন্ধ হওয়াই প্রোটোকল ডিজাইনের অংশ।
- ওএসআই দৃষ্টিকোণ থেকে, এটি সম্ভবত স্তর 6 এর আশেপাশে কোথাও বাস করে
- হার্টবিট সংযোগের স্থিতি পর্যবেক্ষণ করার জন্য সেটআপ করা যেতে পারে, কারণ টিসিপিতে এটি করার জন্য এবং নিজের মধ্যে কিছু থাকে না।
- অন্তর্নিহিত টিসিপি সকেটটি পড়তে এবং লিখতে একটি উত্সর্গীকৃত থ্রেড পরিচালনা করা ভাল। বেশিরভাগ, সমস্ত না থাকলে, রেবিটএমকিউ ক্লায়েন্টরা এটি করে। সে ক্ষেত্রে, তারা সাধারণত থ্রেড-নিরাপদ।
- তুলনামূলকভাবে বলতে গেলে, সংযোগগুলি তৈরি করতে "ব্যয়বহুল" (হ্যান্ডশেকের কারণে), তবে ব্যবহারিকভাবে বলতে গেলে, এটি সত্যিকার অর্থে কোনও ব্যাপার নয়। বেশিরভাগ প্রক্রিয়াগুলির জন্য কেবলমাত্র একটি সংযোগের বিষয় প্রয়োজন। তবে, আপনি একটি পুলে সংযোগগুলি বজায় রাখতে পারেন, যদি আপনি খুঁজে পান যে কোনও থ্রেড / সকেট সরবরাহ করতে পারে তার চেয়ে বেশি থ্রুপুট প্রয়োজন (বর্তমান কম্পিউটিং প্রযুক্তির সাথে অসম্ভব)।
চ্যানেল তথ্য
একটি চ্যানেল হল অ্যাপ্লিকেশন সেশন যা আপনার অ্যাপ্লিকেশনের প্রতিটি অংশের জন্য খরগোশ এমকিউ ব্রোকারের সাথে যোগাযোগ করার জন্য খোলা হয়। এটি একটি একক সংযোগে পরিচালনা করে এবং ব্রোকারের সাথে একটি সেশন উপস্থাপন করে ।
- এটি অ্যাপ্লিকেশন লজিকের একটি লজিকাল অংশ উপস্থাপন করে, প্রতিটি চ্যানেল সাধারণত নিজস্ব থ্রেডে উপস্থিত থাকে।
- সাধারণত, আপনার অ্যাপ্লিকেশন দ্বারা খোলার সমস্ত চ্যানেলগুলি একটি একক সংযোগ ভাগ করবে (সেগুলি লাইটওয়েট সেশন যা সংযোগের শীর্ষে পরিচালিত হয়)। সংযোগগুলি থ্রেড-নিরাপদ, সুতরাং এটি ঠিক আছে।
- বেশিরভাগ এএমকিউপি অপারেশন চ্যানেলগুলির মাধ্যমে ঘটে।
- ওএসআই লেয়ার দৃষ্টিকোণ থেকে, চ্যানেলগুলি সম্ভবত স্তর 7 এর আশেপাশে রয়েছে ।
- চ্যানেলগুলি ক্ষণস্থায়ী হতে ডিজাইন করা হয়েছে ; এএমকিউপি-র ডিজাইনের অংশটি হ'ল চ্যানেলটি সাধারণত কোনও ত্রুটির প্রতিক্রিয়াতে বন্ধ থাকে (যেমন বিদ্যমান সারিটি মোছার আগে বিভিন্ন পরামিতিগুলির সাথে একটি সারি পুনরায় ঘোষণার)।
- যেহেতু এগুলি ক্ষণস্থায়ী, আপনার অ্যাপ্লিকেশন দ্বারা চ্যানেলগুলি পোল করা উচিত নয়।
- চ্যানেল সনাক্ত করতে সার্ভারটি একটি পূর্ণসংখ্যা ব্যবহার করে। সংযোগ পরিচালনার থ্রেড যখন কোনও নির্দিষ্ট চ্যানেলের জন্য একটি প্যাকেট গ্রহণ করে, তখন প্যাকেটটি কোন চ্যানেল / সেশনের অন্তর্গত তা ব্রোকারকে বলতে এই সংখ্যাটি ব্যবহার করে।
- চ্যানেলগুলি সাধারণত থ্রেড-নিরাপদ হয় না কারণ এগুলি থ্রেডগুলির মধ্যে ভাগ করে নেওয়ার কোনও অর্থ হয় না। আপনার যদি অন্য থ্রেড থাকে যা ব্রোকারটি ব্যবহার করা দরকার তবে একটি নতুন চ্যানেল প্রয়োজন।
গ্রাহক তথ্য
একজন গ্রাহক এএমকিপি প্রোটোকল দ্বারা সংজ্ঞায়িত একটি বিষয়। এটি কোনও চ্যানেল বা সংযোগ নয়, এর পরিবর্তে এমন কিছু যা আপনার নির্দিষ্ট অ্যাপ্লিকেশনটি বার্তা ফেলে দেওয়ার জন্য "মেলবক্স" হিসাবে ব্যবহার করে।
- "ভোক্তা তৈরি করা" এর অর্থ হ'ল আপনি ব্রোকারকে ( সংযোগের মাধ্যমে একটি চ্যানেল ব্যবহার করে ) বলছেন যে আপনি সেই চ্যানেলটির উপরে বার্তা আপনাকে চাপিয়ে দিতে চান। প্রতিক্রিয়া হিসাবে, ব্রোকার নিবন্ধভুক্ত করবে যে আপনার চ্যানেলে একটি গ্রাহক রয়েছে এবং আপনাকে বার্তা প্রেরণ করা শুরু করবেন।
- সংযোগের উপরে চাপ দেওয়া প্রতিটি বার্তা একটি চ্যানেল নম্বর এবং গ্রাহক সংখ্যা উভয়ই উল্লেখ করবে । এইভাবে, সংযোগ-পরিচালনা থ্রেড (এই ক্ষেত্রে, জাভা এপিআই-র মধ্যে) বার্তাটি দিয়ে কী করতে হবে তা জানে; তারপরে, চ্যানেল হ্যান্ডলিং থ্রেডটি বার্তাটি দিয়ে কী করবে তাও জানে।
- গ্রাহক বাস্তবায়নের বিস্তৃত পরিমাণ রয়েছে, কারণ এটি আক্ষরিকভাবে প্রয়োগ-নির্দিষ্ট। আমার বাস্তবায়নে, প্রতিটি বার গ্রাহকের মাধ্যমে কোনও বার্তা পৌঁছে যাওয়ার পরে আমি কোনও কাজ সরিয়ে নেওয়া বেছে নিয়েছি; সুতরাং, আমার কাছে সংযোগ পরিচালনা করার একটি থ্রেড, চ্যানেল পরিচালনা করার একটি থ্রেড ছিল (এবং এক্সটেনশন দ্বারা, গ্রাহক), এবং গ্রাহকের মাধ্যমে প্রেরিত প্রতিটি বার্তার জন্য এক বা একাধিক টাস্ক থ্রেড ছিল।
- কোনও সংযোগ বন্ধ করা সংযোগের সমস্ত চ্যানেল বন্ধ করে দেয়। একটি ক্লোজিং চ্যানেল চ্যানেলে সব ভোক্তাদের বন্ধ করে। এটি বাতিল করাও সম্ভবগ্রাহককে করা (চ্যানেলটি বন্ধ না করে) । বিভিন্ন ক্ষেত্রে যখন তিনটি জিনিসের কোনওটি করার বুদ্ধি ঘটে।
- সাধারণত, একটি এএমকিউপি ক্লায়েন্টে গ্রাহকের বাস্তবায়ন অন্য থ্রেড বা কোড (প্রকাশনা সহ) এর ক্রিয়াকলাপের সাথে দ্বন্দ্ব এড়াতে গ্রাহককে একটি উত্সর্গীকৃত চ্যানেল বরাদ্দ করবে।
গ্রাহক থ্রেড পুল বলতে আপনি কী বোঝাতে চেয়েছেন তাতে আমি সন্দেহ করি যে জাভা ক্লায়েন্ট আমার ক্লায়েন্টকে যা করার জন্য আমি প্রোগ্রাম করেছিলাম তার মতোই কিছু করছে (আমার নেট নেট ক্লায়েন্টের উপর ভিত্তি করে তৈরি হয়েছিল, তবে ভারি পরিবর্তিত)।