2016-12-20 1 views
2

Kann mir jemand helfen zu verstehen, warum ich Antwortnachrichten (CreditAuthorizationResponse) in meiner übersprungenen Warteschlange (mtSubscriber_creditAuthRequest_queue_skipped) bekomme? Der Absender empfängt die Antworten wie erwartet, aber sie gehen auch in die übersprungene Warteschlange.Nachrichten in übersprungener Warteschlange erhalten

Ich habe die folgenden Verbraucher geschaffen, die mit Ausnahme der Nachrichten in die übersprungenen Warteschlange wie erwartet funktioniert gehen:

class CreditAuthorizationConsumer : IConsumer<CreditAuthorizationRequest> 
{ 
    private Func<string, Task> _outputDelegate2; 

    public CreditAuthorizationConsumer(Func<string, Task> outputDelegate) 
    { 
     _outputDelegate2 = outputDelegate; 
    } 

    public async Task Consume(ConsumeContext<CreditAuthorizationRequest> context) 
    { 
     await _outputDelegate2($"Received: {context.Message}: {context.Message.CardNumber}"); 
     await context.RespondAsync<CreditAuthorizationResponse>(new CreditAuthorizationResponse(true)); 
     await _outputDelegate2($"Sent CreditAuthorizationResponse for card request {context.Message.CardNumber}"); 
    } 
} 

Hier wo ich die Anfrage bin das Senden:

private async Task SendCreditAuthRequestAsync(int numberToSend) 
{ 
    for (int i = 0; i < numberToSend; i++) 
    { 
     var cardNumber = generateCardNumber(); 
     await SendRequestAsync(new CreditAuthorizationRequest(cardNumber), "mtSubscriber_creditAuthRequest_queue"); 
     await WriteOutputAsync($"Sent credit auth request for card {cardNumber}."); 
    } 
} 
Hier

ist, wo ich mein Client-Side-Bus-Initialisierung:

private void InitializeBus() 
{ 
    _messageBus = Bus.Factory.CreateUsingRabbitMq(sbc => 
    { 
     var host = sbc.Host(new Uri(hostUriTextBox.Text), h => 
     { 
      h.Username("guest"); 
      h.Password("guest"); 
     }); 

     sbc.ReceiveEndpoint(host, "mtSubscriber_creditAuthResponse_queue", endpoint => 
     { 
      endpoint.Handler<CreditAuthorizationResponse>(async context => 
      { 
       await WriteOutputAsync($"Received: {context.Message}: {context.Message.IsAuthorized}"); 
      }); 
     }); 

    }); 
} 

Hier ist, wo ich bin Anfang mein service-Side-Bus llen:

private void InitializeBus() 
{ 
    _messageBus = Bus.Factory.CreateUsingRabbitMq(sbc => 
    { 
     var host = sbc.Host(new Uri(hostUriTextBox.Text), h => 
     { 
      h.Username("guest"); 
      h.Password("guest"); 
     }); 

     sbc.ReceiveEndpoint(host, "mtSubscriber_creditAuthRequest_queue", endpoint => 
     { 
      endpoint.Consumer(() => new CreditAuthorizationConsumer(WriteOutputAsync)); 
     }); 
    } 
} 
+0

Überprüfen Sie Ihre Austauschbindungen, vielleicht haben Sie zwei –

Antwort

0

Alexey Zimarev richtig war - meine Antworten wurden auf meine Anfrage Warteschlange gebunden (zusätzlich zu der Antwortwarteschlange). Das Löschen dieser Bindung löste das Problem und es kam nicht zurück. Vielen Dank!

Verwandte Themen