h2. Camel NMR Component

The Camel 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.

h3. Installing

In order to be able to use this component, you first have to define it in  your Spring configuration file ({{META-INF/spring/*.xml}}) by adding the following {{bean}}:

{pygmentize:lang=xml}
<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>
{pygmentize}

h3. NMR consumer and producer endpoints

The following code:

{pygmentize:lang=java}
from("nmr:MyServiceEndpoint")
{pygmentize}

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:

{pygmentize:lang=java}
to("nmr:MyServiceEndpoint")
{pygmentize}

The messages sent by this producer endpoint are sent to the already deployed JBI endpoint.

h3. URI format

{pygmentize:lang=text}
nmr:endpointName
{pygmentize}

h4. URI Options
- *{{synchronous}}* (defaults to {{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 |


h4. Examples

{pygmentize:lang=java}
from("nmr:MyServiceEndpoint")
from("nmr:MyServiceEndpoint?synchronous=true").to("nmr:AnotherEndpoint")
{pygmentize}
