The nmr component is an adapter to the Normalized Message Router (NMR) in ServiceMix, which is intended for use by Apache Camel applications deployed directly into the OSGi container. By contrast, the JBI component is intended for use by Apache Camel applications deployed into the ServiceMix JBI container.
The NMR component is provided with Apache ServiceMix. It is not distributed with Apache 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>
The following code:
from("nmr:MyServiceEndpoint")
Automatically exposes a new endpoint to the bus with endpoint name
MyServiceEndpoint
(see URI format).
When an NMR endpoint appears at the end of a route, for example:
to("nmr:MyServiceEndpoint")
The messages sent by this producer endpoint are sent to the already deployed JBI endpoint.
Option | Default Value | Description |
---|---|---|
synchronous
|
false
|
When this is set to true on
a consumer endpoint, an incoming, synchronous NMR Exchange will be handled on
the sender's thread instead of being handled on a new thread of the NMR
endpoint's thread pool |
from("nmr:MyServiceEndpoint") from("nmr:MyServiceEndpoint?synchronous=true").to("nmr:AnotherEndpoint")
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("nmr:MyEndpoint").streamCaching().to("xslt:transform.xsl", "bean:doSomething");
From Apache Camel 1.5 onwards, the stream caching is
default enabled, so it is not necessary to set the streamCaching()
option. In Apache 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.