Ja, DefaultConsumer
verwendet einen internen Thread-Pool, der geändert werden kann. Mit ExecutorService
als:
ExecutorService es = Executors.newFixedThreadPool(20);
Connection conn = factory.newConnection(es);
lesen http://www.rabbitmq.com/api-guide.html „Erweiterte Verbindungsoptionen“.
Wie Sie aus dem „QueueingConsumer“ lesen können doc:
Als solches ist es jetzt sicher Verbraucher direkt zu implementieren oder DefaultConsumer zu verlängern.
Ich habe nie QueueingConsumer verwendet, weil es nicht ereignisgesteuert ist.
Wie Sie hier sehen können:
QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume(QUEUE_NAME, true, consumer);
while (true) {
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
/// here you are blocked, waiting the next message.
String message = new String(delivery.getBody());
}
Ein typisches Problem in diesem Fall ist, wie das Abonnement zu schließen und eine gemeinsame Problemumgehung ist eine markierte schließen Nachricht in lokalen Host zu senden. Eigentlich mag ich es nicht so sehr.
Wenn Sie DefaultConsumer
stattdessen erweitern, Sie richtig das Abonnement und den Kanal schließen können:
public class MyConsumer extends DefaultConsumer {...}
dann
public static void main(String[] args) {
MyConsumer consumer = new MyConsumer (channel);
String consumerTag = channel.basicConsume(Constants.queue, false, consumer);
System.out.println("press any key to terminate");
System.in.read();
channel.basicCancel(consumerTag);
channel.close();
....
Abschließend sollten Sie nicht über die Nachricht, um Sorgen machen, weil, wenn alle funktioniert richtig, die Reihenfolge der Nachrichten ist korrekt, aber ich denke, Sie können es nicht annehmen, denn wenn es ein Problem gibt, können Sie die Reihenfolge der Nachrichten verlieren. Wenn Sie die Nachrichtenreihenfolge unbedingt einhalten müssen, sollten Sie ein sequenzielles Tag einfügen, um die Nachrichtenreihenfolge auf der Verbraucherseite zu rekonstruieren.
Und Sie sollten DefaultConsumer erweitern.
Was meinst du mit "wird es meine Bestellung durcheinander bringen?" ? Bestellung von Fäden oder Nachrichten bestellen? – Gabriele