GithubHelp home page GithubHelp logo

fusebyexample / camel-example-tcpip-proxy Goto Github PK

View Code? Open in Web Editor NEW
7.0 13.0 6.0 1.37 MB

Fuse ESB (ServiceMix) example of Apache Camel acting as an TCP/IP Proxy with failover capability

Java 100.00%

camel-example-tcpip-proxy's Introduction

Using Fuse ESB to Manage Controller Failover

This document describes a simple prototype that demonstrates the use of Fuse ESB to manage TCP/IP controller failover.

Here is the design:

Design Image

Client sends TCP/IP messages to ESB acting as a proxy. A failover-capable router pickups up messages and sends them to Controller 1 using a TCP/IP service call. Controller 1 stamps the message as having been processed and returns it to the router, and then back to the Client application.

If Controller 1 fails, the router fails over to Controller 2. For purposes of a fast prototype, Controller 1 and Controller 2 were run as simple Camel-Mina services run from the command line (external to the ESB) so they were easy to kill to demonstrate failover. In practice, additional Fuse ESB containers would be ideal to host controller services.


Software Requirements:

Installing Fuse

Download and Install JBoss Fuse

Project Layout

There are three modules: applications, controllers and router. Here is the layout in the file system:

  • JBoss Fuse - RouterDemo
    • client
    • controller
    • router

Start Fuse ESB

Run the command bin/fuse in the root directory of JBoss Fuse. Here is what the console looks like:

Console Image

Building the projects

Launch a new terminal session, and run the command mvn clean install in the root directory of top level project. Make sure all projects build successfully.

Deploy the Router into Fuse ESB

In the JBoss Fuse terminal session run the command:

JBossFuse:karaf@root> features:install camel-mina
JBossFuse:karaf@root> features:install camel-groovy
JBossFuse:karaf@root> osgi:install -s mvn:com.fusesource.demo/proxy-router/1.0.0-SNAPSHOT

You should see output like this, with a Bundle ID generated by the deployment:

JBossFuse:karaf@root> osgi:install -s mvn:com.fusesource.demo/proxy-router/1.0.0-SNAPSHOT
Bundle ID: 225
JBossFuse:karaf@root>

Launch the Controllers

Open two new terminal sessions and switch to the root of the controllers project in both. In one session, execute this command to launch Controller 1:

controller$ mvn -P controller1

And in the other execute the command to launch Controller 2:

controller$ mvn -P controller2

Launch Client

Open a new terminal sessions and switch to the client directory. In the session, execute this command to launch the test Client application:

client$ mvn camel:run

You should see the Client sending and receiving messages like below. Notice the response has a element, that initially contains 'Controller 1'

17:44:47 INFO  Apache Camel 2.10.0.redhat-60024 (CamelContext: camel-1) started in 0.573 seconds
17:44:47 INFO  Sending message 1 with data: <data><messageNumber>1</messageNumber><timestamp>17:44:47.348</timestamp></data>
17:44:47 INFO  Received 1 message: <data><messageNumber>1</messageNumber><timestamp>17:44:47.348</timestamp><controller>Controller 1</controller></data>
17:44:48 INFO  Sending message 2 with data: <data><messageNumber>2</messageNumber><timestamp>17:44:48.335</timestamp></data>
17:44:48 INFO  Received 2 message: <data><messageNumber>2</messageNumber><timestamp>17:44:48.335</timestamp><controller>Controller 1</controller></data>
17:44:49 INFO  Sending message 3 with data: <data><messageNumber>3</messageNumber><timestamp>17:44:49.335</timestamp></data>
17:44:49 INFO  Received 3 message: <data><messageNumber>3</messageNumber><timestamp>17:44:49.335</timestamp><controller>Controller 1</controller></data>
17:44:50 INFO  Sending message 4 with data: <data><messageNumber>4</messageNumber><timestamp>17:44:50.334</timestamp></data>
17:44:50 INFO  Received 4 message: <data><messageNumber>4</messageNumber><timestamp>17:44:50.334</timestamp><controller>Controller 1</controller></data>
17:44:51 INFO  Sending message 5 with data: <data><messageNumber>5</messageNumber><timestamp>17:44:51.334</timestamp></data>
17:44:51 INFO  Received 5 message: <data><messageNumber>5</messageNumber><timestamp>17:44:51.334</timestamp><controller>Controller 1</controller></data>
17:44:52 INFO  Sending message 6 with data: <data><messageNumber>6</messageNumber><timestamp>17:44:52.334</timestamp></data>
17:44:52 INFO  Received 6 message: <data><messageNumber>6</messageNumber><timestamp>17:44:52.334</timestamp><controller>Controller 1</controller></data>

Kill the Controller 1 session any way you like, and you should see uninterrupted message flow, with Controller 2 handling the messages (note the changes to 'Controller 2' at message 12):

17:44:56 INFO  Sending message 10 with data: <data><messageNumber>10</messageNumber><timestamp>17:44:56.334</timestamp></data>
17:44:56 INFO  Received 10 message: <data><messageNumber>10</messageNumber><timestamp>17:44:56.334</timestamp><controller>Controller 1</controller></data>
17:44:57 INFO  Sending message 11 with data: <data><messageNumber>11</messageNumber><timestamp>17:44:57.335</timestamp></data>
17:44:57 INFO  Received 11 message: <data><messageNumber>11</messageNumber><timestamp>17:44:57.335</timestamp><controller>Controller 1</controller></data>
17:44:58 INFO  Sending message 12 with data: <data><messageNumber>12</messageNumber><timestamp>17:44:58.334</timestamp></data>
17:44:58 INFO  Received 12 message: <data><messageNumber>12</messageNumber><timestamp>17:44:58.334</timestamp><controller>Controller 2</controller></data>
17:44:59 INFO  Sending message 13 with data: <data><messageNumber>13</messageNumber><timestamp>17:44:59.334</timestamp></data>
17:44:59 INFO  Received 13 message: <data><messageNumber>13</messageNumber><timestamp>17:44:59.334</timestamp><controller>Controller 2</controller></data>

Restart Controller 1 and you’ll see it take control back from Controller 2 (this is user-defined behavior in the configuration of the failover-load balancer)

17:45:26 INFO  Sending message 40 with data: <data><messageNumber>40</messageNumber><timestamp>17:45:26.333</timestamp></data>
17:45:26 INFO  Received 40 message: <data><messageNumber>40</messageNumber><timestamp>17:45:26.333</timestamp><controller>Controller 2</controller></data>
17:45:27 INFO  Sending message 41 with data: <data><messageNumber>41</messageNumber><timestamp>17:45:27.334</timestamp></data>
17:45:27 INFO  Received 41 message: <data><messageNumber>41</messageNumber><timestamp>17:45:27.334</timestamp><controller>Controller 2</controller></data>
17:45:28 INFO  Sending message 42 with data: <data><messageNumber>42</messageNumber><timestamp>17:45:28.335</timestamp></data>
17:45:28 INFO  Received 42 message: <data><messageNumber>42</messageNumber><timestamp>17:45:28.335</timestamp><controller>Controller 1</controller></data>
17:45:29 INFO  Sending message 43 with data: <data><messageNumber>43</messageNumber><timestamp>17:45:29.335</timestamp></data>
17:45:29 INFO  Received 43 message: <data><messageNumber>43</messageNumber><timestamp>17:45:29.335</timestamp><controller>Controller 1</controller></data>
17:45:30 INFO  Sending message 44 with data: <data><messageNumber>44</messageNumber><timestamp>17:45:30.335</timestamp></data>
17:45:30 INFO  Received 44 message: <data><messageNumber>44</messageNumber><timestamp>17:45:30.335</timestamp><controller>Controller 1</controller></data>

Links to additional documentation

camel-example-tcpip-proxy's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.