50.5.1Cluster Manager Processors

 

Cluster Manager module is available to all other modules, so no specific dependency needs to be configured to use it.

50.5.2Broker Consumer/Processor

 

Smile Camel broker is both a consumer and a processor, which means that it can participate in a route as a consumer <from..> or producer <to..> endpoint.

  • Example from URI: <from uri="smile:clustermgr/broker?topic=?my-kafka-from-topic">

  • Description: Takes messages from indicated topic, wraps them in a Camel Exchange and sends them to the following route node.

  • Example to URI: <to uri="smile:clustermgr/broker?topic=?my-kafka-to-topic">

  • Description: Sends received Camel Exchange message to defined Smile internal topic.

The Smile broker allows to reference topics simply by the topic name, which allows replacing a route like the following:

    <route>
        <from uri="kafka:v2-in-topic?brokers=localhost:9092&amp;sslKeystoreLocation=/path/to/keystore.jks&amp;sslKeystorePassword=changeit&amp;sslKeyPassword=changeit&amp;securityProtocol=SSL" />
        <to uri="smile:hl7v2/hl7v2ToFhirProcessor" />
        <to uri="kafka:bundle-out-topic/brokers=localhost:9092&amp;sslKeystoreLocation=/path/to/keystore.jks&amp;sslKeystorePassword=changeit&amp;sslKeyPassword=changeit&amp;securityProtocol=SSL" />
    </route>

by the simpler definition:

<route>
	<from uri="smile:clustermgr/broker?topic=v2-in-topic" />
	<to uri="smile:persistence/bundleProcessor" />
	<to uri="smile:clustermgr/broker?topic=bundle-out-topic" />
</route>

50.5.3Kafka Manual Commit

 

When your route begins with a Kafka consumer as the source, using manual commit mode can be useful in order to guarantee that no messages will be lost in the case of a disruption.

  • Example to URI: <to uri="smile:clustermgr/kafkaManualCommit" />

In order to use this processor, the Kafka consumer component must include the parameters autoCommitEnable=false and allowManualCommit=true.

The following example shows a route with manual transaction committing.

<route>
	<from uri="kafka:guaranteed-delivery-topic?brokers=localhost:9092&amp;allowManualCommit=true&amp;autoCommitEnable=false"/>
	<to uri="smile:persistence/bundleProcessor"/>
	<to uri="smile:clustermgr/kafkaManualCommit" />
</route>

50.5.4Wrap In DocumentReference Processor

 

The Wrap In DocumentReference Processor takes a string input (such as a CDA document, PDF, or other content) and wraps it in a FHIR DocumentReference resource. The processor encodes the input as Base64 and sets it as the DocumentReference.content.attachment.data.

  • Example URI: <to uri="smile:clustermgr/wrapInDocumentReferenceProcessor?status=current&contentType=text/xml">
  • Description: Converts the input string to a FHIR DocumentReference resource with the specified parameters.

50.5.4.1Required Parameters

  • status - Sets the DocumentReference.status value (e.g., "current", "superseded", "entered-in-error")
  • contentType - Sets the Attachment.contentType value (e.g., "text/xml", "application/pdf")

50.5.4.2Optional Parameters

  • docStatus - Sets the DocumentReference.docStatus value
  • typeCode - Sets the DocumentReference.type.coding.code value
  • formatCode - Sets the DocumentReference.content.format.code value

50.5.4.3Example

The following example shows a route that reads a CDA document from a file, wraps it in a DocumentReference resource, and stores it in a FHIR repository:

<route>
    <from uri="file:input/cda?noop=true"/>
    <to uri="smile:clustermgr/wrapInDocumentReferenceProcessor?status=current&amp;contentType=text/xml&amp;typeCode=34133-9&amp;formatCode=urn:hl7-org:sdwg:ccda-structuredBody:2.1"/>
    <to uri="smile:persistence/singleResourceProcessor"/>
</route>