NMR Component
The nmr component is an adapter to the Normalized Message Router (NMR) in ServiceMix, which is intended for use by Camel applications deployed directly into the OSGi container. By contrast, the JBI component is intended for use by Camel applications deployed into the ServiceMix JBI container.
Installing
The NMR component is provided with Apache ServiceMix. It is not distributed with Camel. To install the NMR component in ServiceMix, enter the following command in the ServiceMix console window:
features install nmr
You also need to instantiate the NMR component. You can do this by editing your Spring configuration file, META-INF/spring/*.xml
, and adding the following bean
instance:
<beans xmlns:osgi="http://www.springframework.org/schema/osgi" ... > ... <bean id="nmr" class="org.apache.servicemix.camel.nmr.ServiceMixComponent"> <property name="nmr"> <osgi:reference interface="org.apache.servicemix.nmr.api.NMR" /> </property> </bean> ... </beans>
NMR consumer and producer endpoints
The following code:
from("nmr:endpoint:http://foo.bar.org/MyService/MyEndpoint")
Automatically exposes a new endpoint to the bus, where the service QName is {http://foo.bar.org}MyService
and the endpoint name is MyEndpoint
(see #URI-format).
When an NMR endpoint appears at the end of a route, for example:
to("nmr:endpoint:http://foo.bar.org/MyService/MyEndpoint")
The messages sent by this producer endpoint are sent to the already deployed JBI endpoint.
URI format
nmr:service:serviceNamespace[sep]serviceName nmr:endpoint:serviceNamespace[sep]serviceName[sep]endpointName nmr:name:endpointName
The separator that should be used in the endpoint URL is:
/
(forward slash), ifserviceNamespace
starts withhttp://
, or:
(colon), ifserviceNamespace
starts withurn:foo:bar
.
For more details of valid NMR URIs see the ServiceMix URI Guide.
Using the nmr:service:
or nmr:endpoint:
URI formats sets the service QName on the JBI endpoint to the one specified. Otherwise, the default Camel JBI Service QName is used, which is:
{http://activemq.apache.org/camel/schema/jbi}endpoint
Examples
nmr:service:http://foo.bar.org/MyService nmr:endpoint:urn:foo:bar:MyService:MyEndpoint nmr:endpoint:http://foo.bar.org/MyService/MyEndpoint nmr:name:cheese
Using Stream bodies
If you are using a stream type as the message body, you should be aware that a stream is only capable of being read once. So if you enable DEBUG
logging, the body is usually logged and thus read. To deal with this, Camel has a streamCaching
option that can cache the stream, enabling you to read it multiple times.
from("jbi:endpoint:http://foo.bar.org/MyService/MyEndpoint").streamCaching().to("xslt:transform.xsl", "bean:doSomething");
From Camel 1.5 onwards, the stream caching is default enabled, so it is not necessary to set the streamCaching()
option.
In Camel 2.0 we store big input streams (by default, over 64K) in a temp
file using CachedOutputStream
. When you close the input stream, the temp file will be deleted.