Ada beberapa hal yang tampaknya membingungkan dengan pertanyaan Anda.
Tapi saya rasa pertanyaan mendasar Anda adalah bagaimana memastikan bahwa setiap pesan hanya diproses satu kali oleh setiap pelanggan.
Jawabannya cukup mudah:Miliki titik akhir yang terpisah untuk setiap pelanggan - ini berarti bahwa setiap pelanggan akan memiliki antrean input sendiri dari mana pesan diproses, dan ke mana pesan gagal akan dikembalikan.
Anda kemudian dapat memiliki sebanyak atau sesedikit penangan di setiap pelanggan yang Anda inginkan. Semua penangan yang kompatibel akan dieksekusi untuk setiap pesan masuk.
Dengan Rebus, setiap pemanggilan ke Configure.With(...).(...).Start()
akan memberi Anda titik akhir terpisah - jadi dalam kasus Anda, saya sarankan Anda membungkus pembuatan titik akhir pelanggan dalam sebuah metode, yang kemudian dapat Anda panggil seperti ini:
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();
// ...
di mana CreateSubscriber
maka akan menjadi seperti ini:
public IBus CreateSubscriber(string queueName)
{
return Configure.With(GetContainerAdapter())
.Transport(t => t.UseMsmq(queueName))
.Start();
}