Route name | Description |
---|---|
Route-HippoEventBus-to-File | Receives an HippoEventBus event and store it into a file under the inbox folder. |
Route name | Description |
---|---|
Route-File-to-Rest | Polls the inbox folder to read a JSON message file and invokes the specified REST service URL. |
To test this scenario, it is required to run Apache Solr locally.
The demo project expects the Apache Solr running at port 8983 by default.
To install Apache Solr, you can follow the following simplified steps for testing purpose only.
$ cd ./solr-*/
$ ./bin/solr start
name
, collection1
,
and the instanceDir
, collection1
with the other fields with the default setting.
server/solr/collection1
folder
under the 'solr-x.x.x' subfolder.
And copy all the files and directories in server/solr/configsets/_default/conf/
folder
to the server/solr/collection1/
folder.
collection1
core.
You can build and install the module first with Maven.
$ mvn clean install
To test this scenario, execute the following in the demo project's root folder:
$ cd demo $ mvn clean verify $ mvn -P cargo.run -Dcargo.jvm.args="-Dsearch.engine=solr"
In CMS UI, try to open a published document and take it offline and re-publish the document.
Now, try to search the content in the Search Engine frontend UI (http://localhost:8983/solr/).
Retry to take a document offline or publish an unpublished document and see those synchronized in the search engines properly.
The CamelContext configuration is placed in cms/WEB-INF/camel/routes-with-file.xml like the following example
which is initiated by org.springframework.web.context.ContextLoaderListener
defined in
a <listener> element in cms/WEB-INF/web.xml.
<camelContext xmlns="http://camel.apache.org/schema/spring"> <route id="Route-HippoEventBus-to-File"> <!-- Subscribe publish/depublish events as JSON from HippoEventBus. --> <from uri="hippoevent:?category=workflow&action=publish,depublish" /> <!-- Convert the JSON message to String. --> <convertBodyTo type="java.lang.String" /> <!-- Store the JSON string to a file in the 'inbox' folder. --> <to uri="file:inbox?autoCreate=true&charset=utf-8" /> </route> <route id="Route-File-to-REST"> <!-- Subscribe file events from the 'inbox' folder. --> <from uri="file:inbox?autoCreate=true&charset=utf-8&preMove=.processing&delete=true&moveFailed=.error" /> <!-- Convert the file message to String. --> <convertBodyTo type="java.lang.String" /> <!-- Convert the JSON string to JSON object. --> <convertBodyTo type="net.sf.json.JSON" /> <!-- Set HTTP header to 'POST'. --> <setHeader name="CamelHttpMethod"> <constant>POST</constant> </setHeader> <!-- Set HTTP query string based on the workflow event message. --> <choice> <when> <simple>${body[action]} == 'publish'</simple> <setHeader name="CamelHttpQuery"> <simple>action=index&id=${body[subjectId]}</simple> </setHeader> </when> <when> <simple>${body[action]} == 'depublish'</simple> <setHeader name="CamelHttpQuery"> <simple>action=delete&id=${body[subjectId]}</simple> </setHeader> </when> </choice> <!-- Invoke the Search Index synchronization REST service. --> <to uri="http://localhost:8080/site/restapi/{{search.engine}}/update/" /> </route> </camelContext>