THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
Wiki Markup |
---|
h2. SJMS Component
*Available as of Camel 2.11*
{note}
This component is under active development.
{note}
The SJMS Component is a JMS client for Camel based purely on the JMS API. It will be released as part of Camel 2.11 with the following functionality:
* Queue and Topic Support (Durable & Non-Durable)
* InOnly & InOut Support
* Plugable Connection Resource Management
* Session, Consumer, & Producer Pooling & Caching Management
* Asynchronous Producer and Consumer Processing
* Internal JMS Transaction Support
{info:title=Why the S in SJMS}
S stands for Simple and Standard and Springless. Also camel-jms was already taken. :)
{info}
Maven users will need to add the following dependency to their {{pom.xml}} for this component:
{code:xml}
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-sjms</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>
{code}
h3. URI format
{code}
sjms:[queue:|topic:]destinationName[?options]
{code}
Where {{destinationName}} is a JMS queue or topic name. By default, the {{destinationName}} is interpreted as a queue name. For example, to connect to the queue, {{FOO.BAR}} use:
{code}
sjms:FOO.BAR
{code}
You can include the optional {{queue:}} prefix, if you prefer:
{code}
sjms:queue:FOO.BAR
{code}
To connect to a topic, you _must_ include the {{topic:}} prefix. For example, to connect to the topic, {{Stocks.Prices}}, use:
{code}
sjms:topic:Stocks.Prices
{code}
You append query options to the URI using the following format, {{?option=value&option=value&...}}
h3. SjmsComponent Options and Configurations
Below is an example of how to configure the SjmsComponent with its required ConnectionFactory provider. It will create a single connection by default and store it using the components internal pooling APIs to ensure that it is able to service Session creation requests in a thread safe manner.
{code}
SjmsComponent component = new SjmsComponent();
component.setConnectionFactory(new ActiveMQConnectionFactory("tcp://localhost:61616"));
getContext().addComponent("sjms", component);
{code}
For a SjmsComponent that is required to support a durable subscription, you can override the default ConnectionFactoryResource instance and set the *clientId* property.
{code}
ConnectionFactoryResource connectionResource = new ConnectionFactoryResource();
connectionResource.setConnectionFactory(new ActiveMQConnectionFactory("tcp://localhost:61616"));
connectionResource.setClientId("myclient-id");
SjmsComponent component = new SjmsComponent();
component.setConnectionResource(connectionResource);
component.setMaxConnections(1);
{code}
h3. Producers
The SjmsProducer Endpoint supports the following properties:
{div:class=confluenceTableSmall}
|| Option || Default Value || Description ||
| {{acknowledgementMode}} | {{AUTO_ACKNOWLEDGE}} | The JMS acknowledgement name, which is one of: {{TRANSACTED}}, {{CLIENT_ACKNOWLEDGE}}, {{AUTO_ACKNOWLEDGE}}, {{DUPS_OK_ACKNOWLEDGE}} |
| {{consumerCount}} | {{1}} | *InOut only.* Defines the number of MessageListener instances that for response consumers. |
| {{exchangePattern}} | {{InOnly}} | Sets the Producers message exchange pattern. |
| {{namedReplyTo}} | {{null}} | *InOut only.* Specifies a named reply to destination for responses. |
| {{persistent}} | {{true}} | Whether a message should be delivered with persistence enabled. |
| {{producerCount}} | {{1}} | Defines the number of MessageProducer instances. |
| {{responseTimeOut}} | {{5000}} | *InOut only.* Specifies the amount of time an InOut Producer will wait for its response. |
| {{synchronous}} | {{true}} | Sets whether the Endpoint will use synchronous or asynchronous processing. |
| {{transacted}} | {{false}} | If the endpoint should use a JMS Session transaction. |
| {{ttl}} | {{-1}} | Disabled by default. Sets the Message time to live header. |
{div}
h3. Consumers
The SjmsConsumer Endpoint supports the following properties:
{div:class=confluenceTableSmall}
|| Option || Default Value || Description ||
| {{acknowledgementMode}} | {{AUTO_ACKNOWLEDGE}} | The JMS acknowledgement name, which is one of: {{TRANSACTED}}, {{CLIENT_ACKNOWLEDGE}}, {{AUTO_ACKNOWLEDGE}}, {{DUPS_OK_ACKNOWLEDGE}} |
| {{consumerCount}} | {{1}} | Defines the number of MessageListener instances. |
| {{durableSubscriptionId}} | {{null}} | Required for a durable subscriptions. |
| {{exchangePattern}} | {{InOnly}} | Sets the Consumers message exchange pattern. |
| {{messageSelector}} | {{null}} | Sets the message selector. |
| {{synchronous}} | {{true}} | Sets whether the Endpoint will use synchronous or asynchronous processing. |
| {{transacted}} | {{false}} | If the endpoint should use a JMS Session transaction. |
| {{ttl}} | {{-1}} | Disabled by default. Sets the Message time to live header. |
{div}
h3. Examples
h4. InOnly Producer - (Default)
The InOnly Producer is the default behavior of the SJMS Producer Endpoint.
{code}
from("direct:start")
.to("sjms:queue:bar");
{code}
h4. InOut Producer
To enable InOut behavior append the {{exchangePattern}} attribute to the URI. By default it will use a dedicated TemporaryQueue for each consumer.
{code}
from("direct:start")
.to("sjms:queue:bar?exchangePattern=InOut");
{code}
You can specify a {{namedReplyTo}} though which can provide a better monitor point.
{code}
from("direct:start")
.to("sjms:queue:bar?exchangePattern=InOut&namedReplyTo=my.reply.to.queue");
{code}
{note}
When using InOut with SJMS in a clustered environment you must either use TemporaryQueue destinations or use a unique named reply to destination per instance. Message correlation is handled by the endpoint, not with message selectors at the broker.
{note}
h4. Does Springless Mean I Can't Use Spring?
Not at all. Below is an example of the SJMS component using the Spring DSL:
{code}
<route
id="inout.named.reply.to.producer.route">
<from
uri="direct:invoke.named.reply.to.queue" />
<to
uri="sjms:queue:named.reply.to.queue?namedReplyTo=my.response.queue&exchangePattern=InOut" />
</route>
{code}
It is just not using the Spring JMS APIs to provide the JMS Client container. A new container is being developed from the ground up to power SJMS. So for example, you
h3. Transaction Support {anchor:transactionCacheLevels}
There is currently no support the Camel Transaction Processor nor does it support the Java Transaction API (JTA). Only internal JMS Session Transactions are supported at this time. |