कुछ चीजें हैं जो आपके प्रश्न के साथ भ्रमित करने वाली लगती हैं।
लेकिन मुझे लगता है कि आपका मौलिक प्रश्न यह है कि यह कैसे सुनिश्चित किया जाए कि प्रत्येक संदेश प्रत्येक ग्राहक द्वारा केवल एक बार संसाधित किया जाता है।
इसका उत्तर बहुत आसान है:प्रत्येक ग्राहक के लिए एक अलग समापन बिंदु है - इसका मतलब है कि प्रत्येक ग्राहक की अपनी इनपुट कतार होगी जिससे संदेशों को संसाधित किया जाता है, और जो एक विफल संदेश को वापस कर दिया जाएगा।
फिर आप प्रत्येक ग्राहक में जितने चाहें उतने या कम हैंडलर रख सकते हैं। प्रत्येक आने वाले संदेश के लिए सभी संगत हैंडलर निष्पादित किए जाएंगे।
रीबस के साथ, प्रत्येक आमंत्रण Configure.With(...).(...).Start()
के लिए आपको एक अलग एंडपॉइंट देगा - इसलिए आपके मामले में, मेरा सुझाव है कि आप सब्सक्राइबर एंडपॉइंट निर्माण को एक विधि में लपेटें, जिसे आप इस तरह से लागू कर सकते हैं:
var event1Subscriber = CreateSubscriber("subscriber_event1");
event1Subscriber.Subscribe<Event1>().Wait();
var event2Subscriber = CreateSubscriber("subscriber_event2");
event2Subscriber.Subscribe<Event2>().Wait();
var event3Subscriber = CreateSubscriber("subscriber_event3");
event3Subscriber.Subscribe<Event3>().Wait();
// ...
जहां CreateSubscriber
तब कुछ इस तरह होगा:
public IBus CreateSubscriber(string queueName)
{
return Configure.With(GetContainerAdapter())
.Transport(t => t.UseMsmq(queueName))
.Start();
}