Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Microservices with Apache Camel

5,396 views

Published on

Apache Camel is a very popular integration library that works very well with microservice architecture.

This talk introduces you to Apache Camel and how you can easily get started with Camel on your computer.
Then we cover how to create new Camel projects from scratch as micro services which you can boot using Camel or Spring Boot, or other micro containers such as Jetty or fat JARs. We then take a look at what options you have for monitoring and managing your Camel microservices
using tooling such as Jolokia, and hawtio web console.

The second part of this talk is about running Camel in the cloud. We start by showing you how you can use the Maven Docker Plugin to create a docker image of your Camel application and run it using docker on a single host. Then kubernetes enters the stage and we take a look at how you can deploy your docker images on a kubernetes cloud platform, and how thenfabric8 tooling can make this much easier for the Java developers.

At the end of this talk you will have learned about and seen in practice how to take a Java Camel project from scratch, turn that into a docker image, and how you can deploy those docker images in a scalable cloud platform based on Google's kubernetes.

  • Hey guys! Who wants to chat with me? More photos with me here 👉 http://www.bit.ly/katekoxx
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Microservices with Apache Camel

  1. 1. PUBLIC PRESENTATION | CLAUS IBSEN1 Microservices with Apache Camel Claus Ibsen (@davsclaus) Principal Software Engineer, Red Hat
  2. 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. 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. 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. 5. PUBLIC PRESENTATION | CLAUS IBSEN5 What is Apache Camel? ● Quote from the website
  6. 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. 7. PUBLIC PRESENTATION | CLAUS IBSEN7 What is Apache Camel? ● What is Enterprise Integration Patterns? It's a book
  8. 8. PUBLIC PRESENTATION | CLAUS IBSEN8 What is Apache Camel? ● Enterprise Integration Patterns http://camel.apache.org/eip
  9. 9. PUBLIC PRESENTATION | CLAUS IBSEN9 What is Apache Camel? ● EIP - Content Based Router
  10. 10. PUBLIC PRESENTATION | CLAUS IBSEN10 What is Apache Camel? from newOrder
  11. 11. PUBLIC PRESENTATION | CLAUS IBSEN11 What is Apache Camel? from newOrder choice
  12. 12. PUBLIC PRESENTATION | CLAUS IBSEN12 What is Apache Camel? from newOrder choice when isWidget to widget
  13. 13. PUBLIC PRESENTATION | CLAUS IBSEN13 What is Apache Camel? from newOrder choice when isWidget to widget otherwise to gadget
  14. 14. PUBLIC PRESENTATION | CLAUS IBSEN14 What is Apache Camel? from(newOrder) choice when(isWidget) to(widget) otherwise to(gadget)
  15. 15. PUBLIC PRESENTATION | CLAUS IBSEN15 What is Apache Camel? from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget);
  16. 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. 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. 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. 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. 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. 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. 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. 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. 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. 25. PUBLIC PRESENTATION | CLAUS IBSEN25 Standard Java or XML ● Java DSL is just Java
  26. 26. PUBLIC PRESENTATION | CLAUS IBSEN26 Standard Java or XML ● XML DSL is just XML ● … with XSD schema for validation/tooling
  27. 27. PUBLIC PRESENTATION | CLAUS IBSEN27 What is Apache Camel? ● Camel's Architecture
  28. 28. PUBLIC PRESENTATION | CLAUS IBSEN28 What is Apache Camel? 150+ Components
  29. 29. PUBLIC PRESENTATION | CLAUS IBSEN29 What is Apache Camel? 150+ Components
  30. 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. 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. 32. PUBLIC PRESENTATION | CLAUS IBSEN32 A Little Example ● File Copier Example
  33. 33. PUBLIC PRESENTATION | CLAUS IBSEN33 A Little Example ● File Copier Example
  34. 34. PUBLIC PRESENTATION | CLAUS IBSEN34 A Little Example ● File Copier Example
  35. 35. PUBLIC PRESENTATION | CLAUS IBSEN35 A Little Example ● File Copier Example
  36. 36. PUBLIC PRESENTATION | CLAUS IBSEN36 A Little Example ● File Copier Example
  37. 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. 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. 39. PUBLIC PRESENTATION | CLAUS IBSEN39 Creating new Camel Projects ● Using Command Shell ● From Eclipse
  40. 40. PUBLIC PRESENTATION | CLAUS IBSEN40 Creating new Camel Projects ● ... or JBoss Forge
  41. 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. 42. PUBLIC PRESENTATION | CLAUS IBSEN42 Creating new Camel Projects ● camel-archetype-cdi To run from CLI mvn clean install exec:java
  43. 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. 44. PUBLIC PRESENTATION | CLAUS IBSEN44 Creating new Camel Projects ● add change route to call http://localhost:8080
  45. 45. PUBLIC PRESENTATION | CLAUS IBSEN45 Creating new Camel Projects ● add change bean to return a name
  46. 46. PUBLIC PRESENTATION | CLAUS IBSEN46 Creating new Camel Projects ● camel-archetype-web To run from CLI mvn clean install jetty:run
  47. 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. 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. 49. PUBLIC PRESENTATION | CLAUS IBSEN49 Running Standalone ● camel-archetype-cdi ● mvn install exec:java
  50. 50. PUBLIC PRESENTATION | CLAUS IBSEN50 Monitor using hawtio embedded in Tomcat ● Copy hawtio.war to Tomcat deploy folder
  51. 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. 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. 53. PUBLIC PRESENTATION | CLAUS IBSEN53 Camel and Docker ● Dockerizing your Camel Projects with JBoss Forge ● From CLI Add FORGE_HOME/bin to $PATH
  54. 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. 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. 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. 57. PUBLIC PRESENTATION | CLAUS IBSEN57 Camel and Docker ● What is the IP Address of the Docker Container
  58. 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. 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. 60. PUBLIC PRESENTATION | CLAUS IBSEN60 Camel and Docker ● Pheeew isn't this easier? Yes !!!
  61. 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. 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. 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. 64. PUBLIC PRESENTATION | CLAUS IBSEN64 What is a Kubernetes Service ● Kubernetes Service http://fabric8.io/guide/services.html
  65. 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. 66. PUBLIC PRESENTATION | CLAUS IBSEN66 Define Kubernetes Service ● ... generates into kubernetes.json using fabric8:json plugin Apache Tomcat from http choice setBody Service
  67. 67. PUBLIC PRESENTATION | CLAUS IBSEN67 About using Kubernetes Service Discover Kubernetes Services Java Standalone from timer to http to log
  68. 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. 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. 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. 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. 72. PUBLIC PRESENTATION | CLAUS IBSEN72 fabric8 web console ● http://fabric8.vagrant.local ● Easy by configuring the replication size
  73. 73. PUBLIC PRESENTATION | CLAUS IBSEN73 OpenShift 3 CLI ● osc get pods docker CLI is also possible docker images docker ps
  74. 74. PUBLIC PRESENTATION | CLAUS IBSEN74 OpenShift 3 CLI ● osc get services
  75. 75. PUBLIC PRESENTATION | CLAUS IBSEN75 OpenShift 3 CLI ● osc logs -f <pod-name>
  76. 76. PUBLIC PRESENTATION | CLAUS IBSEN76 Scaling up / down ● ... by changing replication size on controller
  77. 77. PUBLIC PRESENTATION | CLAUS IBSEN77 Scaling up / down ● web console shows we now have 3 pods
  78. 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. 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. 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. 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

×