Because Stomp frames consist of plain text, it is possible to improvise a Stomp client by
starting up a telnet
session and entering Stomp frames directly at the
keyboard. This can be a useful diagnostic tool and is also a good way to learn about the Stomp
protocol.
While most characters in a Stomp frame are just plain text, there is one required character, null, that you might have difficulty typing at the keyboard. On some keyboards, you can type null as Ctrl-@. Other keyboards might require you to do a bit of research, however.
For example, to type a null character on the 101-key keyboard that is commonly used with a Windows PC, proceed as follows:
Enable NumLock on the numeric keypad (this is essential).
While holding down the Alt key, type zero,
0
, four times in succession on the numeric keypad.
To send and receive messages over the Stomp protocol using telnet clients, perform the following steps:
For full details of how to deploy a broker in the OSGi container, please
read Deploying a JMS Broker in Deploying into the OSGi Container. If you have not already
deployed a broker, you can create and deploy a new broker, broker1
, by entering the
following console command:
karaf@root> activemq:create-broker --name broker1
Normally, the default broker is configured to initialize a Stomp connector that listens on port, 61613. Look for a line like the following in the broker’s log:
INFO TransportServerThreadSupport - Listening for connections at: stomp://localhost:61613
If the Stomp connector is not present in the broker, you will have to configure it—see Configure the broker for details.
Open a new command prompt and start a new telnet
session for the
producer client, by entering the following command:
telnet
This command starts telnet
in interactive mode. Now enter the following
telnet
commands (the telnet
prompt that begins each line
is implementation dependent):
telnet> set localecho Local echo on telnet> open localhost 61613
After entering the open
command, telnet
should
connect to the Stomp socket on your local ActiveMQ broker (where the Stomp port is presumed to
be 61613 here). You should now see a blank screen, where you can directly type the contents of
the Stomp frames you want to send over TCP.
Start a Stomp session for the producer by entering the following Stomp frame in the
telnet
window:
CONNECT login:foo passcode:bar ^@
The login
and passcode
headers are currently ignored
by the ActiveMQ broker, so you can enter any values you like for these headers. Don’t
forget to insert a blank line after the headers. Finally, you must terminate the
frame by typing the null character, ^@
(for notes on how to type the null
character at your keyboard, see Typing the null character ).
If all goes well, you will see a response similar to the following:
CONNECTED session:ID:fboltond820-2290-1190810591249-3:0
Send a message to the FOO.BAR
queue by entering the following
frame:
SEND destination:/queue/FOO.BAR receipt: Hello, queue FOO.BAR ^@
As soon as you have finished typing the null character, ^@
, you should
receive the following RECEIPT
frame from the server:
RECEIPT receipt-id:
It is a good idea to include a receipt
header in the frames you send
from a telnet client. It enables you to confirm that the connection is working normally.
The status of the ActiveMQ broker can be monitored through a JMX port. To monitor the broker, start a new command prompt and enter the following command:
jconsole
The jconsole
utility is a standard JMX client that is included with
Sun’s Java Development Kit (JDK). When you start the jconsole
utility, a
dialog appears and prompts you to connect to a JMX process, as shown in
Figure 3.1.
Select the ActiveMQ broker process and click Connect. The main
jconsole
window opens. To view the current status of the
FOO.BAR
message queue, click on the MBeans tab and use
the tree on the left hand side to drill down to
org.apache.activemq/localhost/Queue/FOO.BAR
. Click on the
FOO.BAR
icon to view the current status, as shown in Figure 3.2.
The status shows an EnqueueCount of 1, which tells you that the
producer has successfully enqueued one message in the FOO.BAR
queue.
Open a new command prompt and start a new telnet
session for the
consumer client, by entering the following command:
telnet
Enter the following telnet
commands to connect to the Stomp socket on
the broker:
telnet> set localecho Local echo on telnet> open localhost 61613
Start a Stomp session for the consumer by entering the following Stomp frame in the
consumer’s telnet
window:
CONNECT
login:foo
passcode:bar
^@
If all goes well, you will see a response similar to the following:
CONNECTED session:ID:fboltond820-2290-1190810591249-3:1
Subscribe to the FOO.BAR
queue by entering the following Stomp frame in
the consumer’s telnet
window:
SUBSCRIBE
destination:/queue/FOO.BAR
ack:client
^@
The ack
header is set to the value client
, which
implies that the consumer client is expected to acknowledge each message it receives from the
broker. After typing the terminating null character, ^@
, the broker
dispatches the sole message on the FOO.BAR
queue by sending a
MESSAGE
frame, as follows:
MESSAGE destination:/queue/FOO.BAR receipt: timestamp:1190811984837 priority:0 expires:0 message-id:ID:fboltond820-2290-1190810591249-3:0:-1:1:1 Hello, queue FOO.BAR
To see what effect this has on the queue status, go to the jconsole
window and click on the MBeans tab. The
DispatchCount attribute is now equal to 1, indicating that the broker has
dispatched the message to the consumer. The DequeueCount is equal to 0,
however; this is because the message is not considered to be dequeued until the consumer client
sends an acknowledgement.
Acknowledge the received message by entering the following Stomp frame in the consumer’s
telnet
window:
ACK message-id:ID:fboltond820-2290-1190810591249-3:0:-1:1:1 ^@
Where the message ID must match the value from the message-id
header in
the received MESSAGE
frame. To check that the acknowledgement has been
effective, go back to the jconsole
window and click
Refresh on the MBeans tab. You should now find that
the DequeueCount has increased to 1.
Unsubscribe from the FOO.BAR
queue by entering the following Stomp frame
in the consumer’s telnet
window:
UNSUBSCRIBE destination:/queue/FOO.BAR receipt: ^@