| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| // |
| |
| ==== JMS |
| |
| The Apache Karaf MOM (Messaging Oriented Middleware/JMS) is an optional enterprise feature. |
| |
| You have to install the `jms` feature first: |
| |
| ---- |
| karaf@root()> feature:install jms |
| ---- |
| |
| The `jms` feature doesn't install a JMS broker: it just installs the OSGi service, commands, and MBean to interact with |
| a JMS broker (not the broker itself). |
| |
| It means that you have to install a JMS broker itself. |
| |
| This JMS broker can be available: |
| |
| * outside of Apache Karaf, as a standalone broker. In that case, Apache Karaf JMS will remotely connect to the JMS broker. |
| For instance, you can use this topology with Apache ActiveMQ or IBM WebsphereMQ. |
| * embedded in Apache Karaf. With this topology, Apache Karaf itself provides a JMS broker service. Apache ActiveMQ provides |
| a native support in Apache Karaf. |
| |
| For instance, you can install Apache ActiveMQ directly in Apache Karaf: |
| |
| ---- |
| karaf@root()> feature:repo-add activemq |
| Adding feature url mvn:org.apache.activemq/activemq-karaf/LATEST/xml/features |
| karaf@root()> feature:install activemq-broker |
| ---- |
| |
| The `activemq-broker` feature installs: |
| |
| * a Apache ActiveMQ broker directly in Apache Karaf, bind to the `61616` port number by default. |
| * the Apache ActiveMQ WebConsole bound to `http://0.0.0.0:8181/activemqweb` by default. |
| |
| The Apache Karaf `jms` feature provides an OSGi service to create/delete JMS connection factories in the container |
| and perform JMS operations (send or consume messages, get information about a JMS broker, list the destinations, ...). |
| |
| This JMS OSGi service can be manipulated programmatically (see the developer guide for details), using the `jms:*` commands, or using the JMS MBean. |
| |
| ===== Commands |
| |
| ====== `jms:create` |
| |
| The `jms:create` command creates a JMS connection factory in the Apache Karaf container. It automatically creates a |
| blueprint XML file in the `deploy` folder containing the JMS connection factory definition corresponding |
| to the type that you mentioned. |
| |
| The `jms:create` command accepts different arguments and options: |
| |
| ---- |
| karaf@root()> jms:create --help |
| DESCRIPTION |
| jms:create |
| |
| Create a JMS connection factory. |
| |
| SYNTAX |
| jms:create [options] name |
| |
| ARGUMENTS |
| name |
| The JMS connection factory name |
| |
| OPTIONS |
| -t, --type |
| The JMS connection factory type (ActiveMQ or WebsphereMQ) |
| (defaults to ActiveMQ) |
| -u, --username |
| Username to connect to the JMS broker |
| (defaults to karaf) |
| --help |
| Display this help message |
| --url |
| URL of the JMS broker. For WebsphereMQ type, the URL is hostname/port/queuemanager/channel |
| (defaults to tcp://localhost:61616) |
| -p, --password |
| Password to connect to the JMS broker |
| (defaults to karaf) |
| |
| ---- |
| |
| * the `name` argument is required. It's the name of the JMS connection factory. The name is used to identify the connection factory, and to create the connection factory definition file (`deploy/connectionfactory-[name].xml`). |
| * the `-t` (`--type`) option is required. It's the type of the JMS connection factory. Currently on `activemq` and `webspheremq` type are supported. If you want to use another type of JMS connection factory, you can create the `deploy/connectionfactory-[name].xml` file by hand (using one as template). |
| * the `--url` option is required. It's the URL used by the JMS connection factory to connect to the broker. If the type is `activemq`, the URL looks like `tcp://localhost:61616`. If the type is `webspheremq`, the URL looks like `host/port/queuemanager/channel`. |
| * the `-u` (`--username`) option is optional (karaf by default). In the case of the broker requires authentication, it's the username used. |
| * the `-p` (`--password`) option is optional (karaf by default). In the case of the broker requires authentication, it's the password used. |
| |
| For instance, to create a JMS connection factory for a Apache ActiveMQ broker, you can do: |
| |
| ---- |
| karaf@root()> jms:create -t activemq --url tcp://localhost:61616 test |
| ---- |
| |
| [NOTE] |
| ==== |
| The `jms:create` command doesn't install any feature or bundle providing the JMS connection factory classes (and dependencies). |
| You have to install the required features (for instance `activemq-broker` feature for Apache ActiveMQ), or bundles (for IBM WebsphereMQ) providing the JMS connection factory packages and classes. |
| ==== |
| |
| In the previous example, we assume that you previously installed the `activemq-broker` feature. |
| |
| We can see the created JMS connection factory: |
| |
| ---- |
| karaf@root()> la |
| ... |
| 151 | Active | 80 | 0.0.0 | connectionfactory-test.xml |
| ---- |
| |
| The `connectionfactory-test.xml` file has been created in the `deploy` folder. |
| |
| By default, the `jms:create` command constructs a JNDI name for the connection factory: `/jms/[name]`. |
| |
| It means that the connection factory name to use for the other `jms:*` commands is `/jms/[name]`. |
| |
| ====== `jms:delete` |
| |
| The `jms:delete` command deletes a JMS connection factory. The `name` argument is the name that you used at creation time: |
| |
| ---- |
| karaf@root()> jms:delete test |
| ---- |
| |
| ====== `jms:connectionfactories` |
| |
| The `jms:connectionfactories` command lists the JMS connection factories: |
| |
| ---- |
| karaf@root()> jms:connectionfactories |
| JMS Connection Factory |
| ---------------------- |
| /jms/test |
| ---- |
| |
| ====== `jms:info` |
| |
| The `jms:info` command provides details about the JMS connection factory: |
| |
| ---- |
| karaf@root()> jms:info /jms/test |
| Property | Value |
| ------------------- |
| product | ActiveMQ |
| version | 5.9.0 |
| ---- |
| |
| You can see the JMS broker product and version. |
| |
| If the JMS broker requires an authentication, you can use the `-u` (`--username`) and `-p` (`--password`) options. |
| |
| ====== `jms:queues` |
| |
| The `jms:queues` command lists the JMS queues available on a JMS broker. For instance: |
| |
| ---- |
| karaf@root()> jms:queues /jms/test |
| JMS Queues |
| ---------- |
| MyQueue |
| ---- |
| |
| where `/jms/test` is the name of the JMS connection factory. |
| |
| If the JMS broker requires an authentication, you can use the `-u` (`--username`) and `-p` (`--password`) options. |
| |
| [NOTE] |
| ==== |
| Depending of the JMS connection factory type, this command may not work. |
| For now, the command works only with Apache ActiveMQ. |
| ==== |
| |
| ====== `jms:topics` |
| |
| The `jms:topics` command lists the JMS topics available on a JMS broker. For instance: |
| |
| ---- |
| karaf@root()> jms:topics /jms/test |
| JMS Topics |
| ---------- |
| MyTopic |
| ---- |
| |
| where `/jms/test` is the name of the JMS connection factory. |
| |
| If the JMS broker requires an authentication, you can use the `-u` (`--username`) and `-p` (`--password`) options. |
| |
| [NOTE] |
| ==== |
| Depending of the JMS connection factory type, this command may not work. |
| For now, the command works only with Apache ActiveMQ. |
| ==== |
| |
| ====== `jms:send` |
| |
| The `jms:send` command sends a message to a given JMS queue. |
| |
| For instance, to send a message containing `Hello World` in the `MyQueue` queue, you can do: |
| |
| ---- |
| karaf@root()> jms:send /jms/test MyQueue "Hello World" |
| ---- |
| |
| If the JMS broker requires an authentication, you can use the `-u` (`--username`) and `-p` (`--password`) options. |
| |
| ====== `jms:consume` |
| |
| The `jms:consume` command consumes messages from a JMS queue. |
| |
| For instance, to consume all messages from `MyQueue`, you can do: |
| |
| ---- |
| karaf@root()> jms:consume /jms/test MyQueue |
| 2 message(s) consumed |
| ---- |
| |
| If you want to consume only some messages, you can define a selector using the `-s` (`--selector`) option. |
| |
| If the JMS broker requires an authentication, you can use the `-u` (`--username`) and `-p` (`--password`) options. |
| |
| [NOTE] |
| ==== |
| The `jms:consume` command just consumes (so removes) messages from a JMS queue. It doesn't display the messages. |
| If you want to see the details of messages, you can use the `jms:browse` command. |
| ==== |
| |
| ====== `jms:count` |
| |
| The `jms:count` command counts the number of pending messages into a JMS queue. |
| |
| For instance, if you want to know the number of messages on `MyQueue`, you can do: |
| |
| ---- |
| karaf@root()> jms:count /jms/test MyQueue |
| Messages Count |
| -------------- |
| 8 |
| ---- |
| |
| If the JMS broker requires an authentication, you can use the `-u` (`--username`) and `-p` (`--password`) options. |
| |
| ====== `jms:browse` |
| |
| The `jms:browse` command browses a JMS queue and display details about messages. |
| |
| For instance, to browse the `MyQueue` queue: |
| |
| ---- |
| karaf@root()> jms:browse /jms/test MyQueue |
| Message ID | Content | Charset | Type | Correlation ID | Delivery Mode | Destination | Expiration | Priority | Redelivered | ReplyTo | Timestamp |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ID:vostro-59602-1387462183019-3:1:1:1:1 | Hello World | UTF-8 | | | Persistent | queue://MyQueue | Never | 4 | false | | Thu Dec 19 15:10:12 CET 2013 |
| ID:vostro-59602-1387462183019-3:2:1:1:1 | Hello ActiveMQ | UTF-8 | | | Persistent | queue://MyQueue | Never | 4 | false | | Thu Dec 19 15:10:16 CET 2013 |
| ID:vostro-59602-1387462183019-3:3:1:1:1 | Hello Karaf | UTF-8 | | | Persistent | queue://MyQueue | Never | 4 | false | | Thu Dec 19 15:10:19 CET 2013 |
| ---- |
| |
| By default, the messages properties are not displayed. You can use the `-v` (`--verbose`) option to display the properties: |
| |
| ---- |
| karaf@root()> jms:browse -v /jms/test MyQueue |
| Message ID | Content | Charset | Type | Correlation ID | Delivery Mode | Destination | Expiration | Priority | Redelivered | ReplyTo | Timestamp | Properties |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| ID:vostro-59602-1387462183019-3:1:1:1:1 | Hello World | UTF-8 | | | Persistent | queue://MyQueue | Never | 4 | false | | Thu Dec 19 15:10:12 CET 2013 | |
| ID:vostro-59602-1387462183019-3:2:1:1:1 | Hello ActiveMQ | UTF-8 | | | Persistent | queue://MyQueue | Never | 4 | false | | Thu Dec 19 15:10:16 CET 2013 | |
| ID:vostro-59602-1387462183019-3:3:1:1:1 | Hello Karaf | UTF-8 | | | Persistent | queue://MyQueue | Never | 4 | false | | Thu Dec 19 15:10:19 CET 2013 | |
| ---- |
| |
| If you want to browse only some messages, you can define a selector using the `-s` (`--selector`) option. |
| |
| If the JMS broker requires an authentication, you can use the `-u` (`--username`) and `-p` (`--password`) options. |
| |
| ====== `jms:move` |
| |
| The `jms:move` command consumes all messages from a JMS queue and send it to another one. |
| |
| For instance, to move all messages from `MyQueue` queue to `AnotherQueue` queue, you can do: |
| |
| ---- |
| karaf@root()> jms:move /jms/test MyQueue AnotherQueue |
| 3 message(s) moved |
| ---- |
| |
| ===== JMX JMS MBean |
| |
| The JMX JMS MBean provides the attributes and operations to manipulate the JMS connection factories and JMS messages. |
| |
| The object name to use is `org.apache.karaf:type=jms,name=*`. |
| |
| ====== Attributes |
| |
| The `Connectionfactories` attribute provides the list of all JMS connection factories names. |
| |
| ====== Operations |
| |
| * `create(name, type, url)` creates a JMS connection factory. |
| * `delete(name)` deletes a JMS connection factory. |
| * `Map<String, String> info(connectionFactory, username, password)` gets details about a JMS connection factory and broker. |
| * `int count(connectionFactory, queue, username, password)` counts the number of pending messages on a JMS queue. |
| * `List<String> queues(connectionFactory, username, password)` lists the JMS queues available on the JMS broker. |
| * `List<String> topics(connectionFactory, username, password)` lists the JMS topics available on the JMS broker. |
| * `TabularData browse(connectionFactory, queue, selector, username, password)` browses a JMS queue and provides a table of JMS messages. |
| * `send(connectionFactory, queue, content, replyTo, username, password)` sends a JMS message to a target queue. |
| * `int consume(connectionFactory, queue, selector, username, password)` consumes JMS messages from a JMS queue. |
| * `int move(connectionFactory, source, destination, selector, username, password)` moves messages from a JMS queue to another. |