Apache Camel in the Clouds!

riding your camel with fabric8

using JBoss Fuse 6.1 GA

Created by James Strachan / @jstrachan from Red Hat

Apache Camel

  • http://camel.apache.org/

Why Apache Camel?

  • Open source integration library
  • Simple lightweight, use in any JVM or application server
  • Connects to anything
    • 100s of components connecting to databases, file systems, messaging systems, big data, SaaS providers, social media, ...
  • Lots of tooling

Customer Experience

We've worked with lots of Fuse customers for many years

Here's what we've found:

  • Camel, CXF and Fuse rocks in development
  • very easy to get started and create small projects
  • can I haz more tooling?
  • need help scaling to 1000s of services and integration flows
  • need help moving integration solutions through Continuous Deployment pipeline

Our solution

3-4 years ago we started adding new open source code into Fuse to address these issues

In the Fuse product we refer to these features as Fuse Fabric

Red Hat insists on separating upstream community projects from product releases and distros:

  • Fedora / RHEL
  • WildFly / JBoss EAP
  • Tomcat / JBoss EWS
  • ServiceMix / JBoss Fuse

fabric8 is the new open source community project for the Fuse Fabric code in Fuse

its the extra stuff we've been adding to Fuse for years; just has its own name and upstream community project now ;)

What is fabric8?

fabric8 is an open source integration platform

http://fabric8.io/

  • designed to make it easy to deploy, manage and scale integration solutions
  • helps move integration solutions from dev -> test -> prod

What does fabric8 do?

  • provision, configure and manage services
  • perform incremental and rolling upgrades of changes
  • discovery and load balancing of services
  • elastic scaling of services

What is fabric8?

set of plugins for application containers

initially supports Karaf/ServiceMix/Fuse - (JBoss Fuse 6.1)

will also support Tomcat/WildFly/Vertx - (JBoss Fuse 6.2)

Architecture of fabric8

  • Profiles
  • Runtime Registry
  • Configuration Repository
  • Tooling

Profiles

a profile is a collection of containers so you can:

  • deploy
  • configure
  • manage
  • aggregate metrics

makes working with a collection of containers DRY

So what is a Profile?

at the implementation level a profile is a folder of text files

  • defines the code to run (bundles, wars, features etc)
  • defines the config (OSGi Config Admin, properties, XML files)
  • a profile can inherit from one or more other profiles
    • can use inheritance and overriding to keep configurations DRY

Runtime Registry

  • for discovery, load balancing, partitioning, master/slave election, tooling
  • based on Apache ZooKeeper
  • for high availability run 3, 5 or 7 ZooKeeper servers to prevent split brain and deal with failure
  • in development and testing only 1 JVM is required!

Configuration Repository

  • stores all configuration (and profile configuration)
  • uses git so all changes are audited and versioned
  • easy to work with Continuous Integration / Continuous Deployment systems
  • highly available (each machine has a copy of all history)

fabric8 tooling?

  • command line shell
    • same shell as JBoss Fuse / ServiceMix / Karaf
  • eclipse
    • used to be called Fuse IDE
    • from Fuse 6.1 its a plugin inside JBDS
  • maven plugin
  • web console
    • awesome web console based on hawtio

hawtio

http://hawt.io/

  • open source HTML5 web console for all your Java middleware
  • based on AngularJS, Bootstrap and JavaScript (using TypeScript to generate it)
  • uses Jolokia on server to access JMX over HTTP/JSON
  • hawtio has a Google Chrome Extension to easily connect to any container
  • hawtio has many plugins for Fuse, fabric8, camel, activemq, karaf, JMX and many other things
  • hawtio is the Management Console in JBoss Fuse 6.1 onwards

Demo Time!

Developer commands

mvn fabric8:deploy

fabric:watch *

dev:watch *

Any questions?

http://fabric8.io/

http://hawt.io/

@jstrachan