/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Welcome to the ServiceMix NMR cluster example ============================================= This example shows how to set up a cluster of two ServiceMix NMR and install a simple example demonstrating the transparent remoting capability. Description =========== This example will use three ServiceMix instances: * the main one will contain an ActiveMQ broker * the second one will contain a quartz service assembly which will fire JBI exchanges at repeated intervals. This quartz endpoint is registered as a clustered endpoint so that those exchanges will go through the cluster engine instead of looking for the target locally * the last one will contain a camel route which will receive the exchanges coming from the previous instances and log them The two custer engines deployed on the instances will use a single ActiveMQ broker. It is possible to set up two different brokers and create a cluster of broker by changing the configuration of the brokers so that they discover each other. However, this is not the main topic of this example. In order to set up this example, you will first create the ActiveMQ broker, then create two new ServiceMix instances and deploy the required configurations on to them. For each of these instances, three files will be put in the deploy folder: * jms.xml contains a definition of a JMS ConnectionFactory pointing to the ActiveMQ broker that will be registered in OSGi for the cluster engine to use it * cluster.xml contains the cluster engine definition. This is not a spring configuration file, but a feature descriptor (see ServiceMix Kernel User's Guide for more informations). This descriptor will be user to automatically install the JBI cluster engine and the required JBI component for this particular instance * quartz.xml / camel.xml contain the JBI endpoints definition Instructions ============ First, run "mvn install" in this examples folder, then copy the contents of the "target/instances" folder from this example into the installation directory of ServiceMix. Note that the cluster.xml files refer to the release of ServiceMix Features project. The default version used in this example is 4.0.0, but if this example is shipped with ServiceMix you need to edit the pom.xml and replace the text element with the version of ServiceMix. You should have the following tree: + apache-servicemix-xxx |-- ant |-- bin |-- etc |-- examples |-- instances | |-- smx1 | | \-- deploy | | |-- cluster.xml | | |-- jms.xml | | \-- quartz.xml | \-- smxx | \-- deploy | |-- camel.xml | |-- cluter.xml | \-- jms.xml |-- lib \-- system The three commands below will install Apache ActiveMQ on the main instance and create a broker. In this example, we will only use a single ActiveMQ broker but you can change this topology to create a broker per JBI container if you want. The required change would be to install a broker on each of the instances and configure them to build a network of brokers. See the ActiveMQ web site (http://activemq.apache.org/networks-of-brokers.html) for more informations. If this example is shipped with ServiceMix , you can skip the below features:addUrl and activemq:create-broker command. Note that the maven url below may need to be changed. It is pointing to the released version of Apache ServiceMix 4.x and the version may need to be modified. Something like: mvn:org.apache.servicemix.features/apache-servicemix/4.2.0/xml/features smx@root:/> features:addUrl mvn:org.apache.servicemix/apache-servicemix/4.2.0/xml/features smx@root:/> features:install activemq smx@root:/> activemq:create-broker Then, create two new instances of ServiceMix Kernel and start then using the following commands: smx@root:/> admin:create smx1 smx@root:/> admin:start smx1 Install the cluster-example-smx1 using the command karaf@root> admin:connect smx1 karaf@smx1> features:install cluster-example-smx1 Disconnect from smx1 ( logout or ^D ) smx@root:/> admin:create smx2 smx@root:/> admin:start smx2 Install the cluster-example-smx2 using the command karaf@root> admin:connect smx2 karaf@smx2> features:install cluster-example-smx2 Disconnect from smx2 ( logout or ^D ) Wait for the two new instances to be fully started. This can be easily checked by running the following command: smx@root:/> admin:list Both instances should be displayed as either "Starting" or "Started", so you just need to wait a bit until both are displayed as "Started". REMARK : As the quartz.xml and camel.xml bundles are loaded before quartz/camel, it could be necessary to stop/start the bundle quartz.xml (smx1) and camel.xml (smx2) using commands : karaf@root> admin:connect smx1 karaf@smx1> stop bundle id of quartz.xml karaf@smx1> start bundle id of quartz.xml karaf@root> admin:connect smx2 karaf@smx1> stop bundle id of camel.xml karaf@smx1> start bundle id of camel.xml Now, we can make sure the example is working as designed by connecting to the "smx2" instance and checking the log. smx:root:/> admin:connect smx2 smx:smx2:/> log:display | grep Exchange You should see a list of log statements, one for each message received from the "smx1" instance.