-
1. Re: How do I enable the Stomp protocol?
jmesnil Feb 15, 2010 2:55 AM (in response to mjustin)you also need to configure an acceptor on the server with a "protocol" param set to "stomp".
If you build the trunk, the documentation contains a section about stomp configuration.
-
2. Re: How do I enable the Stomp protocol?
mjustin Feb 15, 2010 4:51 AM (in response to jmesnil)Hi Jeff,the build script does not generate the documentation on my system (Vista) but I found the description for hornetq-configuration.xml.
With this configuration ...
<acceptor name="stomp">
<factory-class>org.hornetq.integration.transports.netty.NettyAcceptorFactory</factory-class>
<param key="protocol" value="stomp"/>
<param key="port" value="61613"/>
</acceptor>... sending works fine, but if I try to consume the messages I get an error. Maybe there is a configuration problem or the messages have not been received as expected. I guess there is a simple command line or web admin tool which I can use to check the queues, so I will investigate this and come back if I have questions again.
Consuming queue: TOOL.DEFAULT
Using a non-durable subscription
We are about to wait until we consume: 10 message(s) then we will shutdown
Queue jms.queue.TOOL.DEFAULT does not exist HornetQException[errorCode=100 messa
ge=Queue jms.queue.TOOL.DEFAULT does not exist]
at org.hornetq.core.server.impl.ServerSessionImpl.createConsumer(ServerS
essionImpl.java:294)
at org.hornetq.core.protocol.stomp.StompSession.addSubscription(StompSes
sion.java:159)
at org.hornetq.core.protocol.stomp.StompProtocolManager.onSubscribe(Stom
pProtocolManager.java:269)
at org.hornetq.core.protocol.stomp.StompProtocolManager.doHandleBuffer(S
tompProtocolManager.java:166)
at org.hornetq.core.protocol.stomp.StompProtocolManager.access$000(Stomp
ProtocolManager.java:49)
at org.hornetq.core.protocol.stomp.StompProtocolManager$1.run(StompProto
colManager.java:132)
at org.hornetq.utils.OrderedExecutorFactory$OrderedExecutor$1.run(Ordere
dExecutorFactory.java:96)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source
)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source) -
3. Re: How do I enable the Stomp protocol?
ataylor Feb 15, 2010 4:55 AM (in response to mjustin)You need to configure the queue either as a core queue in the hornetq-cinfiguration.xml file or as a JMS queue in the hornetq-jms.xml file.1 of 1 people found this helpful -
4. Re: How do I enable the Stomp protocol?
jmesnil Feb 15, 2010 5:11 AM (in response to mjustin)1 of 1 people found this helpfulHi Michael,
I have just modified the trunk and this will impact your work.
I removed a tentative converstion between Stomp destinations and HornetQ mapping.
I've added doc about it. Since you can't generate it, the relevant section is:
45.1.3. Mapping Stomp destinations to HornetQ addresses and queues
Stomp clients deals with destinations when sending messages and subscribing. Destination names are simply strings which are mapped to some form of destination on the server - how the server translates these is left to the server implementation.
In HornetQ, these destinations are mapped to addresses and queues. When a Stomp client sends a message (using a SEND frame), the specified destination is mapped to an address. When a Stomp client subscribes (or unsubscribes) for a destination (using a SUBSCRIBE or UNSUBSCRIBE frame), the destination is mapped to a HornetQ queue.
As explained in Chapter 9, Mapping JMS Concepts to the Core API, JMS destinations are also mapped to HornetQ addresses and queues. If you want to use Stomp to send messages to JMS destinations, the Stomp destinations must follow the same convention:
send or subscribe to a JMS Queue by prepending the queue name by jms.queue..
For example, to send a message to the orders JMS Queue, the Stomp client must send the frame:
SEND destination:jms.queue.orders hello queue orders ^@
-
send or subscribe to a JMS Queue by prepending the topic name by jms.topic..
For example to subscribe to the stocks JMS Topic, the Stomp client must send the frame:
SUBSCRIBE destination:jms.topic.stocks ^@
One thing which may not be clear if you're new to HornetQ is that messages are sent to addresses and received from queues.
Queues are bound to addresses (they will handle messages sent to the address) but an address may have no queues.
This means that if you send a message to an address with no queue bound, the message will be effectively be sent but will be discarded as no queue will handle it.
As Andy says, you must create a queue bound to the address you use to send message to be able to consume the messages.
You can use jconsole management console to see which queues are bound to an address and if messages are held in the queue.
hope that helps,
jeff
-
5. Re: How do I enable the Stomp protocol?
mjustin Feb 15, 2010 5:58 AM (in response to jmesnil)Hi Jeff,
thanks for the documentation! I will try it in the next days.
the second example has a small typo:
send or subscribe to a JMS Queue by prepending the topic name by jms.topic..
should be
send or subscribe to a JMS Topic by prepending the topic name by jms.topic..
Regards,
Michael
-
6. Re: How do I enable the Stomp protocol?
mjustin Feb 15, 2010 6:00 AM (in response to ataylor)Hi Andy,
thank you for the information. I will try it in the next days.
Regards,
Michael