2017-07-07 1 views
0

Ich habe einen Verlag, der Nachrichten an rabbitmq: // localhost/test123 Warteschlange veröffentlicht. Eine Nachricht hat TestMessage-Typ, der andere TestMessage2-Typ.Mastransit + RabbitMQ. Eine Warteschlange unter zwei verschiedenen Nachrichtentypen teilen

Verlag config:

sbc.UseRabbitMq(r => r.ConfigureHost(new MessageUrn("rabbitmq://localhost/test123"), c => { })); 
sbc.UseLog4Net(); 
sbc.UseJsonSerializer(); 
sbc.EnableMessageTracing(); 
sbc.ReceiveFrom(new MessageUrn("rabbitmq://localhost/test123")); 

Ich habe zwei seprate Verbraucher pro Nachrichtentyp (2 Verbraucher), Verbraucher 1:

//config stuff 
    sbc.ReceiveFrom("rabbitmq://localhost/test678?prefetch=20"); 
    sbc.Subscribe(subs => { subs.Handler<TestMessage>(msg => { Logger.Info(msg.Text); }); }); 

Verbraucher 2:

//config stuff 
sbc.ReceiveFrom("rabbitmq://localhost/test678"); 
      sbc.Subscribe(
       subs => 
       { 
        subs.Handler<TestMessage2>(
         msg => { Logger.Info(String.Format("rcv:txt= {0}, number= {1}", msg.Text, msg.Number)); }); 
       }); 

Also, wenn ich Veröffentlichen Sie den Publisher und führen Sie einen der Konsumenten aus. Er konsumiert alle Nachrichten seines Typs und verschiebt andere in die Fehlerwarteschlange. Exchange for test678 hat Bindungen für beide Typen.

Ist es normales Verhalten, dass 2 verschiedene Verbraucher versuchen, ihre Nachricht zu lesen, während andere Nachrichten in die Fehlerwarteschlange verschoben werden? Warum kann ich nicht eine Warteschlange unter verschiedenen Verbrauchern mit verschiedenen interessierten Typen teilen?

(ich glaube, es ist nicht Masstransit Problem, eher rabbitmq Designüberlegungen oder Einschränkung)

Vielen Dank im Voraus.

Antwort

1

Wenn mehrere Service-Bus-Instanzen aus derselben Warteschlange empfangen werden, müssen Sie sicherstellen, dass die in dieser Servicebus-Instanz registrierten Consumers identisch sind. Andernfalls werden Nachrichten, die vom Dienst verwendet werden, in die Warteschlange _error für den Nachrichtentyp verschoben, für die in dieser Dienstinstanz kein Verbraucher vorhanden ist.

+0

Vielen Dank, Chris. Noch eine Frage: Ist das, weil Warteschlange (rabbitmq in diesem Fall) Nachricht an den Verbraucher drückt? Wenn der Benutzer also nicht weiß, wie er mit diesem Nachrichtentyp umgehen soll, verschiebt er ihn in die Fehlerwarteschlange. Ich glaube daran, dass eine solche Situation vermieden werden könnte, wenn von der Verbraucherseite gepollt würde ... – Sharov

+1

Es gibt keine Abfrage, und es wäre auch egal, da RMQ keine Unterscheidung zwischen Nachrichtentypen macht. –

Verwandte Themen