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 willfor be used with the InOut endpointresponse consumers. | | {{exchangePattern}} | {{InOnly}} | Sets the Producers message exchange pattern. | | {{namedReplyTo}} | {{null}} | *InOut only.* Specifies a named reply to destination for InOut endpointresponses. | | {{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 InOutProducerProducer 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 with the 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} h4. Does Springless Mean I Can't Use Spring? Not at all. Below is an example of the SJMS Consumer 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} h4. Transactions 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 CamelJava Transaction API (JTA). Only internal JMS Session Transactions are supported at this time. |