rabbitmq amqp - hören ack-Nachrichten von Verbrauchern
Habe ich ein Produzent und Makler, die auf der gleichen Maschine. Der Produzent sendet die Nachrichten etwa so:
channel = connection.createChannel();
//Create a durable queue (if not already present)
channel.queueDeclare(merchantId, true, false, false, null);
//Publish message onto the queue
channel.basicPublish("", consumerId, true, false,
MessageProperties.MINIMAL_PERSISTENT_BASIC, "myMessage");
Den Verbraucher liegt auf einer anderen Maschine und hört Nachrichten. Es nutzt ausdrücklichen Anerkennung etwa so:
while (true) {
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
//Handle message here
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
}
Aus, was ich verstehe, das ack-gemeint ist der Makler dequeue der Nachricht.
Aber wie kann meine Produzenten kommen zu wissen, über die ack, dass der Verbraucher gesendet?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Produzenten und Konsumenten normalerweise nicht interagieren. Dies ist durch das AMQP-Protokoll-design. Zum Beispiel verbraucht eine bestimmte Nachricht kann getan werden, eine lange Zeit, nachdem es veröffentlicht wurde, und es gibt keinen Sinn in dem verlassen der Produzent und läuft für eine lange Zeit. Ein weiteres Beispiel ist, wenn ein publisher sendet eine Nachricht an einen broker, und Dank routing-Logik, die Nachricht wird dupliziert, um mehr als eine Warteschlange, die zu Mehrdeutigkeit (da mehrere Verbraucher erkennen die gleiche Meldung). AMQP-Protokoll ist asynchron (meistens), und das lassen sich die publisher wissen über Ihre Nachricht, die verbraucht wird, passt einfach nicht die asynchronen AMQP-Modell.
Gibt es Ausnahmen von diesem, vor allem, RPC-Aufrufe. Dann wird der Hersteller wird eine Erzeuger-Verbraucher. Es sendet eine Nachricht und dann sofort wartet auf eine Antwort (es ist eine gute RabbitMQ - Handbuch - Direkte Antwort an mit RPC im Zusammenhang mit RabbtiMQ).
Im Allgemeinen, können Sie sicherstellen, dass eine Nachricht an einen broker mit Bestätigt (aka Publisher Danksagung) neben Dead Letter-Austausch und Alternate Tauscht. Diese decken die meisten Fälle, unter denen eine Nachricht verloren geht von seinem normalen Ablauf.