# Java JMS Anfängerfragen



## Kr0e (7. Mrz 2010)

Hi,

ein Server stellt ja Objekte wie Queues oder Topics zur Verfügung...

a) Wie erstelle ich zur Laufzeit des Servers neue Topics, Queues ?
b) Wenn ich z.B. eine Datei über eine Queue schicken will, darf dann diese
    Queue NUR von diesen beiden Sessions benutzt werden ? Sprich pro Datentransfer dann quasi eine Queue ?
c) Wie erreiche ich es, dass eine Message nicht "acknoledged" werden muss ? (Sprich wenn sie einfach abgerufen wird, dann is sie weg... Bei einem Dateitransfer wäre acknoledge ja ziemlich performance raubend...)
d) Kann ich iwo nachschauen, wieviel gerade in eine Queue bereits drin ist ? Um z.B. zu merken, dass der Empfänger mit dem Abholen der Nachrichten nicht hinterher kommt, und dann vlt. einen Listener iwo registrieren um zu erfahren wenn die Queue wieder leer ist oder so ?

Ich hoffe ihr könnt mir da etwas weiterhelfen!

Gruß,
Chris

PS: Ich benutze HornetQ als Provider...


----------



## FArt (7. Mrz 2010)

Ich werde nicht die API Doku für dich lesen und die passenden Methoden posten, aber ich gebe dir schon mal den richtigen Tritt:



> a) Wie erstelle ich zur Laufzeit des Servers neue Topics, Queues ?


Dafür wird es eine Factory geben.


> b) Wenn ich z.B. eine Datei über eine Queue schicken will, darf dann diese
> Queue NUR von diesen beiden Sessions benutzt werden ? Sprich pro Datentransfer dann quasi eine Queue ?


Nein. Es können beliebig viele Sender in die Queue posten und beliebig viele Listener darauf lauschen. Eine Message wird aber immer nur von einem Listener verarbeitet.


> c) Wie erreiche ich es, dass eine Message nicht "acknoledged" werden muss ? (Sprich wenn sie einfach abgerufen wird, dann is sie weg... Bei einem Dateitransfer wäre acknoledge ja ziemlich performance raubend...)


Ich glaube nicht, dass der ack "performanceraubend" ist. Wo hast du das her? Sonst setzt man halt auf autoack, da wird aber natürlich auch ein ack ausgeführt.


> d) Kann ich iwo nachschauen, wieviel gerade in eine Queue bereits drin ist ? Um z.B. zu merken, dass der Empfänger mit dem Abholen der Nachrichten nicht hinterher kommt, und dann vlt. einen Listener iwo registrieren um zu erfahren wenn die Queue wieder leer ist oder so ?


In der Regel kann man einen peek auf eine Queue machen. Das gibt die API her.

Wie das genau funktioniert, dazu solltest du mal die Doku lesen.


----------



## Kr0e (7. Mrz 2010)

Nunja, bei einem Ack. muss doch nach dem Empfangen einer Nachricht nochmal eine Nachricht geschickt werden : "Ja, ich hab alles bekommen !" ... Bei einem Dateitransfer ist das doch eher hinderlich, wenn immer auf eine "Bestätigung" gewartet werden muss... Oder angenommen, man wolle JMS nutzen um Koordinaten von Spielern zu übertragen...

Es geht nich darum, dass jemand die API liest und mir die erklärt... Mehr als das was du mir gerade geschrieben hast, wollte ich doch garnicht  Danke!

Gruß,
Chris

PS: Bisher hab ich nur die Möglichkeit gefunden, Topics und Queues temporär zu erstellen, mit createTemporaryQueue/Topic...
Ist das das selbe wie ne "normale Queue/Topic" ?


----------



## FArt (7. Mrz 2010)

Nein, temporäre Queues sind ... temporär... 
Normle Queues können persistent sein und überleben (mit Messages) auch einen Serverstop.

Ein ack kostet keine Performance. Du kannst auch die Option "duplicates ok" wählen, da passiert aber auch implizit ein ack.


----------



## Kr0e (7. Mrz 2010)

Hmm, ich hab mir jetzt mal die Core API von hornetQ angesehen... Das geht da mit einem "PRE_ACK" sprich der Server macht das schon, bevor er sie dem consumer zuteilt... Ein wirklich sehr ausgereiftes Framework. Ich denke ich werde lieber das nutzen...
Die JMS-Spezifikation ist ja schon irgendwie relativ begrenzt... Bzw. man müsste dann wohl mit JMX den Rest machen, der einem "fehlt". Aber mal schauen.. Danke soweit


----------

