2017-02-24 4 views
0

Ich habe den folgenden Code in C#, der keinen Fehler auslöst, wenn der Routing-Schlüssel ungültig ist.RabbitMQ wirft keinen Fehler bei ungültigem Routing-Schlüssel

Meine Frage ist, wie kann ich den Code werfen Fehler, wenn der Routing-Schlüssel ungültig ist? Wenn ich eine Nachricht über die RabbitMQ-Benutzeroberfläche mit ungültigem Routing-Schlüssel veröffentliche, wird die Nachricht "Nachricht veröffentlicht, aber nicht weitergeleitet" angezeigt.

Vielen Dank im Voraus.

Antwort

1

das Konzept des "ungültigen Routing-Schlüssels" existiert nicht, da Sie dynamische Warteschlangen an die Vermittlungsstellen binden können.

Btw, was Sie suchen, ist "unroutable Nachrichten", müssen Sie das mandatory Flag verwenden und ReturnListener im gleichen Kanal implementieren, wenn eine Nachricht keine Warteschlange erreichen wird an den Handler umgeleitet werden. In diesem auf diese Weise (ist der Code, Java, aber in C# ist mehr oder weniger das gleiche):

boolean isMandatory = true; // if true the message will be handled by HandlingReturnListener 
     // if false the message will be dropped! 

     channel.addReturnListener(new ReturnListener() { 
      public void handleReturn(int replyCode, String replyText, String exchange, String routingKey, AMQP.BasicProperties properties, byte[] body) throws IOException { 
       System.out.println(replyText + ":" + replyCode); 
       System.out.println("******** UnHandled Message ***************"); 

      } 

     }); 

     String myExchange = "myUnroutableExchange_"; 
     channel.exchangeDeclare(myExchange, "topic", false, false, null); 
     channel.basicPublish(myExchange, "NO_KEY", isMandatory, null, "".getBytes()); 
-1

Dafür gibt es etwas namens PublisherAcknowledgement. Dies gibt dem Herausgeber grundsätzlich eine Bestätigung über den Status der Nachricht. Sie können auch unterscheiden, ob die Nachricht bis Exchange oder bis zum Verbraucher erreicht hat. Sie müssen nur jeden Fall richtig behandeln.

Dies ist eine gute Möglichkeit, den Status der zugestellten Nachricht zu kennen. Sie wissen vielleicht nicht, ob es aufgrund des falschen Routing-Schlüssels passiert, aber mit verschiedenen Überprüfungen können Sie möglicherweise auf das Ergebnis eingrenzen.

+1

'Veröffentlichen Confirm' bestätigen, dass die Nachricht der Server nicht die Warteschlange erreicht. – Gabriele

Verwandte Themen