PUBLIC PRESENTATION | CLAUS IBSEN1
Microservices with Apache Camel
Claus Ibsen (@davsclaus)
Principal Software Engineer, Red Hat
PUBLIC PRESENTATION | CLAUS IBSEN2
Agenda
● What is Apache Camel?
● A little Example
● Microservice Demo
● Standalone
● with Docker
● with OpenShift 3 / Kubernetes
● More Information
PUBLIC PRESENTATION | CLAUS IBSEN3
Your Speaker
● Principal Software Engineer at Red Hat
● Apache Camel
● 7 years working with Camel
● Author of Camel in Action book
● Contact
● EMail: cibsen@redhat.com
● Twitter: @davsclaus
● Blog: http://davsclaus.com
● Linkedin: http://www.linkedin.com/in/davsclaus
PUBLIC PRESENTATION | CLAUS IBSEN4
Agenda
● What is Apache Camel?
● A little Example
● Microservice Demo
● Standalone
● with Docker
● with OpenShift 3 / Kubernetes
● More Information
PUBLIC PRESENTATION | CLAUS IBSEN5
What is Apache Camel?
● Quote from the website
PUBLIC PRESENTATION | CLAUS IBSEN6
What is Apache Camel?
● Why do we need integration?
● Critical for your business to integrate
● Why Integration Framework?
● Framework do the heavy lifting
● You can focus on business problem
● Not "reinventing the wheel"
PUBLIC PRESENTATION | CLAUS IBSEN7
What is Apache Camel?
● What is Enterprise Integration Patterns?
It's a book
PUBLIC PRESENTATION | CLAUS IBSEN8
What is Apache Camel?
● Enterprise Integration Patterns
http://camel.apache.org/eip
PUBLIC PRESENTATION | CLAUS IBSEN9
What is Apache Camel?
● EIP - Content Based Router
PUBLIC PRESENTATION | CLAUS IBSEN10
What is Apache Camel?
from newOrder
PUBLIC PRESENTATION | CLAUS IBSEN11
What is Apache Camel?
from newOrder
choice
PUBLIC PRESENTATION | CLAUS IBSEN12
What is Apache Camel?
from newOrder
choice
when isWidget to widget
PUBLIC PRESENTATION | CLAUS IBSEN13
What is Apache Camel?
from newOrder
choice
when isWidget to widget
otherwise to gadget
PUBLIC PRESENTATION | CLAUS IBSEN14
What is Apache Camel?
from(newOrder)
choice
when(isWidget) to(widget)
otherwise to(gadget)
PUBLIC PRESENTATION | CLAUS IBSEN15
What is Apache Camel?
from(newOrder)
.choice()
.when(isWidget).to(widget)
.otherwise().to(gadget);
PUBLIC PRESENTATION | CLAUS IBSEN16
What is Apache Camel?
Endpoint newOrder = endpoint("activemq:queue:newOrder");
from(newOrder)
.choice()
.when(isWidget).to(widget)
.otherwise().to(gadget);
PUBLIC PRESENTATION | CLAUS IBSEN17
What is Apache Camel?
Endpoint newOrder = endpoint("activemq:queue:newOrder");
Predicate isWidget = xpath("/order/product = 'widget'");
from(newOrder)
.choice()
.when(isWidget).to(widget)
.otherwise().to(gadget);
PUBLIC PRESENTATION | CLAUS IBSEN18
What is Apache Camel?
Endpoint newOrder = endpoint("activemq:queue:newOrder");
Predicate isWidget = xpath("/order/product = 'widget'");
Endpoint widget = endpoint("activemq:queue:widget");
Endpoint gadget = endpoint("activemq:queue:gadget");
from(newOrder)
.choice()
.when(isWidget).to(widget)
.otherwise().to(gadget);
PUBLIC PRESENTATION | CLAUS IBSEN19
What is Apache Camel?
● Java Code
public void configure() throws Exception {
Endpoint newOrder = endpoint("activemq:queue:newOrder");
Predicate isWidget = xpath("/order/product = 'widget'");
Endpoint widget = endpoint("activemq:queue:widget");
Endpoint gadget = endpoint("activemq:queue:gadget");
from(newOrder)
.choice()
.when(isWidget).to(widget)
.otherwise().to(gadget)
.end();
}
PUBLIC PRESENTATION | CLAUS IBSEN20
What is Apache Camel?
● Java Code
import org.apache.camel.Endpoint;
import org.apache.camel.Predicate;
import org.apache.camel.builder.RouteBuilder;
public class MyRoute extends RouteBuilder {
public void configure() throws Exception {
Endpoint newOrder = endpoint("activemq:queue:newOrder");
Predicate isWidget = xpath("/order/product = 'widget'");
Endpoint widget = endpoint("activemq:queue:widget");
Endpoint gadget = endpoint("activemq:queue:gadget");
from(newOrder)
.choice()
.when(isWidget).to(widget)
.otherwise().to(gadget)
.end();
}
}
PUBLIC PRESENTATION | CLAUS IBSEN21
What is Apache Camel?
● Camel Java DSL
import org.apache.camel.builder.RouteBuilder;
public class MyRoute extends RouteBuilder {
public void configure() throws Exception {
from("activemq:queue:newOrder")
.choice()
.when(xpath("/order/product = 'widget'"))
.to("activemq:queue:widget")
.otherwise()
.to("activemq:queue:gadget")
.end();
}
}
PUBLIC PRESENTATION | CLAUS IBSEN22
What is Apache Camel?
● Camel XML DSL
<route>
<from uri="activemq:queue:newOrder"/>
<choice>
<when>
<xpath>/order/product = 'widget'</xpath>
<to uri="activemq:queue:widget"/>
</when>
<otherwise>
<to uri="activemq:queue:gadget"/>
</otherwise>
</choice>
</route>
PUBLIC PRESENTATION | CLAUS IBSEN23
What is Apache Camel?
● Endpoint as URIs
<route>
<from uri="file:inbox/orders"/>
<choice>
<when>
<xpath>/order/product = 'widget'</xpath>
<to uri="activemq:queue:widget"/>
</when>
<otherwise>
<to uri="activemq:queue:gadget"/>
</otherwise>
</choice>
</route>
use file instead
PUBLIC PRESENTATION | CLAUS IBSEN24
What is Apache Camel?
● Endpoint as URIs
<route>
<from uri="file:inbox/orders?delete=true"/>
<choice>
<when>
<xpath>/order/product = 'widget'</xpath>
<to uri="activemq:queue:widget"/>
</when>
<otherwise>
<to uri="activemq:queue:gadget"/>
</otherwise>
</choice>
</route>
parameters
PUBLIC PRESENTATION | CLAUS IBSEN25
Standard Java or XML
● Java DSL is just Java
PUBLIC PRESENTATION | CLAUS IBSEN26
Standard Java or XML
● XML DSL is just XML
● … with XSD schema for validation/tooling
PUBLIC PRESENTATION | CLAUS IBSEN27
What is Apache Camel?
● Camel's Architecture
PUBLIC PRESENTATION | CLAUS IBSEN28
What is Apache Camel?
150+ Components
PUBLIC PRESENTATION | CLAUS IBSEN29
What is Apache Camel?
150+ Components
PUBLIC PRESENTATION | CLAUS IBSEN30
What is Apache Camel?
● Summary
● Integration Framework
● Enterprise Integration Patterns (EIP)
● Routing (using DSL)
● Easy Configuration (endpoint as uri's)
● Just Java or XML code
● No Container Dependency
● A lot of components
PUBLIC PRESENTATION | CLAUS IBSEN31
Agenda
● What is Apache Camel?
● A little Example
● Microservice Demo
● Standalone
● with Docker
● with OpenShift 3 / Kubernetes
● More Information
PUBLIC PRESENTATION | CLAUS IBSEN32
A Little Example
● File Copier Example
PUBLIC PRESENTATION | CLAUS IBSEN33
A Little Example
● File Copier Example
PUBLIC PRESENTATION | CLAUS IBSEN34
A Little Example
● File Copier Example
PUBLIC PRESENTATION | CLAUS IBSEN35
A Little Example
● File Copier Example
PUBLIC PRESENTATION | CLAUS IBSEN36
A Little Example
● File Copier Example
PUBLIC PRESENTATION | CLAUS IBSEN37
Agenda
● What is Apache Camel?
● A little Example
● Microservice Demo
● Standalone
● with Docker
● with OpenShift 3 / Kubernetes
● More Information
PUBLIC PRESENTATION | CLAUS IBSEN38
Microservice Demo - Overview
● camel-archetype-cdi camel-archetype-web
Java Standalone Apache Tomcat
HTTP 8080
from timer
to http
to log
from http
choice
setBody
PUBLIC PRESENTATION | CLAUS IBSEN39
Creating new Camel Projects
● Using Command Shell
● From Eclipse
PUBLIC PRESENTATION | CLAUS IBSEN40
Creating new Camel Projects
● ... or
JBoss
Forge
PUBLIC PRESENTATION | CLAUS IBSEN41
Creating new Camel Projects
● Maven Archetypes
Archetypes Archetypes
camel-archetype-activemq camel-archetype-groovy
camel-archetype-api-component camel-archetype-java
camel-archetype-blueprint camel-archetype-scala
camel-archetype-cdi camel-archetype-scr
camel-archetype-component camel-archetype-spring
camel-archetype-cxf-code-first-blueprint camel-archetype-spring-boot
camel-archetype-cxf-contract-first-blueprint camel-archetype-spring-dm
camel-archetype-dataformat camel-archetype-web
PUBLIC PRESENTATION | CLAUS IBSEN42
Creating new Camel Projects
● camel-archetype-cdi
To run from CLI
mvn clean install
exec:java
PUBLIC PRESENTATION | CLAUS IBSEN43
Creating new Camel Projects
● add http component
Adds the chosen component
to the pom.xml file.
CMD + ALT
4
PUBLIC PRESENTATION | CLAUS IBSEN44
Creating new Camel Projects
● add change route to call http://localhost:8080
PUBLIC PRESENTATION | CLAUS IBSEN45
Creating new Camel Projects
● add change bean to return a name
PUBLIC PRESENTATION | CLAUS IBSEN46
Creating new Camel Projects
● camel-archetype-web
To run from CLI
mvn clean install
jetty:run
PUBLIC PRESENTATION | CLAUS IBSEN47
Microservice Demo - Overview
● camel-archetype-cdi camel-archetype-web
Java Standalone Apache Tomcat
HTTP 8080
from timer
to http
to log
from http
choice
setBody
We are ready to run standalone
PUBLIC PRESENTATION | CLAUS IBSEN48
Running Standalone
● camel-archetype-web
● Start Apache Tomcat with bin/cataline run
● Copy the .war to Tomcat deploy folder
PUBLIC PRESENTATION | CLAUS IBSEN49
Running Standalone
● camel-archetype-cdi
● mvn install exec:java
PUBLIC PRESENTATION | CLAUS IBSEN50
Monitor using hawtio embedded in Tomcat
● Copy hawtio.war to Tomcat deploy folder
PUBLIC PRESENTATION | CLAUS IBSEN51
Agenda
● What is Apache Camel?
● A little Example
● Microservice Demo
● Standalone
● with Docker
● with OpenShift 3 / Kubernetes
● More Information
PUBLIC PRESENTATION | CLAUS IBSEN52
Camel and Docker
● Dockerizing your Camel Projects
● Using Roland Huss's Docker Maven Plugin
● https://github.com/rhuss/docker-maven-plugin
.. by manually adding to pom.xml and configure
● ... but we use the Forge
PUBLIC PRESENTATION | CLAUS IBSEN53
Camel and Docker
● Dockerizing your Camel Projects with JBoss Forge
● From CLI Add FORGE_HOME/bin to
$PATH
PUBLIC PRESENTATION | CLAUS IBSEN54
Camel and Docker
● Dockerizing your Camel Projects with JBoss Forge
● From Eclipse
IDEA
NetBeans
● ... and web
CMD + ALT
4
Sorry I only have an old screenshot of forge-web
PUBLIC PRESENTATION | CLAUS IBSEN55
Camel and Docker
● Build Docker Containers
● mvn clean install docker:build
● ... Images now in your local docker repository
camel-archetype-cdi
camel-archetype-web
docker-maven-plugin
uses
$DOCKER_HOST
Fabric8 w/ OpenShift 3:
DOCKER_HOST="tcp://vagrant.local:2375"
Boot2Docker:
DOCKER_HOST="tcp://192.168.59.105:2375"
PUBLIC PRESENTATION | CLAUS IBSEN56
Camel and Docker
● Run Docker Containers
● docker run -it -p 8080:8080 -p 8778:8778
172.30.111.183:5000/fabric8/myweb:1.0-SNAPSHOT
The 10.000$$$ Docker Question
What the f$QRC#%A%%EG
is the IP address of the container
8080 = Tomcat
8778 = Jolokia
PUBLIC PRESENTATION | CLAUS IBSEN57
Camel and Docker
● What is the IP Address of the Docker Container
PUBLIC PRESENTATION | CLAUS IBSEN58
Camel and Docker
● camel-archetype-cdi
● I would need to change the hostname to
the docker assigned IP address
PUBLIC PRESENTATION | CLAUS IBSEN59
Camel and Docker
● camel-archetype-cdi
● .. and then build the docker image
● And then run the docker image
● docker run -it 172.30.111.183:5000/fabric8/mycdi:1.0-
SNAPSHOT
PUBLIC PRESENTATION | CLAUS IBSEN60
Camel and Docker
● Pheeew isn't this easier?
Yes !!!
PUBLIC PRESENTATION | CLAUS IBSEN61
Agenda
● What is Apache Camel?
● A little Example
● Microservice Demo
● Standalone
● with Docker
● with OpenShift 3 / Kubernetes
● More Information
PUBLIC PRESENTATION | CLAUS IBSEN62
Microservices Demo - Recap
● camel-archetype-cdi camel-archetype-web
Java Standalone Apache Tomcat
HTTP 8080
from timer
to http
to log
from http
choice
setBody
PUBLIC PRESENTATION | CLAUS IBSEN63
Microservices Demo - Use Service
● camel-archetype-cdi camel-archetype-web
Java Standalone Apache Tomcat
from timer
to http
to log
from http
choice
setBody
Service
Kubernetes
Service
PUBLIC PRESENTATION | CLAUS IBSEN64
What is a Kubernetes Service
● Kubernetes Service
http://fabric8.io/guide/services.html
PUBLIC PRESENTATION | CLAUS IBSEN65
Define Kubernetes Service
● Define in pom.xml in <properties>
Apache Tomcat
from http
choice
setBody
Service
Container Port = Inside Docker Container
(e.g. the port of Apache Tomcat)
Service Port = Outside
Consumers of Service to use
Name of service
PUBLIC PRESENTATION | CLAUS IBSEN66
Define Kubernetes Service
● ... generates into kubernetes.json
using fabric8:json plugin
Apache Tomcat
from http
choice
setBody
Service
PUBLIC PRESENTATION | CLAUS IBSEN67
About using Kubernetes Service
Discover Kubernetes Services
Java Standalone
from timer
to http
to log
PUBLIC PRESENTATION | CLAUS IBSEN68
Client - Use Kubernetes Service
● Use {{service:name}} in Camel
... you can use default values
{{service:name:host:port}}
Java Standalone
from timer
to http
to log
host:port would be default
if service is not discovered
PUBLIC PRESENTATION | CLAUS IBSEN69
Microservice Demo - Ready for launch!
● camel-archetype-cdi camel-archetype-web
Java Standalone Apache Tomcat
from timer
to http
to log
from http
choice
setBody
Service
Service defined
Ready to deploy to Kubernetes
PUBLIC PRESENTATION | CLAUS IBSEN70
Deploy - camel-archetype-web
● camel-archetype-web
● mvn clean install docker:build
fabric8:apply Apache Tomcat
from http
choice
setBody
Service
PUBLIC PRESENTATION | CLAUS IBSEN71
Deploy - camel-archetype-cdi
● camel-archetype-cdi
● mvn clean install docker:build
fabric8:apply Java Standalone
from timer
to http
to log
PUBLIC PRESENTATION | CLAUS IBSEN72
fabric8 web console
● http://fabric8.vagrant.local
● Easy by configuring the replication size
PUBLIC PRESENTATION | CLAUS IBSEN73
OpenShift 3 CLI
● osc get pods
docker CLI is also possible
docker images
docker ps
PUBLIC PRESENTATION | CLAUS IBSEN74
OpenShift 3 CLI
● osc get services
PUBLIC PRESENTATION | CLAUS IBSEN75
OpenShift 3 CLI
● osc logs -f <pod-name>
PUBLIC PRESENTATION | CLAUS IBSEN76
Scaling up / down
● ... by changing replication size on controller
PUBLIC PRESENTATION | CLAUS IBSEN77
Scaling up / down
● web console shows we now have 3 pods
PUBLIC PRESENTATION | CLAUS IBSEN78
Scaling up / down
● and the camel-archetype-cli pod is load balancing the
mycoolservice among the 3 live pods
PUBLIC PRESENTATION | CLAUS IBSEN79
Agenda
● What is Apache Camel?
● A little Example
● Microservice Demo
● Standalone
● with Docker
● with OpenShift 3 / Kubernetes
● More Information
PUBLIC PRESENTATION | CLAUS IBSEN80
Where do I get more information?
● Apache Camel Microservices
● http://camel.apache.org/camel-boot
● Fabric8
● http://fabric8.io
● chat room #fabric-8 on freenode
● OpenShift 3
● https://github.com/openshift/origin
● Kubernetes
● https://github.com/googlecloudplatform/kubernetes
PUBLIC PRESENTATION | CLAUS IBSEN81
Any Questions ?
● Contact
● EMail: cibsen@redhat.com / claus.ibsen@gmail.com
● Twitter: @davsclaus
● Blog: http://davsclaus.com
● Linkedin: http://www.linkedin.com/in/davsclaus

Microservices with Apache Camel

  • 1.
    PUBLIC PRESENTATION |CLAUS IBSEN1 Microservices with Apache Camel Claus Ibsen (@davsclaus) Principal Software Engineer, Red Hat
  • 2.
    PUBLIC PRESENTATION |CLAUS IBSEN2 Agenda ● What is Apache Camel? ● A little Example ● Microservice Demo ● Standalone ● with Docker ● with OpenShift 3 / Kubernetes ● More Information
  • 3.
    PUBLIC PRESENTATION |CLAUS IBSEN3 Your Speaker ● Principal Software Engineer at Red Hat ● Apache Camel ● 7 years working with Camel ● Author of Camel in Action book ● Contact ● EMail: cibsen@redhat.com ● Twitter: @davsclaus ● Blog: http://davsclaus.com ● Linkedin: http://www.linkedin.com/in/davsclaus
  • 4.
    PUBLIC PRESENTATION |CLAUS IBSEN4 Agenda ● What is Apache Camel? ● A little Example ● Microservice Demo ● Standalone ● with Docker ● with OpenShift 3 / Kubernetes ● More Information
  • 5.
    PUBLIC PRESENTATION |CLAUS IBSEN5 What is Apache Camel? ● Quote from the website
  • 6.
    PUBLIC PRESENTATION |CLAUS IBSEN6 What is Apache Camel? ● Why do we need integration? ● Critical for your business to integrate ● Why Integration Framework? ● Framework do the heavy lifting ● You can focus on business problem ● Not "reinventing the wheel"
  • 7.
    PUBLIC PRESENTATION |CLAUS IBSEN7 What is Apache Camel? ● What is Enterprise Integration Patterns? It's a book
  • 8.
    PUBLIC PRESENTATION |CLAUS IBSEN8 What is Apache Camel? ● Enterprise Integration Patterns http://camel.apache.org/eip
  • 9.
    PUBLIC PRESENTATION |CLAUS IBSEN9 What is Apache Camel? ● EIP - Content Based Router
  • 10.
    PUBLIC PRESENTATION |CLAUS IBSEN10 What is Apache Camel? from newOrder
  • 11.
    PUBLIC PRESENTATION |CLAUS IBSEN11 What is Apache Camel? from newOrder choice
  • 12.
    PUBLIC PRESENTATION |CLAUS IBSEN12 What is Apache Camel? from newOrder choice when isWidget to widget
  • 13.
    PUBLIC PRESENTATION |CLAUS IBSEN13 What is Apache Camel? from newOrder choice when isWidget to widget otherwise to gadget
  • 14.
    PUBLIC PRESENTATION |CLAUS IBSEN14 What is Apache Camel? from(newOrder) choice when(isWidget) to(widget) otherwise to(gadget)
  • 15.
    PUBLIC PRESENTATION |CLAUS IBSEN15 What is Apache Camel? from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget);
  • 16.
    PUBLIC PRESENTATION |CLAUS IBSEN16 What is Apache Camel? Endpoint newOrder = endpoint("activemq:queue:newOrder"); from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget);
  • 17.
    PUBLIC PRESENTATION |CLAUS IBSEN17 What is Apache Camel? Endpoint newOrder = endpoint("activemq:queue:newOrder"); Predicate isWidget = xpath("/order/product = 'widget'"); from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget);
  • 18.
    PUBLIC PRESENTATION |CLAUS IBSEN18 What is Apache Camel? Endpoint newOrder = endpoint("activemq:queue:newOrder"); Predicate isWidget = xpath("/order/product = 'widget'"); Endpoint widget = endpoint("activemq:queue:widget"); Endpoint gadget = endpoint("activemq:queue:gadget"); from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget);
  • 19.
    PUBLIC PRESENTATION |CLAUS IBSEN19 What is Apache Camel? ● Java Code public void configure() throws Exception { Endpoint newOrder = endpoint("activemq:queue:newOrder"); Predicate isWidget = xpath("/order/product = 'widget'"); Endpoint widget = endpoint("activemq:queue:widget"); Endpoint gadget = endpoint("activemq:queue:gadget"); from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget) .end(); }
  • 20.
    PUBLIC PRESENTATION |CLAUS IBSEN20 What is Apache Camel? ● Java Code import org.apache.camel.Endpoint; import org.apache.camel.Predicate; import org.apache.camel.builder.RouteBuilder; public class MyRoute extends RouteBuilder { public void configure() throws Exception { Endpoint newOrder = endpoint("activemq:queue:newOrder"); Predicate isWidget = xpath("/order/product = 'widget'"); Endpoint widget = endpoint("activemq:queue:widget"); Endpoint gadget = endpoint("activemq:queue:gadget"); from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget) .end(); } }
  • 21.
    PUBLIC PRESENTATION |CLAUS IBSEN21 What is Apache Camel? ● Camel Java DSL import org.apache.camel.builder.RouteBuilder; public class MyRoute extends RouteBuilder { public void configure() throws Exception { from("activemq:queue:newOrder") .choice() .when(xpath("/order/product = 'widget'")) .to("activemq:queue:widget") .otherwise() .to("activemq:queue:gadget") .end(); } }
  • 22.
    PUBLIC PRESENTATION |CLAUS IBSEN22 What is Apache Camel? ● Camel XML DSL <route> <from uri="activemq:queue:newOrder"/> <choice> <when> <xpath>/order/product = 'widget'</xpath> <to uri="activemq:queue:widget"/> </when> <otherwise> <to uri="activemq:queue:gadget"/> </otherwise> </choice> </route>
  • 23.
    PUBLIC PRESENTATION |CLAUS IBSEN23 What is Apache Camel? ● Endpoint as URIs <route> <from uri="file:inbox/orders"/> <choice> <when> <xpath>/order/product = 'widget'</xpath> <to uri="activemq:queue:widget"/> </when> <otherwise> <to uri="activemq:queue:gadget"/> </otherwise> </choice> </route> use file instead
  • 24.
    PUBLIC PRESENTATION |CLAUS IBSEN24 What is Apache Camel? ● Endpoint as URIs <route> <from uri="file:inbox/orders?delete=true"/> <choice> <when> <xpath>/order/product = 'widget'</xpath> <to uri="activemq:queue:widget"/> </when> <otherwise> <to uri="activemq:queue:gadget"/> </otherwise> </choice> </route> parameters
  • 25.
    PUBLIC PRESENTATION |CLAUS IBSEN25 Standard Java or XML ● Java DSL is just Java
  • 26.
    PUBLIC PRESENTATION |CLAUS IBSEN26 Standard Java or XML ● XML DSL is just XML ● … with XSD schema for validation/tooling
  • 27.
    PUBLIC PRESENTATION |CLAUS IBSEN27 What is Apache Camel? ● Camel's Architecture
  • 28.
    PUBLIC PRESENTATION |CLAUS IBSEN28 What is Apache Camel? 150+ Components
  • 29.
    PUBLIC PRESENTATION |CLAUS IBSEN29 What is Apache Camel? 150+ Components
  • 30.
    PUBLIC PRESENTATION |CLAUS IBSEN30 What is Apache Camel? ● Summary ● Integration Framework ● Enterprise Integration Patterns (EIP) ● Routing (using DSL) ● Easy Configuration (endpoint as uri's) ● Just Java or XML code ● No Container Dependency ● A lot of components
  • 31.
    PUBLIC PRESENTATION |CLAUS IBSEN31 Agenda ● What is Apache Camel? ● A little Example ● Microservice Demo ● Standalone ● with Docker ● with OpenShift 3 / Kubernetes ● More Information
  • 32.
    PUBLIC PRESENTATION |CLAUS IBSEN32 A Little Example ● File Copier Example
  • 33.
    PUBLIC PRESENTATION |CLAUS IBSEN33 A Little Example ● File Copier Example
  • 34.
    PUBLIC PRESENTATION |CLAUS IBSEN34 A Little Example ● File Copier Example
  • 35.
    PUBLIC PRESENTATION |CLAUS IBSEN35 A Little Example ● File Copier Example
  • 36.
    PUBLIC PRESENTATION |CLAUS IBSEN36 A Little Example ● File Copier Example
  • 37.
    PUBLIC PRESENTATION |CLAUS IBSEN37 Agenda ● What is Apache Camel? ● A little Example ● Microservice Demo ● Standalone ● with Docker ● with OpenShift 3 / Kubernetes ● More Information
  • 38.
    PUBLIC PRESENTATION |CLAUS IBSEN38 Microservice Demo - Overview ● camel-archetype-cdi camel-archetype-web Java Standalone Apache Tomcat HTTP 8080 from timer to http to log from http choice setBody
  • 39.
    PUBLIC PRESENTATION |CLAUS IBSEN39 Creating new Camel Projects ● Using Command Shell ● From Eclipse
  • 40.
    PUBLIC PRESENTATION |CLAUS IBSEN40 Creating new Camel Projects ● ... or JBoss Forge
  • 41.
    PUBLIC PRESENTATION |CLAUS IBSEN41 Creating new Camel Projects ● Maven Archetypes Archetypes Archetypes camel-archetype-activemq camel-archetype-groovy camel-archetype-api-component camel-archetype-java camel-archetype-blueprint camel-archetype-scala camel-archetype-cdi camel-archetype-scr camel-archetype-component camel-archetype-spring camel-archetype-cxf-code-first-blueprint camel-archetype-spring-boot camel-archetype-cxf-contract-first-blueprint camel-archetype-spring-dm camel-archetype-dataformat camel-archetype-web
  • 42.
    PUBLIC PRESENTATION |CLAUS IBSEN42 Creating new Camel Projects ● camel-archetype-cdi To run from CLI mvn clean install exec:java
  • 43.
    PUBLIC PRESENTATION |CLAUS IBSEN43 Creating new Camel Projects ● add http component Adds the chosen component to the pom.xml file. CMD + ALT 4
  • 44.
    PUBLIC PRESENTATION |CLAUS IBSEN44 Creating new Camel Projects ● add change route to call http://localhost:8080
  • 45.
    PUBLIC PRESENTATION |CLAUS IBSEN45 Creating new Camel Projects ● add change bean to return a name
  • 46.
    PUBLIC PRESENTATION |CLAUS IBSEN46 Creating new Camel Projects ● camel-archetype-web To run from CLI mvn clean install jetty:run
  • 47.
    PUBLIC PRESENTATION |CLAUS IBSEN47 Microservice Demo - Overview ● camel-archetype-cdi camel-archetype-web Java Standalone Apache Tomcat HTTP 8080 from timer to http to log from http choice setBody We are ready to run standalone
  • 48.
    PUBLIC PRESENTATION |CLAUS IBSEN48 Running Standalone ● camel-archetype-web ● Start Apache Tomcat with bin/cataline run ● Copy the .war to Tomcat deploy folder
  • 49.
    PUBLIC PRESENTATION |CLAUS IBSEN49 Running Standalone ● camel-archetype-cdi ● mvn install exec:java
  • 50.
    PUBLIC PRESENTATION |CLAUS IBSEN50 Monitor using hawtio embedded in Tomcat ● Copy hawtio.war to Tomcat deploy folder
  • 51.
    PUBLIC PRESENTATION |CLAUS IBSEN51 Agenda ● What is Apache Camel? ● A little Example ● Microservice Demo ● Standalone ● with Docker ● with OpenShift 3 / Kubernetes ● More Information
  • 52.
    PUBLIC PRESENTATION |CLAUS IBSEN52 Camel and Docker ● Dockerizing your Camel Projects ● Using Roland Huss's Docker Maven Plugin ● https://github.com/rhuss/docker-maven-plugin .. by manually adding to pom.xml and configure ● ... but we use the Forge
  • 53.
    PUBLIC PRESENTATION |CLAUS IBSEN53 Camel and Docker ● Dockerizing your Camel Projects with JBoss Forge ● From CLI Add FORGE_HOME/bin to $PATH
  • 54.
    PUBLIC PRESENTATION |CLAUS IBSEN54 Camel and Docker ● Dockerizing your Camel Projects with JBoss Forge ● From Eclipse IDEA NetBeans ● ... and web CMD + ALT 4 Sorry I only have an old screenshot of forge-web
  • 55.
    PUBLIC PRESENTATION |CLAUS IBSEN55 Camel and Docker ● Build Docker Containers ● mvn clean install docker:build ● ... Images now in your local docker repository camel-archetype-cdi camel-archetype-web docker-maven-plugin uses $DOCKER_HOST Fabric8 w/ OpenShift 3: DOCKER_HOST="tcp://vagrant.local:2375" Boot2Docker: DOCKER_HOST="tcp://192.168.59.105:2375"
  • 56.
    PUBLIC PRESENTATION |CLAUS IBSEN56 Camel and Docker ● Run Docker Containers ● docker run -it -p 8080:8080 -p 8778:8778 172.30.111.183:5000/fabric8/myweb:1.0-SNAPSHOT The 10.000$$$ Docker Question What the f$QRC#%A%%EG is the IP address of the container 8080 = Tomcat 8778 = Jolokia
  • 57.
    PUBLIC PRESENTATION |CLAUS IBSEN57 Camel and Docker ● What is the IP Address of the Docker Container
  • 58.
    PUBLIC PRESENTATION |CLAUS IBSEN58 Camel and Docker ● camel-archetype-cdi ● I would need to change the hostname to the docker assigned IP address
  • 59.
    PUBLIC PRESENTATION |CLAUS IBSEN59 Camel and Docker ● camel-archetype-cdi ● .. and then build the docker image ● And then run the docker image ● docker run -it 172.30.111.183:5000/fabric8/mycdi:1.0- SNAPSHOT
  • 60.
    PUBLIC PRESENTATION |CLAUS IBSEN60 Camel and Docker ● Pheeew isn't this easier? Yes !!!
  • 61.
    PUBLIC PRESENTATION |CLAUS IBSEN61 Agenda ● What is Apache Camel? ● A little Example ● Microservice Demo ● Standalone ● with Docker ● with OpenShift 3 / Kubernetes ● More Information
  • 62.
    PUBLIC PRESENTATION |CLAUS IBSEN62 Microservices Demo - Recap ● camel-archetype-cdi camel-archetype-web Java Standalone Apache Tomcat HTTP 8080 from timer to http to log from http choice setBody
  • 63.
    PUBLIC PRESENTATION |CLAUS IBSEN63 Microservices Demo - Use Service ● camel-archetype-cdi camel-archetype-web Java Standalone Apache Tomcat from timer to http to log from http choice setBody Service Kubernetes Service
  • 64.
    PUBLIC PRESENTATION |CLAUS IBSEN64 What is a Kubernetes Service ● Kubernetes Service http://fabric8.io/guide/services.html
  • 65.
    PUBLIC PRESENTATION |CLAUS IBSEN65 Define Kubernetes Service ● Define in pom.xml in <properties> Apache Tomcat from http choice setBody Service Container Port = Inside Docker Container (e.g. the port of Apache Tomcat) Service Port = Outside Consumers of Service to use Name of service
  • 66.
    PUBLIC PRESENTATION |CLAUS IBSEN66 Define Kubernetes Service ● ... generates into kubernetes.json using fabric8:json plugin Apache Tomcat from http choice setBody Service
  • 67.
    PUBLIC PRESENTATION |CLAUS IBSEN67 About using Kubernetes Service Discover Kubernetes Services Java Standalone from timer to http to log
  • 68.
    PUBLIC PRESENTATION |CLAUS IBSEN68 Client - Use Kubernetes Service ● Use {{service:name}} in Camel ... you can use default values {{service:name:host:port}} Java Standalone from timer to http to log host:port would be default if service is not discovered
  • 69.
    PUBLIC PRESENTATION |CLAUS IBSEN69 Microservice Demo - Ready for launch! ● camel-archetype-cdi camel-archetype-web Java Standalone Apache Tomcat from timer to http to log from http choice setBody Service Service defined Ready to deploy to Kubernetes
  • 70.
    PUBLIC PRESENTATION |CLAUS IBSEN70 Deploy - camel-archetype-web ● camel-archetype-web ● mvn clean install docker:build fabric8:apply Apache Tomcat from http choice setBody Service
  • 71.
    PUBLIC PRESENTATION |CLAUS IBSEN71 Deploy - camel-archetype-cdi ● camel-archetype-cdi ● mvn clean install docker:build fabric8:apply Java Standalone from timer to http to log
  • 72.
    PUBLIC PRESENTATION |CLAUS IBSEN72 fabric8 web console ● http://fabric8.vagrant.local ● Easy by configuring the replication size
  • 73.
    PUBLIC PRESENTATION |CLAUS IBSEN73 OpenShift 3 CLI ● osc get pods docker CLI is also possible docker images docker ps
  • 74.
    PUBLIC PRESENTATION |CLAUS IBSEN74 OpenShift 3 CLI ● osc get services
  • 75.
    PUBLIC PRESENTATION |CLAUS IBSEN75 OpenShift 3 CLI ● osc logs -f <pod-name>
  • 76.
    PUBLIC PRESENTATION |CLAUS IBSEN76 Scaling up / down ● ... by changing replication size on controller
  • 77.
    PUBLIC PRESENTATION |CLAUS IBSEN77 Scaling up / down ● web console shows we now have 3 pods
  • 78.
    PUBLIC PRESENTATION |CLAUS IBSEN78 Scaling up / down ● and the camel-archetype-cli pod is load balancing the mycoolservice among the 3 live pods
  • 79.
    PUBLIC PRESENTATION |CLAUS IBSEN79 Agenda ● What is Apache Camel? ● A little Example ● Microservice Demo ● Standalone ● with Docker ● with OpenShift 3 / Kubernetes ● More Information
  • 80.
    PUBLIC PRESENTATION |CLAUS IBSEN80 Where do I get more information? ● Apache Camel Microservices ● http://camel.apache.org/camel-boot ● Fabric8 ● http://fabric8.io ● chat room #fabric-8 on freenode ● OpenShift 3 ● https://github.com/openshift/origin ● Kubernetes ● https://github.com/googlecloudplatform/kubernetes
  • 81.
    PUBLIC PRESENTATION |CLAUS IBSEN81 Any Questions ? ● Contact ● EMail: cibsen@redhat.com / claus.ibsen@gmail.com ● Twitter: @davsclaus ● Blog: http://davsclaus.com ● Linkedin: http://www.linkedin.com/in/davsclaus