Ich versuche eine Multithread-Implementierung für die JMS-Nachrichtenverarbeitung aus einer Warteschlange zu schreiben.Multithread-JMS-Empfang im Frühjahr
Ich habe versucht mit DefaultMessageListenerContainer und SimpleMessageListenerContainer Klassen.
Das Problem, das ich habe, ist, dass es scheint, dass nur eine einzige Instanz der MessageListener-Klasse jemals instanziiert wird, egal wie ich es konfiguriere. Dies zwingt mich unnötigerweise statusfreie oder threadsichere MessageListener-Implementierungen zu schreiben, da ich den ListenerContainer so konfiguriert habe, dass er mehrere Threads verwendet (concurrentConsumers = 8).
Gibt es eine offensichtliche Lösung, die ich übersehe?
Ich verstehe nicht. Ich mache meinen MessageListener. Ich will nur, dass es die Multi-Cores meiner Maschine nutzt, um Dinge parallel zu verarbeiten. –
@Iker: Ja, und der MessageListenerContainer erzeugt mehrere Threads, wobei alle Threads dieselbe Instanz Ihres 'MessageListener' verwenden. Das Erzeugen mehrerer Listener ist ineffizient und unnötig. – skaffman
Ok, das verstehe ich. Aber sagen wir, dass Sie für jede JMS-Nachricht einen Job verarbeiten müssen, der ein paar Sekunden dauert. Ich möchte in der Lage sein, eine vollständig separate Reihe von Instanzen zu verwenden, um jede der Nachrichten zu verarbeiten. Sollte ich dann Threads vom MessageListener spawnen? –