<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1207253639848690946</id><updated>2026-10-28T15:19:35.180+08:00</updated><category term="JBoss Fuse"/><category term="JBoss 教學"/><category term="JBoss"/><category term="JBoss Taiwan"/><category term="Fuse"/><category term="Integration"/><category term="JEAP 6"/><category term="BRMS"/><category term="OpenShift"/><category term="Apache Camel"/><category term="AS 7"/><category term="A-MQ"/><category term="JBoss EAP 6"/><category term="JEAP"/><category term="Getting Started"/><category term="AMQ"/><category term="xPaaS"/><category term="Active MQ"/><category term="Fuse Integration Service"/><category term="Camel"/><category term="JBoss A-MQ tutorial"/><category term="workshop"/><category term="Agile Integration"/><category term="DEVOPS"/><category term="ESB"/><category term="JBoss A-MQ"/><category term="jBPM"/><category term="jbmp"/><category term="JBoss A-MQ 6.1"/><category term="BPM"/><category term="BPMS"/><category term="JON"/><category term="Tips"/><category term="API"/><category term="BPM Suite 6"/><category term="Drools"/><category term="BPM Suite"/><category term="Fabric8"/><category term="JBUG Taiwan"/><category term="JBoss Data Grid"/><category term="JBoss EAP 5"/><category term="MQTT"/><category term="microservice"/><category term="AMQP"/><category term="CLI"/><category term="Cluster"/><category term="JBoss BPM Suite"/><category term="JBoss Messaging"/><category term="JBoss Rules"/><category term="JBoss 最新消息"/><category term="Multi-cloud"/><category term="NoESB"/><category term="RHACM"/><category term="SOA"/><category term="Web Service"/><category term="kubernetes"/><category term="multi-cluster"/><category term="效能調校"/><category term="Class Loading"/><category term="EJB3"/><category term="Fabric"/><category term="HL7"/><category term="HornetQ"/><category term="Hybrid cloud"/><category term="JBDS"/><category term="JBoss AS 5"/><category term="JBoss 管理"/><category term="JDG"/><category term="Kafka"/><category term="MQ"/><category term="Red Hat Integration"/><category term="Serverless"/><category term="SwitchYard"/><category term="Tools"/><category term="healthcare"/><category term="iPaas"/><category term="jbpm 5"/><category term="vault"/><category term="安全性"/><category term="3scale"/><category term="APIM"/><category term="APM"/><category term="CXF"/><category term="Camel K"/><category term="Data Grid"/><category term="Fuse Fabric"/><category term="Fuse Integration Service 2.0"/><category term="GitOps"/><category term="Hawtio"/><category term="Infinispan"/><category term="Insight"/><category term="Internet of Things"/><category term="IoT"/><category term="JBoss Rule"/><category term="JBoss 線上研討會"/><category term="JMX"/><category term="Messaging"/><category term="Red Hat Fuse"/><category term="SOA 6"/><category term="SOA-P"/><category term="Webinar"/><category term="jbpm 6"/><category term="maven"/><category term="module"/><category term="pom"/><category term="websocket"/><category term="A-MQ 7"/><category term="AMQ Online"/><category term="AMQ Streams"/><category term="Apache Karaf"/><category term="Apicurio"/><category term="Atlasmap"/><category term="Automation"/><category term="Blue green deployment"/><category term="Broker"/><category term="Business Process"/><category term="CI/CD"/><category term="CXFRS"/><category term="Camel Extension"/><category term="Contract First App Dev"/><category term="Design First"/><category term="EIP"/><category term="ETL"/><category term="Encoding"/><category term="FHIR"/><category term="FSW"/><category term="Facebook"/><category term="Failover"/><category term="Fus"/><category term="Fuse Service Work"/><category term="GitHub 教學"/><category term="Grafana"/><category term="HA"/><category term="HP Event"/><category term="IBM MQ"/><category term="IHS"/><category term="JBoss Fuse. microservices"/><category term="JDB"/><category term="JMS"/><category term="JSF"/><category term="Java SE env"/><category term="Job"/><category term="Kafka connect"/><category term="Keynote"/><category term="Kibana"/><category term="Linux 服務"/><category term="Loki"/><category term="MBean"/><category term="MDB"/><category term="MQ Cluster"/><category term="MQ Gateway. JBoss Fuse. Fuse."/><category term="MaaS"/><category term="Mac OS X"/><category term="Master-Slave"/><category term="Messagings as a Service"/><category term="Migration"/><category term="OSE"/><category term="Observability"/><category term="Observatorium"/><category term="Prometheus"/><category term="Promtail"/><category term="Quartz"/><category term="Queue"/><category term="Quick Starts"/><category term="RHQ"/><category term="RHTE"/><category term="SAP"/><category term="SAP Migration"/><category term="SNMP"/><category term="SSL"/><category term="Schema Registry"/><category term="Service Registry"/><category term="Service mesh"/><category term="Software Development"/><category term="Tech Quickies"/><category term="Tekton"/><category term="Timer"/><category term="Twitter"/><category term="VS Code"/><category term="WAR"/><category term="Web"/><category term="Windows 服務"/><category term="cloud"/><category term="cloud native development"/><category term="cloud native streaming"/><category term="event driven"/><category term="eventdriven"/><category term="https"/><category term="jdbc"/><category term="jpa"/><category term="logging"/><category term="managed kafka"/><category term="metrics"/><category term="microservices"/><category term="my2cent"/><category term="performance tuning"/><category term="properties"/><category term="sa"/><category term="備援"/><category term="叢集"/><category term="物聯網"/><category term="編碼"/><title type='text'>Christina の J老闆 </title><subtitle type='html'>Open Source,  Integration and Portfolio</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>229</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1207253639848690946.post-7360112840012540167</id><published>2021-08-12T10:48:00.006+08:00</published><updated>2021-08-12T23:50:09.282+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="GitOps"/><category scheme="http://www.blogger.com/atom/ns#" term="Grafana"/><category scheme="http://www.blogger.com/atom/ns#" term="kubernetes"/><category scheme="http://www.blogger.com/atom/ns#" term="Loki"/><category scheme="http://www.blogger.com/atom/ns#" term="Multi-cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="multi-cluster"/><category scheme="http://www.blogger.com/atom/ns#" term="Observability"/><category scheme="http://www.blogger.com/atom/ns#" term="Observatorium"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenShift"/><category scheme="http://www.blogger.com/atom/ns#" term="Prometheus"/><category scheme="http://www.blogger.com/atom/ns#" term="Promtail"/><category scheme="http://www.blogger.com/atom/ns#" term="RHACM"/><title type='text'>Observability in Hybrid Multi-cloud environment </title><content type='html'>&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana; font-size: large;&quot;&gt;&lt;span style=&quot;font-weight: 700; white-space: pre-wrap;&quot;&gt;Quick recap,&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;span id=&quot;docs-internal-guid-76276c87-7fff-1e75-4bb7-9707e1ee15d8&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Last article I talked about the study I did among Red Hat customers that makes the jump towards deploying their workloads on hybrid and multi-cloud environments.&amp;nbsp; These articles are abstractions of the common generic components summarized according to the actual implementations.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg31BCm-meSZy9oDp9npZ3-1B6vuKE-CjEEX_tcZN0PUhBUXA2Z6ct7DECsodDrARfAxaJtuWdVN2s2qsiod4c-zZ9mIJAROgqtS_TEy9ZS9uLCX4Ktejb1y1Y_gqTdsyRmUJ3FOCO8fUhD/s1031/blog01.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;580&quot; data-original-width=&quot;1031&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg31BCm-meSZy9oDp9npZ3-1B6vuKE-CjEEX_tcZN0PUhBUXA2Z6ct7DECsodDrARfAxaJtuWdVN2s2qsiod4c-zZ9mIJAROgqtS_TEy9ZS9uLCX4Ktejb1y1Y_gqTdsyRmUJ3FOCO8fUhD/w640-h360/blog01.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;To overcome the common obstacles of going hybrid and multi-cloud, such as finding talents with multi-cloud knowledge. Secure and protect across low trust networks or just day to day operation across the board. I have identify some solutions from the study, where I will be covering in the serie of articles:&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;caret-color: rgb(34, 38, 53); color: #222635;&quot;&gt;&lt;li&gt;&lt;span&gt;&lt;a href=&quot;https://wei-meilin.blogspot.com/2021/08/a-study-of-hosting-and-managing-on.html&quot;&gt;Briefing of the Hybrid Multi-cloud study&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;a href=&quot;https://wei-meilin.blogspot.com/2021/08/overview-of-making-hybrid-multi-cloud.html&quot;&gt;Overview of making Hybrid Multi-cloud GitOps works&amp;nbsp;&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;a href=&quot;https://wei-meilin.blogspot.com/2021/08/hybrid-multi-cloud-dynamic-security.html&quot;&gt;Hybrid Multi-cloud dynamic security management&amp;nbsp;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;a href=&quot;https://wei-meilin.blogspot.com/2021/08/observability-in-hybrid-multi-cloud.html&quot;&gt;Observability in Hybrid Multi-cloud environment&amp;nbsp;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Customize monitoring and logging strategy,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;One of the keys to manage multiple clusters is observability. In a single cluster environment, metrics and logs are segregated in different layers, application, cluster components and nodes, now adding in the complexity of multiple clusters on different clouds will definitely make it more chaotic than ever. By customizing how to gather and view the metrics allows you to be more effective, easier to operate, pinpoint and locate problems quickly. To do that, we will need to decide how we want to aggregate the collected data, by regions, operations or a centralized point. (Depends on your HA strategy and how much data you are collecting).&amp;nbsp; And then decide how to scrape or collect the metrics and logs. Historical data are valuable not only for us to view and identify problems. Since many vendors now support AI based remediation, by validating and extracting the data for operational models. Therefore we will also need to persist data.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;How it works,&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Checkout my previous article on the setup of the hybrid and multi cloud environment, and if you are interested, other articles on GitOps and secure dynamic infrastructure. But this time, let’s look at how observability works. First to view things in a single pane of glass, we host Grafana dashboard to stream and query the Observatorium service in all managed clusters.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;When bootstrapping the managed clusters on each cloud, we will need to install the following,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;border: none; display: inline-block; height: 249px; overflow: hidden; width: 503px;&quot;&gt;&lt;img height=&quot;357.1446430188249&quot; src=&quot;https://lh6.googleusercontent.com/rnVyWnA9rluguhXekLqTNEhaD1m9SiLdBqLSKQeOALFiTz3HQy4Z9lTkjzSqKUB9pZKgBkmW6jK4H5jXQbZJ5ViF-U1jb3-wdnzWtZGI5fpmFPfWrNZnPitq5vg4jMhjmRHToRWB&quot; style=&quot;margin-left: -121px; margin-top: -34.624673502386145px;&quot; width=&quot;624&quot; /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-style: italic; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;For Monitoring,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-style: italic; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Prometheus is installed to scrape metrics for cluster components, as well as the applications. A Thanos sidecar gets deployed along with a Prometheus instance to persist metrics to storage and allow instant query to Prometheus data. You may have multiple Prometheus instance per cluster depends on how you want to distribute the workload.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Observatorium is installed based on your defined strategy for observability(in this case, per region), this will deploy a set of service instances on the cluster. Where they will be responsible for aggregating, storing input metrics, as well as efficiently storing the data. Also providing endpoints(API) for observation tools like Grafana to query the persisted data.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;border: none; display: inline-block; height: 434px; overflow: hidden; width: 369px;&quot;&gt;&lt;img height=&quot;434&quot; src=&quot;https://lh4.googleusercontent.com/f6gI64Ra_p8DODxkR6-PnqAJIOLFBDo0jKZrgcYkiIDIBZrwqFTgTYi1EsGpZcA_18eyk_2T-OkHC8QednJVj4bgXayTDvNgKPVVL7xM9Sy1qPGjgxPiQH0rT_fF7aJKVi7dXrBl&quot; style=&quot;margin-left: 0px; margin-top: 0px;&quot; width=&quot;369&quot; /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;ol style=&quot;margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Queries from the Grafana dashboard in Hub cluster, the central Querier component in Observatorium process the PromQL queries and aggregate the results.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Prometheus scraps metrics in the local cluster, Thano sidecar pushes metrics to Observatorium to persist in storage.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Thanos sidecar acts as a proxy that serves Prometheus’s local data over Thanos’s gRPC API from the Querier.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-style: italic; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;For Logging,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Promtail collects log files with fine-grained control of what to ingest, what to drop, and the final metadata to attach to the log line. Similar to Prometheus, multiple Promtail instances can be installed per cluster depending on how you want to distribute the logging workload.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Observatorium in each defined region are also configured with Grafana Loki, where it aggregates logs by labeling each log stream pushed from Promtail. Not only it persist logs in stooges but also allow you to query the high cardinality data for better analysis and&amp;nbsp; visualization.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: center;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;border: none; display: inline-block; height: 396px; overflow: hidden; width: 341px;&quot;&gt;&lt;img height=&quot;396&quot; src=&quot;https://lh3.googleusercontent.com/zdBLh07xFNV9X5qwCB2KeTrCphyr9cOy4TspJVHHlrnpYrJkX3OJrIXgFcBqTvHmnvYXtFEIDNW1M4OmONIatY__84XxOiRsC-1j7YWHXdOn3a8obiM0mcTQQvXZhuh0hPTiN_ur&quot; style=&quot;margin-left: 0px; margin-top: 0px;&quot; width=&quot;341&quot; /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;ol style=&quot;margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Promtail is used to collect log and push to Loki API (Observatorium)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;In Observatorium, Loki distributor sends logs in batches to ingester, where they will be persisted. Couple of things to beware both ingester and querier requires large memory consumption, will need more replicas&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: decimal; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Grafana dashboard in Hub cluster display logs via requesting&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ol style=&quot;margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;2&quot; dir=&quot;ltr&quot; style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: lower-alpha; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Real time display(tail) with websocket&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;2&quot; dir=&quot;ltr&quot; style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: lower-alpha; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Time-series base query with HTTP&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;This summarizes how observability was implemented in our customer’s hybrid multi-cloud environment. &lt;/span&gt;&lt;span style=&quot;color: #222222; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;If you want to dive deeper into the technology, check out a video done by Ales Nosek.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #222222; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;266&quot; src=&quot;https://www.youtube.com/embed/0eycdxtgbpg&quot; width=&quot;320&quot; youtube-src-id=&quot;0eycdxtgbpg&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;266&quot; src=&quot;https://www.youtube.com/embed/vcymAJXsJlA&quot; width=&quot;320&quot; youtube-src-id=&quot;vcymAJXsJlA&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;br class=&quot;Apple-interchange-newline&quot; /&gt;</content><link rel='replies' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/7360112840012540167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1207253639848690946/7360112840012540167' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/7360112840012540167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/7360112840012540167'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/2021/08/observability-in-hybrid-multi-cloud.html' title='Observability in Hybrid Multi-cloud environment '/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg31BCm-meSZy9oDp9npZ3-1B6vuKE-CjEEX_tcZN0PUhBUXA2Z6ct7DECsodDrARfAxaJtuWdVN2s2qsiod4c-zZ9mIJAROgqtS_TEy9ZS9uLCX4Ktejb1y1Y_gqTdsyRmUJ3FOCO8fUhD/s72-w640-h360-c/blog01.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1207253639848690946.post-8741788673150513082</id><published>2021-08-11T03:10:00.002+08:00</published><updated>2021-08-18T03:34:42.667+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="GitOps"/><category scheme="http://www.blogger.com/atom/ns#" term="Hybrid cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="kubernetes"/><category scheme="http://www.blogger.com/atom/ns#" term="Multi-cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="multi-cluster"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenShift"/><category scheme="http://www.blogger.com/atom/ns#" term="RHACM"/><category scheme="http://www.blogger.com/atom/ns#" term="vault"/><title type='text'>Overview of making Hybrid Multi-cloud GitOps works</title><content type='html'>&lt;p&gt;&lt;i&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Hybrid multi cloud can be a difficult, this is my study of a real customer use case on their journey using GitOps, multi cluster management system and securing dynamic infrastructure secrets. &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;span id=&quot;docs-internal-guid-7d23587e-7fff-55a5-2e08-81854cda14cb&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Quick recap,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Last article I talked about the study I did among Red Hat customers that makes the jump towards deploying their workloads on hybrid and multi-cloud environments.&amp;nbsp; These articles are abstractions of the common generic components summarized according to the actual implementations.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg31BCm-meSZy9oDp9npZ3-1B6vuKE-CjEEX_tcZN0PUhBUXA2Z6ct7DECsodDrARfAxaJtuWdVN2s2qsiod4c-zZ9mIJAROgqtS_TEy9ZS9uLCX4Ktejb1y1Y_gqTdsyRmUJ3FOCO8fUhD/s1031/blog01.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;580&quot; data-original-width=&quot;1031&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg31BCm-meSZy9oDp9npZ3-1B6vuKE-CjEEX_tcZN0PUhBUXA2Z6ct7DECsodDrARfAxaJtuWdVN2s2qsiod4c-zZ9mIJAROgqtS_TEy9ZS9uLCX4Ktejb1y1Y_gqTdsyRmUJ3FOCO8fUhD/w640-h360/blog01.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span id=&quot;docs-internal-guid-b24f3d57-7fff-4d12-9995-f240acf5fc67&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;To overcome the common obstacles of going hybrid and multi-cloud, such as finding talents with multi-cloud knowledge. Secure and protect across low trust networks or just day to day operation across the board. I have identify some solutions from the study, where I will be covering in the serie of articles:&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;caret-color: rgb(34, 38, 53); color: #222635;&quot;&gt;&lt;li&gt;&lt;span&gt;&lt;a href=&quot;https://wei-meilin.blogspot.com/2021/08/a-study-of-hosting-and-managing-on.html&quot;&gt;Briefing of the Hybrid Multi-cloud study&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;a href=&quot;https://wei-meilin.blogspot.com/2021/08/overview-of-making-hybrid-multi-cloud.html&quot;&gt;Overview of making Hybrid Multi-cloud GitOps works&amp;nbsp;&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;a href=&quot;https://wei-meilin.blogspot.com/2021/08/hybrid-multi-cloud-dynamic-security.html&quot;&gt;Hybrid Multi-cloud dynamic security management&amp;nbsp;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;a href=&quot;https://wei-meilin.blogspot.com/2021/08/observability-in-hybrid-multi-cloud.html&quot;&gt;Observability in Hybrid Multi-cloud environment&amp;nbsp;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;span style=&quot;caret-color: rgb(0, 0, 0); color: black; font-size: 14.666666984558105px; white-space: pre;&quot;&gt;&lt;/span&gt;&lt;/ul&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;IaC and GitOps,&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Infrastructure as code (IaC) allows the infrastructure to be more visible among teams through sharable files and scripts that contain how environments are set up and configured. We can also automate to speed up the provisioning and deployment process and avoid manual misconfiguration. GitOps takes it a step further, better managing the setting and configuration files into a versioned, centralized repository as the single source of truth. This allows better collaboration. At the same time, applying pipeline along with status check and testing, is perfect for introducing the continuous integration and continuous delivery (CI/CD) practice. This eliminates configuration drift, by constantly checking if the end environment is in-sync with the desired state defined in the repository.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;How it works,&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #222222; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;First, we start with getting the management hub ready. (for more information, see my previous post.) In short, in the management hub, we will have &lt;/span&gt;&lt;span style=&quot;color: #222222; font-size: 11pt; font-style: italic; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Red Hat Advanced Cluster Management for Kubernetes (RHACM) &lt;/span&gt;&lt;span style=&quot;color: #222222; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;installed. Where it is used for provisioning/patching/updating the OpenShift/Kubernetes clusters (This is the key to hybrid and multi cloud environments). On top of RHACM, OpenShift GitOps is also installed for declarative continuous delivery, where it watches the manifests in repositories and automatically(or manually after configuration) updates deployments to the desired state.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #222222; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsvfQ5aGiCYxg5FNZHkRv_KAW_Qa7zKSu0uhBdjuJXejwV6gC6X1erb3FQE9gmLRyfDuqRjt5p9mkozIftjt6UqdrzSWZ-jPvOG7ZiuscqK4GcqkeI_9l3QD6Aq9ff-pJ2O5aoz0O0-dqq/s1801/spi-multi-cloud-gitops-sd-gitops.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1011&quot; data-original-width=&quot;1801&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsvfQ5aGiCYxg5FNZHkRv_KAW_Qa7zKSu0uhBdjuJXejwV6gC6X1erb3FQE9gmLRyfDuqRjt5p9mkozIftjt6UqdrzSWZ-jPvOG7ZiuscqK4GcqkeI_9l3QD6Aq9ff-pJ2O5aoz0O0-dqq/w640-h360/spi-multi-cloud-gitops-sd-gitops.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Here is the flow of infrastructure continuous delivery on hybrid and multi cloud:&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;b id=&quot;docs-internal-guid-e40ab882-7fff-bc63-5d36-cf4c4155d45e&quot; style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;ol style=&quot;margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px; text-align: left;&quot;&gt;&lt;li aria-level=&quot;1&quot; style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Manifest and configuration are set as code template in the form of “Kustomization” yaml. It describes the end desire state of how the managed cluster is going to be like.&amp;nbsp; When done, it is pushed into the source control management repository with version assigned to each update.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;OpenShift GitOps watches the repository and detects changes in the repository.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;OpenShift GitOps creates/updates the manifest by creating Kuberenet objects on top of RHACM.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; style=&quot;background-color: transparent; color: #222222; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;div&gt;&lt;span style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;ACM provision/update/delete managed clusters and configuration according to the manifest. In the manifest, you can configure what cloud provider the cluster will be on, the name of the cluster, infra node details and worker node. Governance policy can also be applied as well as provision an agent in the cluster as the bridge between the control center and the managed cluster.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;caret-color: rgb(34, 38, 53); color: #222635; white-space: normal;&quot;&gt;Here are some snippets of how we can describe the end state in the managed cluster. &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; white-space: normal;&quot;&gt;&lt;div style=&quot;box-sizing: border-box;&quot;&gt;&lt;div style=&quot;box-sizing: border-box;&quot;&gt;&lt;div style=&quot;box-sizing: border-box;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;em style=&quot;box-sizing: border-box;&quot;&gt;&amp;nbsp;&lt;/em&gt;&lt;/div&gt;&lt;div data-code=&quot;apiVersion: hive.openshift.io/v1
kind: MachinePool
metadata:
  name: ....
spec:
  .....
  platform:
    aws:
      rootVolume:
        iops: 100
        size: 100
        type: gp2
      type: m5.xlarge
  ...
  replicas: 3&quot; data-lang=&quot;text/x-yaml&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;pre style=&quot;background-color: whitesmoke; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 13px; line-height: 1.428571429; margin-bottom: 10px; margin-top: 0px; overflow: auto visible; padding: 9.5px; white-space: pre-wrap; word-break: break-all; word-wrap: break-word;&quot;&gt;&lt;code lang=&quot;text/x-yaml&quot; style=&quot;border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; box-sizing: border-box; color: inherit; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: inherit; padding: 0px; white-space: pre;&quot;&gt;apiVersion: hive.openshift.io/v1&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;kind: MachinePool&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;metadata:&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;  name: ....&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;spec:&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;  .....&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;  platform:&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;    aws:&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;      rootVolume:&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;        iops: 100&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;        size: 100&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;        type: gp2&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;      type: m5.xlarge&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;  ...&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;  replicas: 3&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Above describe the infrastructural node needed on&amp;nbsp;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;AWS&lt;/strong&gt;&amp;nbsp;.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; white-space: normal;&quot;&gt;&lt;div style=&quot;box-sizing: border-box;&quot;&gt;&lt;div style=&quot;box-sizing: border-box;&quot;&gt;&lt;em style=&quot;box-sizing: border-box;&quot;&gt;&amp;nbsp;&lt;/em&gt;&lt;/div&gt;&lt;div data-code=&quot;apiVersion: hive.openshift.io/v1
kind: MachinePool
metadata:
  name: ....
spec:
  .....
  platform:
    azure:
      osDisk:
    	diskSizeGB: 128
      type: Standard_D2s_v3
  ...
  labels:
    node-role.kubernetes.io/infra: &amp;quot;&amp;quot;
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/infra
  replicas: 3&quot; data-lang=&quot;text/x-yaml&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;pre style=&quot;background-color: whitesmoke; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 13px; line-height: 1.428571429; margin-bottom: 10px; margin-top: 0px; overflow: auto visible; padding: 9.5px; white-space: pre-wrap; word-break: break-all; word-wrap: break-word;&quot;&gt;&lt;code lang=&quot;text/x-yaml&quot; style=&quot;border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; box-sizing: border-box; color: inherit; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: inherit; padding: 0px; white-space: pre;&quot;&gt;apiVersion: hive.openshift.io/v1&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;kind: MachinePool&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;metadata:&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;  name: ....&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;spec:&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;  .....&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;  platform:&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;    azure:&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;      osDisk:&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;    	diskSizeGB: 128&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;      type: Standard_D2s_v3&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;  ...&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;  labels:&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;    node-role.kubernetes.io/infra: &quot;&quot;&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;  taints:&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;  - effect: NoSchedule&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;    key: node-role.kubernetes.io/infra&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;  replicas: 3&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Above for&amp;nbsp;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Azure&lt;/strong&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; white-space: normal;&quot;&gt;&lt;div style=&quot;box-sizing: border-box;&quot;&gt;&lt;div style=&quot;box-sizing: border-box;&quot;&gt;&lt;em style=&quot;box-sizing: border-box;&quot;&gt;&amp;nbsp;&lt;/em&gt;&lt;/div&gt;&lt;div data-code=&quot;apiVersion: hive.openshift.io/v1
kind: MachinePool
metadata:
  name: ....
spec:
  .....
  platform:
    gcp:
  	type: n1-standard-4
  ...
  labels:
    node-role.kubernetes.io/infra: &amp;quot;&amp;quot;
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/infra
  replicas: 3&quot; data-lang=&quot;text/x-yaml&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;pre style=&quot;background-color: whitesmoke; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 13px; line-height: 1.428571429; margin-bottom: 10px; margin-top: 0px; overflow: auto visible; padding: 9.5px; white-space: pre-wrap; word-break: break-all; word-wrap: break-word;&quot;&gt;&lt;code lang=&quot;text/x-yaml&quot; style=&quot;border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; box-sizing: border-box; color: inherit; font-family: Menlo, Monaco, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: inherit; padding: 0px; white-space: pre;&quot;&gt;apiVersion: hive.openshift.io/v1&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;kind: MachinePool&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;metadata:&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;  name: ....&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;spec:&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;  .....&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;  platform:&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;    gcp:&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;  	type: n1-standard-4&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;  ...&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;  labels:&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;    node-role.kubernetes.io/infra: &quot;&quot;&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;  taints:&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;  - effect: NoSchedule&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;    key: node-role.kubernetes.io/infra&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;  replicas: 3&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Last for&amp;nbsp;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Google Cloud Platform&lt;/strong&gt;&lt;/div&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;OpenShift GitOps will continuously watch between the code repository and status of the clusters reported back to RHACM. Any configuration drift or in case of any failure, it will automatically try to remediate by applying the manifest (Or showing alerts for manual intervention).&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;For application or updating during the continuous delivery, the process is very similar:&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;ol style=&quot;margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: #222222; font-size: 13.999999999999998pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; list-style-type: lower-alpha; text-decoration: none; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Developers have continuous integration pipelines to build application binary and images. Any changes to the infrastructure will also be pushed to the source control management repository.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; list-style-type: lower-alpha; text-decoration: none; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;OpenShift GitOps watches the repository and detects changes in the repository.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbNcCO0z-XUleBrGBnEtXlDXOn1Qsigp4ataggSTzc0PE_XrGK-nlN4EjPLKZlr9JebH1VR9hT3hzrqKQi6hqAp0Q9VN3GH_wRTAVUNvLRfA13Dm6OT4M7Owv16mPzk3nnzu3v2WF2cefc/s1946/Screen+Shot+2021-08-17+at+3.25.31+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;982&quot; data-original-width=&quot;1946&quot; height=&quot;323&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbNcCO0z-XUleBrGBnEtXlDXOn1Qsigp4ataggSTzc0PE_XrGK-nlN4EjPLKZlr9JebH1VR9hT3hzrqKQi6hqAp0Q9VN3GH_wRTAVUNvLRfA13Dm6OT4M7Owv16mPzk3nnzu3v2WF2cefc/w640-h323/Screen+Shot+2021-08-17+at+3.25.31+PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: #222222; font-size: 13.999999999999998pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; list-style-type: lower-alpha; text-decoration: none; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;OpenShift GitOps create/update kustomize resources directly on to the managed clusters via the control plane&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: #222222; font-size: 13.999999999999998pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; list-style-type: lower-alpha; text-decoration: none; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Change locally in the managed cluster.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;This concludes my study on the overall architecture of how GitOps works in Hybrid Multi-cloud environments. If you want to dive deeper into the technology, check out Ales Nosek’s youtube video, where in his video he will take you through step by step on how to do GitOps to manage your clusters.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;266&quot; src=&quot;https://www.youtube.com/embed/b7Q3KvgA48Q&quot; width=&quot;320&quot; youtube-src-id=&quot;b7Q3KvgA48Q&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;br class=&quot;Apple-interchange-newline&quot; /&gt;&lt;span style=&quot;color: #222222; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;br class=&quot;Apple-interchange-newline&quot; /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/8741788673150513082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1207253639848690946/8741788673150513082' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/8741788673150513082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/8741788673150513082'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/2021/08/overview-of-making-hybrid-multi-cloud.html' title='Overview of making Hybrid Multi-cloud GitOps works'/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg31BCm-meSZy9oDp9npZ3-1B6vuKE-CjEEX_tcZN0PUhBUXA2Z6ct7DECsodDrARfAxaJtuWdVN2s2qsiod4c-zZ9mIJAROgqtS_TEy9ZS9uLCX4Ktejb1y1Y_gqTdsyRmUJ3FOCO8fUhD/s72-w640-h360-c/blog01.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1207253639848690946.post-841438895985764268</id><published>2021-08-10T22:29:00.004+08:00</published><updated>2021-08-12T10:50:12.435+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hybrid cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="kubernetes"/><category scheme="http://www.blogger.com/atom/ns#" term="Multi-cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="multi-cluster"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenShift"/><category scheme="http://www.blogger.com/atom/ns#" term="RHACM"/><category scheme="http://www.blogger.com/atom/ns#" term="vault"/><title type='text'>Hybrid Multi-cloud dynamic security management</title><content type='html'>&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;i style=&quot;font-weight: normal; white-space: normal;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Hybrid multi cloud can be a difficult, this is my study of a real customer use case on their journey using GitOps, multi cluster management system and securing dynamic infrastructure secrets.&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: verdana; font-size: large; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Quick recap,&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: verdana; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;In my series of articles I went over the study I did among Red Hat customers that makes the jump towards deploying their workloads on hybrid and multi-cloud environments. These articles are abstractions of the common generic components summarized according to the actual implementations.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: verdana; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg31BCm-meSZy9oDp9npZ3-1B6vuKE-CjEEX_tcZN0PUhBUXA2Z6ct7DECsodDrARfAxaJtuWdVN2s2qsiod4c-zZ9mIJAROgqtS_TEy9ZS9uLCX4Ktejb1y1Y_gqTdsyRmUJ3FOCO8fUhD/s1031/blog01.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;580&quot; data-original-width=&quot;1031&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg31BCm-meSZy9oDp9npZ3-1B6vuKE-CjEEX_tcZN0PUhBUXA2Z6ct7DECsodDrARfAxaJtuWdVN2s2qsiod4c-zZ9mIJAROgqtS_TEy9ZS9uLCX4Ktejb1y1Y_gqTdsyRmUJ3FOCO8fUhD/w640-h360/blog01.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana; font-size: 11pt; white-space: pre-wrap;&quot;&gt;To overcome the common obstacles of going hybrid and multi-cloud, such as finding talents with multi-cloud knowledge. Secure and protect across low trust networks or just day to day operation across the board. I have identify some solutions from the study, where I will be covering in the serie of articles:&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;caret-color: rgb(34, 38, 53); color: #222635; font-family: verdana; text-align: left;&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;&lt;a href=&quot;https://wei-meilin.blogspot.com/2021/08/a-study-of-hosting-and-managing-on.html&quot;&gt;Briefing of the Hybrid Multi-cloud study&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;a href=&quot;https://wei-meilin.blogspot.com/2021/08/overview-of-making-hybrid-multi-cloud.html&quot;&gt;Overview of making Hybrid Multi-cloud GitOps works&amp;nbsp;&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;a href=&quot;https://wei-meilin.blogspot.com/2021/08/hybrid-multi-cloud-dynamic-security.html&quot;&gt;Hybrid Multi-cloud dynamic security management&amp;nbsp;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;a href=&quot;https://wei-meilin.blogspot.com/2021/08/observability-in-hybrid-multi-cloud.html&quot;&gt;Observability in Hybrid Multi-cloud environment&amp;nbsp;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p&gt;&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: verdana; font-size: large; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Dynamic Security Management,&lt;/span&gt;&lt;/h3&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: verdana; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Kubernetes offers it’s own secret management control, although it’s sufficient for running a single cluster, but when you are trying to manage multiple sets of credentials and secure configurations, especially with the introduction of automated process and continuous delivery practice. We need a better way to securely and centrally manage these data.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: verdana; font-size: large; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;How it works, &lt;/span&gt;&lt;/h3&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: verdana; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Checkout my previous article on the setup of the hybrid and multi cloud environment, and if you are interested, another article on getting the GitOps works. But for now, we are going to assume we have a fleet of clusters deployed on top of multiple cloud vendors, and one in the local data center. All the infrastructure is set as code and stored in a source management system. Where our GitOps system constantly coverage the managed clusters with its desired state.&amp;nbsp; In order to setup a secure way to manage credentials and configuration cross clusters, we need two components,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;b style=&quot;font-size: 11pt; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;External Secret management in OpenShift/Kubernetes&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana; font-size: 11pt; white-space: pre-wrap;&quot;&gt;Enable use of external secret management systems (like HashiCorp Vault in this case) to securely add secrets into the OpenShift platform.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;color: #222222; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Hashicorp Vault &lt;/span&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana; font-size: 11pt; white-space: pre-wrap;&quot;&gt;Secure centralized store for dynamic infrastructure and application across clusters. For low trust networks between clouds and data centers.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;border: none; display: inline-block; font-family: verdana; height: 312px; overflow: hidden; width: 624px;&quot;&gt;&lt;img height=&quot;353.7003592731369&quot; src=&quot;https://lh6.googleusercontent.com/vOHMI__Rjlgjxq40NkbB8EhU2dpxUvc7526KCGaOBNM7FbkRMOesLXcXpqWcZJAb1i_HqKprFbwAKP5deGEcqXRm3fDqkkEChMqDKLmiERau-yMqPfhZN3JDoSnmzCnw4ks_ZvWa&quot; style=&quot;margin-left: -5.865599999999972px; margin-top: -37.96992579642805px;&quot; width=&quot;674.232&quot; /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;This is how the two components work together to manage s&lt;/span&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;ecret &lt;/span&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;in dynamic infrastructure:&lt;/span&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;ol style=&quot;margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;&quot;&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #222222; font-family: verdana; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;During setup, the token to securely access HashiCorp Vault is stored in Ansible Vault. It is encrypted to protect sensitive content.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #222222; font-family: verdana; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Red Hat Advanced Cluster Management for Kubernetes (RHACM) allows us to have centralized control over the managing clusters. It acquires the token from Ansible Vault during install and distributes among the clusters.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #222222; font-family: verdana; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;To allow the cluster access to the external vault, we need to set up the external secret management. OpenShift Gitops is used to deploy the external secret object to a managed cluster.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #222222; font-family: verdana; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;External secret management fetches secrets from HashiCorp Vault using the token we created in step 2. And constantly watch for updates.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li aria-level=&quot;1&quot; dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: #222222; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #222222; font-family: verdana; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Secrets are created in each namespace, where applications can use.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #222222; font-family: verdana; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;This is how to manage dynamic infrastructure secret in a multi cluster and cloud environment.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br class=&quot;Apple-interchange-newline&quot; /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/841438895985764268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1207253639848690946/841438895985764268' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/841438895985764268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/841438895985764268'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/2021/08/hybrid-multi-cloud-dynamic-security.html' title='Hybrid Multi-cloud dynamic security management'/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg31BCm-meSZy9oDp9npZ3-1B6vuKE-CjEEX_tcZN0PUhBUXA2Z6ct7DECsodDrARfAxaJtuWdVN2s2qsiod4c-zZ9mIJAROgqtS_TEy9ZS9uLCX4Ktejb1y1Y_gqTdsyRmUJ3FOCO8fUhD/s72-w640-h360-c/blog01.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1207253639848690946.post-6828871870783727291</id><published>2021-08-10T02:34:00.008+08:00</published><updated>2021-08-12T23:48:27.424+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hybrid cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="Multi-cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="multi-cluster"/><category scheme="http://www.blogger.com/atom/ns#" term="RHACM"/><category scheme="http://www.blogger.com/atom/ns#" term="vault"/><title type='text'>A study of hosting and managing on Hybrid Multi-cloud</title><content type='html'>&lt;p&gt;&lt;i&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Hybrid multi cloud can be a difficult, this is my study of a real customer use case on their journey using GitOps, multi cluster management system and securing dynamic infrastructure secrets. &amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;The Intro,&lt;/span&gt;&lt;span style=&quot;font-size: 25px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span&gt;More companies are strategizing to be on Hybrid cloud or even Multi-cloud, &amp;nbsp;for higher flexibility, resiliency and sometimes, simply it’s too risky to put the egg in the same basket. This is a study based on real solutions using Red Hat’s open source technology. This article is an abstraction of the common generic components summarized according to the implementation. &amp;nbsp;And give you an overall idea of the flow and why we choose certain technologies to set you off the right place to begin your own journey on Hybrid Multi-cloud environments.&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;The idea of distributed computing is not new, by leveraging the combined processing power, memory and storage of multiple software components on multiple machine instances to achieve better performance. The problem now is how can we scale out the deployment for these software components quickly among the clouds with stability of actual machines. Having the freedom to bring up clusters close to the clients issuing the request and close to the data stores due to data gravity. Or sometimes they want to deploy a section of the application supporting the cognitive services they were running on the specific cloud providers.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-size: 19px; margin: 5px 0px 15px; text-align: left;&quot;&gt;&lt;/p&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6M1WyBegWGmZdAJz9jctjvY5yOLjiTHTolNOdzi2bzRH_rwrWUGrcnsM6kErljRNctkS9-a8yci-s-wiE9BXyv__Cvi0g_e8-Mtqe41iPC2uYJNDBtubi02vMKbjl2ufcB-Q75yxKS5Wz/s1031/blog01.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;580&quot; data-original-width=&quot;1031&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6M1WyBegWGmZdAJz9jctjvY5yOLjiTHTolNOdzi2bzRH_rwrWUGrcnsM6kErljRNctkS9-a8yci-s-wiE9BXyv__Cvi0g_e8-Mtqe41iPC2uYJNDBtubi02vMKbjl2ufcB-Q75yxKS5Wz/w640-h360/blog01.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;To host platforms on multiple clouds can be difficult, as it introduces extra complexity. No matter if it’s finding the people with knowledge on all cloud vendors, securing across clouds and governance across the board. We found the most common questions from customers are, automation, security and uniformity. &amp;nbsp;I have broken down how this study tackles above concerns using Red Hat and it’s partner’s technologies into four sections:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;caret-color: rgb(34, 38, 53); color: #222635; font-family: verdana;&quot;&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span&gt;&lt;a href=&quot;https://wei-meilin.blogspot.com/2021/08/a-study-of-hosting-and-managing-on.html&quot;&gt;Briefing of the Hybrid Multi-cloud study&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;a href=&quot;https://wei-meilin.blogspot.com/2021/08/overview-of-making-hybrid-multi-cloud.html&quot;&gt;Overview of making Hybrid Multi-cloud GitOps works &lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;a href=&quot;https://wei-meilin.blogspot.com/2021/08/hybrid-multi-cloud-dynamic-security.html&quot;&gt;Hybrid Multi-cloud dynamic security management&amp;nbsp;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;a href=&quot;https://wei-meilin.blogspot.com/2021/08/observability-in-hybrid-multi-cloud.html&quot;&gt;Observability in Hybrid Multi-cloud environment&amp;nbsp;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;h3 dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); clear: both; color: #222635; font-size: 25px; line-height: 1.2; margin-bottom: 5px; margin-top: 20px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); clear: both; color: #222635; line-height: 1.2; margin-bottom: 5px; margin-top: 20px;&quot;&gt;&lt;span style=&quot;font-family: verdana; font-size: large;&quot;&gt;The Overview,&lt;/span&gt;&lt;/h3&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;We have logically separated it into three main areas,&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Unified management Hub,&lt;/strong&gt;&amp;nbsp;which hosts the management platform to manage all custers, a vault securing and issuing infrastructure credentials, a repository that stores the infrastructure code. And a CI/CD controller which continuously monitors and applies updates. I found many customers decided to host the hub in their own data center on top of their existing virtualization infrastructure.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Managed clusters,&amp;nbsp;&lt;/strong&gt;these are the clusters that run the customer’s application, scaling up/down for distributed computing needs. Metrics and status are constantly synchronized back to the unified management hub. These clusters are deployed across major cloud vendors such as Azure, AWS and Google cloud.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Bootstrap automation,&lt;/strong&gt;&amp;nbsp; this is a temporary instance that is used for bootstrapping the unified management hub. It consists of multiple Ansible playbooks to install all the components on the hub, and also setup assigned the administrative roles.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4ZbdWdM7WbsXnPqlqipV4zSVemLUBWF2b9jWguY14RX6dkX8dscL5RR8W71Y0qz1AdbaUBd0TgpJzpqywTjClc8HJ4HcHzr6dO-J_IXgqkjVG2nUVtKRjPnAV_UiaLJQ_rdEh6vsN-0ww/s1017/blog02.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;491&quot; data-original-width=&quot;1017&quot; height=&quot;308&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4ZbdWdM7WbsXnPqlqipV4zSVemLUBWF2b9jWguY14RX6dkX8dscL5RR8W71Y0qz1AdbaUBd0TgpJzpqywTjClc8HJ4HcHzr6dO-J_IXgqkjVG2nUVtKRjPnAV_UiaLJQ_rdEh6vsN-0ww/w640-h308/blog02.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;h3 dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); clear: both; color: #222635; line-height: 1.2; margin-bottom: 5px; margin-top: 20px;&quot;&gt;&lt;span style=&quot;font-family: verdana; font-size: large;&quot;&gt;The Technology Stack,&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; margin: 5px 0px 15px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;In the case study, customers have chosen several the following technologies and the reason why:&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; margin-bottom: 10px; margin-top: 0px;&quot;&gt;&lt;li dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; padding: 0px 0px 8px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Red Hat OpenShift Platform&lt;/span&gt;&lt;ul style=&quot;box-sizing: border-box; margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;li dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; padding: 0px 0px 8px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Instead of directly using and learning the offering from all vendors, or even learning the subtle differences between the Kubernetes offering, using a platform offering sits on top across data centers, private and public cloud will provide an unified way to deploy, monitor and automate all the clusters.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; padding: 0px 0px 8px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;OpenShift GitOps&lt;/span&gt;&lt;ul style=&quot;box-sizing: border-box; margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;li style=&quot;box-sizing: border-box; padding: 0px 0px 8px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Automate delivery through DevOps practices across multicluster OpenShift and Kubernetes infrastructure, with the choice of either automatically or manually synchronizing the deployment of clusters according to what’s in the repository.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; padding: 0px 0px 8px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Core Monitoring&lt;/span&gt;&lt;ul style=&quot;box-sizing: border-box; margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;li style=&quot;box-sizing: border-box; padding: 0px 0px 8px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;OpenShift has a pre-configured, pre-installed, and self-updating monitoring stack that provides monitoring for core platform components. On top of that, we can also define monitoring for user-defined projects as well.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; padding: 0px 0px 8px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Grafana Loki&lt;/span&gt;&lt;ul style=&quot;box-sizing: border-box; margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;li style=&quot;box-sizing: border-box; padding: 0px 0px 8px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Horizontally-scalable and better log aggregation system, and more cost effective and easy to operate especially in a multi-cluster environment.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; padding: 0px 0px 8px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;External Secret&amp;nbsp;&lt;/span&gt;&lt;ul style=&quot;box-sizing: border-box; margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;li style=&quot;box-sizing: border-box; padding: 0px 0px 8px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Enable use of external secret management systems (like HashiCorp Vault in this case) to securely add secrets into the OpenShift platform.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; padding: 0px 0px 8px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Red Hat Advanced Cluster Management for Kubernetes&lt;/span&gt;&lt;ul style=&quot;box-sizing: border-box; margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;li style=&quot;box-sizing: border-box; padding: 0px 0px 8px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Controls clusters and applications from a single unified management hub console , with built-in security policies, provisioning cluster and application lifecycles. Especially important when it comes to managing on top of multi-clouds.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; padding: 0px 0px 8px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Red Hat Ansible Automation&lt;/span&gt;&lt;ul style=&quot;box-sizing: border-box; margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;li style=&quot;box-sizing: border-box; padding: 0px 0px 8px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Used for automate configuration and installation of the management hub.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; padding: 0px 0px 8px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Hashicorp Vault &amp;nbsp;&lt;/span&gt;&lt;ul style=&quot;box-sizing: border-box; margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;li style=&quot;box-sizing: border-box; padding: 0px 0px 8px;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Secure centralized store for dynamic infrastructure and application across clusters. For low trust networks between &amp;nbsp;clouds and data centers.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); clear: both; color: #222635; line-height: 1.2; margin-bottom: 5px; margin-top: 20px;&quot;&gt;&lt;span style=&quot;font-family: verdana; font-size: large;&quot;&gt;The Setup,&lt;/span&gt;&lt;/h3&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;The key to automate is “&lt;em style=&quot;box-sizing: border-box;&quot;&gt;Infrastructure as code&lt;/em&gt;”, by versioning and storing clusters, networks, servers, data stores or even applications as software into a centralized and controlled repository, it allows the environment to be agile, consistent and less error prone. As the creation, updates are all pre-configured, and can be applied by simply executing the code, with less human errors and can be replicated across different environments.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span&gt;We will start by bootstrapping the management hub. Here are the steps &amp;nbsp;&lt;br /&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;caret-color: rgb(34, 38, 53); color: #222635;&quot;&gt;First, we need to setup the Red Hat OpenShift Platform (OpenShift) that hosts the Management Hub. By using the&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html/installing/ocp-installation-overview#installation-overview_ocp-installation-overview&quot; style=&quot;-webkit-user-select: auto; box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #29a8ff; text-decoration: none;&quot;&gt;OpenShift installation program&lt;/a&gt;&lt;span style=&quot;caret-color: rgb(34, 38, 53); color: #222635;&quot;&gt;, it provides flexible ways to get OpenShift installed. Ansible playbook used to kick off the installation with configurations.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;caret-color: rgb(34, 38, 53); color: #222635;&quot;&gt;Ansible playbooks are again used to deploy and configure Red Hat Advanced Cluster Management for Kubernetes (RHACM) and later other supporting components (External secret management) on top of the provisioned OpenShift cluster.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;caret-color: rgb(34, 38, 53); color: #222635;&quot;&gt;Install Vault with Ansible playbook. The vault we choose is from our partner Hashicorp, the &amp;nbsp;vault is to manage secrets for all the Openshift clusters.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;caret-color: rgb(34, 38, 53); color: #222635;&quot;&gt;Ansible playbook is used again to configure and trigger the Openshift Gitops operator on the hub cluster. And deploy the Openshift Gitops instance for continuous delivery.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/span&gt;&lt;span&gt;For&amp;nbsp;&lt;a href=&quot;https://docs.openshift.com/container-platform/4.8/authentication/identity_providers/configuring-ldap-identity-provider.html#configuring-ldap-identity-provider&quot; style=&quot;-webkit-user-select: auto; box-sizing: border-box; color: #29a8ff; text-decoration: none;&quot;&gt;identity management&lt;/a&gt;, we use the existing one and use it as a source for openshift groups. And later use it to authenticate users when logging into the Hub and managed clusters.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2avF64Z1e_WrAXt4rvvfS77Kb_ZTPqrPpqpKG-TuKXpnoZ8NhfihyphenhyphenJgDLSLE9X8PEO7ng-9likRuFeVYhhMsvPd_Qw_js-b1OwGVP6gIcUww_j05fnAO7b78A84flBxTjvnBt92RDJGej/s1801/spi-multi-cloud-gitops-sd-install.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1011&quot; data-original-width=&quot;1801&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2avF64Z1e_WrAXt4rvvfS77Kb_ZTPqrPpqpKG-TuKXpnoZ8NhfihyphenhyphenJgDLSLE9X8PEO7ng-9likRuFeVYhhMsvPd_Qw_js-b1OwGVP6gIcUww_j05fnAO7b78A84flBxTjvnBt92RDJGej/w640-h360/spi-multi-cloud-gitops-sd-install.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Now we have the centralized unified management hub ready to go, we are now ready to deploy the cluster on multi cloud to serve the developers and end users. In my next article, I will go over my study on GitOps. And simplify provisioning or updating in the complex setting.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/6828871870783727291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1207253639848690946/6828871870783727291' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/6828871870783727291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/6828871870783727291'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/2021/08/a-study-of-hosting-and-managing-on.html' title='A study of hosting and managing on Hybrid Multi-cloud'/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6M1WyBegWGmZdAJz9jctjvY5yOLjiTHTolNOdzi2bzRH_rwrWUGrcnsM6kErljRNctkS9-a8yci-s-wiE9BXyv__Cvi0g_e8-Mtqe41iPC2uYJNDBtubi02vMKbjl2ufcB-Q75yxKS5Wz/s72-w640-h360-c/blog01.png" height="72" width="72"/><thr:total>4</thr:total><georss:featurename>Boston, MA, USA</georss:featurename><georss:point>42.3600825 -71.0588801</georss:point><georss:box>14.049848663821152 -106.2151301 70.670316336178843 -35.902630099999996</georss:box></entry><entry><id>tag:blogger.com,1999:blog-1207253639848690946.post-8706679460571783391</id><published>2021-06-28T19:00:00.001+08:00</published><updated>2021-06-28T19:00:00.176+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Camel K"/><category scheme="http://www.blogger.com/atom/ns#" term="Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="SAP"/><category scheme="http://www.blogger.com/atom/ns#" term="SAP Migration"/><category scheme="http://www.blogger.com/atom/ns#" term="Serverless"/><title type='text'>Make SAP Cloud Native and Event Driven in 4 days</title><content type='html'>&lt;p&gt;&lt;span style=&quot;background-color: white; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; orphans: 2; widows: 2;&quot;&gt;Recently I had an opportunity to work with Sanket Taur (IBM UK) and his team on a demo, showcasing how Red Hat products can help speed up innovation with SAP Landscapes. To be honest I was shocked at how little time we were given to create the entire demo from scratch. It’s less than a week. While still doing our day job, having a couple of hours per day to work on it. If this doesn’t convince you..&amp;nbsp; I don’t know any other stronger proof than this, to show how agile and fast a cloud solution can be from development to production.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;I encourage you to attend Sanket’s session for more details, this blog is JUST my view on the demo, and things I did to make it running. The demo was a simple approval process of Sales Orders. The SOs are created in the Core SAP platform (In this case ES5), therefore we need to create an application that speaks to the Core SAP platform and retrieve all the data needed.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter dm-lightbox__img&quot; data-id=&quot;plbox-1358668&quot; data-index=&quot;1&quot; src=&quot;https://blogs.sap.com/wp-content/uploads/2021/06/Screen-Shot-2021-06-21-at-11.14.05-PM.png&quot; style=&quot;border: 0px; box-sizing: inherit; clear: both; cursor: pointer; display: block; height: auto; margin: 0.857143rem auto; max-width: 100%; padding: 0px; vertical-align: top;&quot; /&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;First thing first, we need a Kubernetes(k8s) platform. And then I used Camel K — an enhanced framework based on Camel (part of Red Hat Integration product) to create the application. There was some mixup during the setup, instead of the OData v4 endpoint from ES5 for SO, line items and customer details. I was given an OData v2 endpoint. (Needless to say, how more efficient the OData v4 is, compared to v2. Please do update it when you have a chance). Note that Camel K only supports OData v4. HOWEVER, we can still get the results using normal REST API calls (So you are still covered).&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;This is how Camel helps you retrieve all the information needed. As you can see I have made several requests to get all the data needed as well as doing some transformation to extract results to return.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;pre style=&quot;background-color: #f2f3f4; border: 1px solid rgb(221, 221, 221); box-sizing: inherit; color: #3c3c3c; font-size: 14px; font-variant-ligatures: normal; margin-bottom: 0px; margin-top: 0px; orphans: 2; overflow-wrap: normal; overflow-x: auto; padding: 20px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&quot;direct:getSO&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;setHeader&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&quot;Authorization&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;constant&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&quot;Basic XXXX&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;setHeader&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&quot;Accept&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;constant&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&quot;application/json&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;toD&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&quot;https://sapes5.sapdevcenter.com/sap/opu/odata/iwbep/GWSAMPLE_BASIC/SalesOrderSet(&#39;${header.SalesOrderID}&#39;)?bridgeEndpoint=true&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;unmarshal&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;json&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;setHeader&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&quot;CustomerID&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;simple&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&quot;${body[d][CustomerID]}&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;marshal&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;json&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;()
&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;bean&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&quot;setSO(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;${body}&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;${headers.CustomerID}&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;)&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;;&lt;/span&gt;

&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&quot;direct:getItems&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;setHeader&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&quot;Authorization&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;constant&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&quot;Basic XXXX&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;setHeader&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&quot;Accept&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;constant&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&quot;application/json&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;     .&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;toD&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&quot;https://sapes5.sapdevcenter.com/sap/opu/odata/iwbep/GWSAMPLE_BASIC/SalesOrderSet(&#39;${header.SalesOrderID}&#39;)/ToLineItems?bridgeEndpoint=true&quot;)&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;unmarshal&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;json&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;marshal&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;json&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;()&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;bean&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&quot;setPO(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;${body}&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;)&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt; ;&lt;/span&gt;

&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&quot;direct:getCustomer&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;setHeader&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&quot;Authorization&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;constant&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&quot;Basic XXXX&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;setHeader&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&quot;Accept&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;constant&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&quot;application/json&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;)&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;     .&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;toD&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&quot;https://sapes5.sapdevcenter.com/sap/opu/odata/iwbep/GWSAMPLE_BASIC/BusinessPartnerSet(&#39;${header.CustomerID}&#39;)?bridgeEndpoint=true&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;)
     .&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;unmarshal&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;json&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;()
&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;     .&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;marshal&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;json&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;() &amp;nbsp; &amp;nbsp; 
     .&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;bean&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&quot;setCust(&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;${body}&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;)&quot;&lt;/span&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;)&lt;/span&gt;

&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt; ;&lt;/span&gt;&lt;/pre&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;The endpoints to trigger the call to SAP, is exposed as an API. Here I use Apicurio Studio to define the API contract. With two endpoints, fetch and fetchall. One returns SO, PO and Customer data, where the other one returns a collection of them.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 0px; orphans: 2; overflow-wrap: break-word; overflow: hidden; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter dm-lightbox__img&quot; data-id=&quot;plbox-1358668&quot; data-index=&quot;2&quot; src=&quot;https://blogs.sap.com/wp-content/uploads/2021/06/Screen-Shot-2021-06-21-at-11.38.13-PM.png&quot; style=&quot;border: 0px; box-sizing: inherit; clear: both; cursor: pointer; display: block; height: auto; margin: 0.857143rem auto; max-width: 100%; padding: 0px; vertical-align: top;&quot; /&gt;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;We can now export the definition as a OpenAPI Specification contract in the form of YAML (&lt;a href=&quot;https://github.com/weimeilin79/sap-odata4-camelk/blob/main/ibm/ibm-sap.yaml&quot; style=&quot;border: 0px; box-sizing: inherit; color: #007db8; cursor: pointer; margin: 0px; outline: 0px; padding: 0px; position: relative; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Link&lt;/a&gt;&amp;nbsp;to see the yaml). Save the file into the folder of where your Camel application is. Add the API yaml file name to your Camel K application mode line, and Camel K will automatically map your code to this contract.&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;background-color: #f2f3f4; border: 1px solid rgb(221, 221, 221); box-sizing: inherit; color: #3c3c3c; font-size: 14px; font-variant-ligatures: normal; margin-bottom: 0px; margin-top: 0px; orphans: 2; overflow-wrap: normal; overflow-x: auto; padding: 20px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;   // camel-k: language=java dependency=camel-openapi-java &lt;/span&gt;&lt;b style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;open-api=ibm-sap.yaml &lt;/b&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;dependency=camel-jackson&lt;/span&gt;&lt;/pre&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;By using the Camel K CLI tool. Run the command to deploy the code to the OpenShift platform.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;background-color: #f2f3f4; border: 1px solid rgb(221, 221, 221); box-sizing: inherit; color: #3c3c3c; font-size: 14px; font-variant-ligatures: normal; margin-bottom: 0px; margin-top: 0px; orphans: 2; overflow-wrap: normal; overflow-x: auto; padding: 20px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;   kamel run SapOdata.java&lt;/span&gt;&lt;/pre&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;And you should now see a microservice running. Did you notice how Camel K helps you, not only it detects and loads the libraries needed for you, but also containerised it as a running instance.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 0px; orphans: 2; overflow-wrap: break-word; overflow: hidden; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter dm-lightbox__img&quot; data-id=&quot;plbox-1358668&quot; data-index=&quot;3&quot; src=&quot;https://blogs.sap.com/wp-content/uploads/2021/06/Screen-Shot-2021-06-21-at-11.48.40-PM.png&quot; style=&quot;border: 0px; box-sizing: inherit; clear: both; cursor: pointer; display: block; height: auto; margin: 0.857143rem auto; max-width: 100%; padding: 0px; vertical-align: top;&quot; /&gt;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;Go to my&amp;nbsp;&lt;a href=&quot;https://github.com/weimeilin79/sap-odata4-camelk/tree/main/ibm&quot; style=&quot;border: 0px; box-sizing: inherit; color: #007db8; cursor: pointer; margin: 0px; outline: 0px; padding: 0px; position: relative; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;git repo&lt;/a&gt;&amp;nbsp;to see the full code and running instructions.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;Kafka was used in the middle to set the event driven architecture. So the SO approval application can notify the shopping cart client when it’s been approved.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 0px; orphans: 2; overflow-wrap: break-word; overflow: hidden; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter dm-lightbox__img&quot; data-id=&quot;plbox-1358668&quot; data-index=&quot;4&quot; src=&quot;https://blogs.sap.com/wp-content/uploads/2021/06/Screen-Shot-2021-06-22-at-12.00.12-AM.png&quot; style=&quot;border: 0px; box-sizing: inherit; clear: both; cursor: pointer; display: block; height: auto; margin: 0.857143rem auto; max-width: 100%; padding: 0px; vertical-align: top;&quot; /&gt;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;Since everything was put together in a week, with everyone in different timezones, miss communication will happen. What I did not realize was that all the client applications, SO approval and shopping carts were all written in JavaScript, and must communicate via HTTP. But&lt;/span&gt;&lt;b style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&amp;nbsp;Kafka only does Kafka protocols&lt;/b&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;!!! Therefore, I set up an Http Bridge in front of the Kafka clusters, so it will now translate the Kafka protocols.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 0px; orphans: 2; overflow-wrap: break-word; overflow: hidden; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter dm-lightbox__img&quot; data-id=&quot;plbox-1358668&quot; data-index=&quot;5&quot; src=&quot;https://blogs.sap.com/wp-content/uploads/2021/06/Screen-Shot-2021-06-22-at-12.07.00-AM.png&quot; style=&quot;border: 0px; box-sizing: inherit; clear: both; cursor: pointer; display: block; height: auto; margin: 0.857143rem auto; max-width: 100%; padding: 0px; vertical-align: top;&quot; /&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;And now clients can access the topic via HTTP endpoints.&amp;nbsp; For more information on how to set, go to my&amp;nbsp;&lt;a href=&quot;https://github.com/weimeilin79/sap-odata4-camelk/blob/main/ibm/kafkaHttpBridge.adoc&quot; style=&quot;border: 0px; box-sizing: inherit; color: #007db8; cursor: pointer; margin: 0px; outline: 0px; padding: 0px; position: relative; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Github repo&lt;/a&gt;&amp;nbsp;for more detailed instructions.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;Last but not least, we need to migrate all UI5 SAP web applications to OpenShift. The UI5 is basically an NODEJS app. We first create the docker file to containerize it. And push it to a container registry.&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;background-color: #f2f3f4; border: 1px solid rgb(221, 221, 221); box-sizing: inherit; color: #3c3c3c; font-size: 14px; font-variant-ligatures: normal; margin-bottom: 0px; margin-top: 0px; orphans: 2; overflow-wrap: normal; overflow-x: auto; padding: 20px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;  docker push quay.io/&amp;lt;YOUR_REPO&amp;gt;/socreate&lt;/span&gt;&lt;/pre&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;And deploy the application to OpenShift.&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;background-color: #f2f3f4; border: 1px solid rgb(221, 221, 221); box-sizing: inherit; color: #3c3c3c; font-size: 14px; font-variant-ligatures: normal; margin-bottom: 0px; margin-top: 0px; orphans: 2; overflow-wrap: normal; overflow-x: auto; padding: 20px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;  oc new-app quay.io/&amp;lt;YOUR_REPO&amp;gt;/socreate:latest --as-deployment-config&lt;/span&gt;&lt;/pre&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&lt;em style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;BUT WAIT&lt;/em&gt;!! Since UI5 only does binds to *&lt;strong style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;localhost&lt;/strong&gt;* (weird..), we need to add a proxy that can tunnel traffic to it. Therefore, I added a sidecar proxy running right next to the NodeJS application. By adding the following configuration.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;background-color: #f2f3f4; border: 1px solid rgb(221, 221, 221); box-sizing: inherit; color: #3c3c3c; font-size: 14px; font-variant-ligatures: normal; margin-bottom: 0px; margin-top: 0px; orphans: 2; overflow-wrap: normal; overflow-x: auto; padding: 20px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;spec:&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;containers:&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- name: nginx&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;image: quay.io/weimei79/nginx-sidecar&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ports:&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- containerPort: 8081&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;protocol: TCP&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resources:&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;limits:&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cpu: 500m&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memory: 1Gi&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;terminationMessagePath: /dev/termination-log&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;terminationMessagePolicy: File&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;imagePullPolicy: Always&lt;/span&gt;


&lt;/pre&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;This will start the proxy, and since this NGINX proxy starts on port 8081, make sure you update all related settings on OpenShift.&lt;/span&gt;&lt;/p&gt;&lt;pre style=&quot;background-color: #f2f3f4; border: 1px solid rgb(221, 221, 221); box-sizing: inherit; color: #3c3c3c; font-size: 14px; font-variant-ligatures: normal; margin-bottom: 0px; margin-top: 0px; orphans: 2; overflow-wrap: normal; overflow-x: auto; padding: 20px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;  oc expose dc socreate --port=8181&lt;/span&gt;
&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&amp;nbsp; oc expose svc socreate

&lt;/span&gt;&lt;/pre&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;And this is how you would migrate the UI5 application from a local SAP instance onto OpenShift. More detailed migration instructions, check out my&amp;nbsp;&lt;a href=&quot;https://github.com/weimeilin79/sap-odata4-camelk/blob/main/ibm/UI5-Migration/README.adoc&quot; style=&quot;border: 0px; box-sizing: inherit; color: #007db8; cursor: pointer; margin: 0px; outline: 0px; padding: 0px; position: relative; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;Github repo&lt;/a&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;Once it’s done, you can see all the applications are running as a container on the cloud. And ready to approve the SOs.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 0px; orphans: 2; overflow-wrap: break-word; overflow: hidden; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter dm-lightbox__img&quot; data-id=&quot;plbox-1358668&quot; data-index=&quot;6&quot; src=&quot;https://blogs.sap.com/wp-content/uploads/2021/06/Screen-Shot-2021-06-22-at-12.21.31-AM-1.png&quot; style=&quot;border: 0px; box-sizing: inherit; clear: both; cursor: pointer; display: block; height: auto; margin: 0.857143rem auto; max-width: 100%; padding: 0px; vertical-align: top;&quot; /&gt;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;This is actual developer view on top of our demo OpenShift platform&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter dm-lightbox__img&quot; data-id=&quot;plbox-1358668&quot; data-index=&quot;7&quot; src=&quot;https://blogs.sap.com/wp-content/uploads/2021/06/Screen-Shot-2021-06-22-at-12.22.35-AM.png&quot; style=&quot;border: 0px; box-sizing: inherit; clear: both; cursor: pointer; display: block; height: auto; margin: 0.857143rem auto; max-width: 100%; padding: 0px; vertical-align: top;&quot; /&gt;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;Thank you Sanket for this fun ride, all the nail biting moments, but this is all the fun in IT right? We work through problems, tackle issues and ultimately get everything done! 🙂 If you are a SAPer, and want to join the container world of cloud, what are you still waiting for? Join the ride! This is the story on how we made SAP Cloud Native and Event Driven in 4 days.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;To see the full version, be sure to attend Sanket’s session:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;b style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;SAP &amp;amp; OpenShift:&lt;/b&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;&amp;nbsp;From classic ABAP development to cloud native applications: Use cases and reference architecture to implement with SAP Landscapes to unlock innovation enabled by Hybrid Cloud and Red Hat OpenShift.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;Register here:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;background-color: white; border: 0px; box-sizing: inherit; color: #3c3c3c; font-family: SAPRegular, &amp;quot;Helvetica Neue&amp;quot;, Arial, sans-serif; font-size: 14px; font-variant-ligatures: normal; line-height: 1.5; margin: 0rem 0rem 1.125rem; orphans: 2; overflow-wrap: break-word; padding: 0px; text-decoration-thickness: initial; widows: 2;&quot;&gt;&lt;a href=&quot;https://events.redhat.com/profile/form/index.cfm?PKformID=0x373237abcd&amp;amp;sc_cid=7013a000002w6W7AAI&quot; style=&quot;border: 0px; box-sizing: inherit; color: #007db8; cursor: pointer; margin: 0px; outline: 0px; padding: 0px; position: relative; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;border: 0px; box-sizing: inherit; margin: 0px; padding: 0px;&quot;&gt;https://events.redhat.com/profile/form/index.cfm?PKformID=0x373237abcd&amp;amp;sc_cid=7013a000002w6W7AAI&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/8706679460571783391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1207253639848690946/8706679460571783391' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/8706679460571783391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/8706679460571783391'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/2021/06/make-sap-cloud-native-and-event-driven.html' title='Make SAP Cloud Native and Event Driven in 4 days'/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1207253639848690946.post-4324245612189196881</id><published>2021-06-21T22:10:00.002+08:00</published><updated>2021-06-21T22:10:15.660+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Apache Camel"/><category scheme="http://www.blogger.com/atom/ns#" term="cloud native streaming"/><category scheme="http://www.blogger.com/atom/ns#" term="eventdriven"/><category scheme="http://www.blogger.com/atom/ns#" term="Kafka"/><category scheme="http://www.blogger.com/atom/ns#" term="Kafka connect"/><category scheme="http://www.blogger.com/atom/ns#" term="kubernetes"/><category scheme="http://www.blogger.com/atom/ns#" term="managed kafka"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenShift"/><category scheme="http://www.blogger.com/atom/ns#" term="Serverless"/><title type='text'>Kamelet for streaming to Kafka!</title><content type='html'>&lt;p&gt;&lt;span style=&quot;caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px;&quot;&gt;You want Kafka to stream and process the data. But what comes after you set up the platform, planned the partitioning strategy, storage options, and configured the data durability? Yes! How to stream data in and out of the platform. And this is exactly what I want to discuss today.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;h4 dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 1.2; margin-bottom: 5px; margin-top: 20px;&quot;&gt;The Background&lt;/h4&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;Before we go any further, let’s see what Kafka did to make itself blazing fast? Kafka is optimized for writing the stream data in binary format, that basically logs everything directly to the file system (Sequential I/O) and makes minimum effort to process what&#39;s in the data (Optimize for Zero Copy). &amp;nbsp;Kafka is super-charged at making sure data is stored as quickly as possible, and quickly replicating for a large number of consumers. But terrible at communication, the client that pushes content needs to SPEAK Kafka.&amp;nbsp;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;Here we are, having a super fast logging and distributing platform, but dumb at connecting to other data sources. So who is going to validate the data sent in/out of the kafka topic? What if I need to transform the data content? Can I filter the content partially? You guessed it. The clients. &amp;nbsp;We now need smart clients that do most of the content processing and speak Kafka at the same time.&amp;nbsp;&lt;/p&gt;&lt;h4 dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 1.2; margin-bottom: 5px; margin-top: 20px;&quot;&gt;What are the most used connect tools today for Kafka users?&amp;nbsp;&lt;/h4&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;Kafka Connect is what the majority of the Kafka users are using today. It has been broken down into many parts such as connector, tasks, worker, converter, transformer and error handler. You can view the task and worker as how the data flow is executed. For a developer they will be mostly configuring the rest 4 pieces.&amp;nbsp;&lt;/p&gt;&lt;ul style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin-bottom: 10px; margin-top: 0px;&quot;&gt;&lt;li dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; padding: 0px 0px 8px;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; margin: 5px 0px 15px;&quot;&gt;Connector - Describes the kind of source or the sink of the data flow, translating between the client/Kafka protocol, and knowing the libraries needed.&amp;nbsp;&lt;/p&gt;&lt;/li&gt;&lt;li dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; padding: 0px 0px 8px;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; margin: 5px 0px 15px;&quot;&gt;Converter - Converts the binary to the data format accepted by the client or vice versa &amp;nbsp; (Currently there is limited support from Confluent, they &amp;nbsp;only do data format) And does data format validation.&amp;nbsp;&lt;/p&gt;&lt;/li&gt;&lt;li dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; padding: 0px 0px 8px;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; margin: 5px 0px 15px;&quot;&gt;Transformer - Reads into the data format, can help make simple changes to individual data chunks. Normally you would do filtering, masking or any minor changes. (&amp;nbsp;This does not support simple calculations)&lt;/p&gt;&lt;/li&gt;&lt;li dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; padding: 0px 0px 8px;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; margin: 5px 0px 15px;&quot;&gt;Error Handler - Define a place to store problematic data (Confluent : Dead letter queues are only applicable for sink connectors.)&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;After configuring, it then uses Task and Worker to determine how to scale and execute that pipe data in/out of Kaka. For instance, running a cluster of works to scale and allow tasks to perform parallel processing of streams.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;&lt;img class=&quot;fr-fic fr-dib fr-draggable&quot; data-creationdate=&quot;1624275782143&quot; data-creationdateformatted=&quot;06/21/2021 11:43 AM&quot; data-id=&quot;14878129&quot; data-image=&quot;true&quot; data-mimetype=&quot;image/png&quot; data-modificationdate=&quot;null&quot; data-name=&quot;screen-shot-2021-06-21-at-74123-am.png&quot; data-new=&quot;false&quot; data-size=&quot;220302&quot; data-sizeformatted=&quot;220.3 kB&quot; data-type=&quot;temp&quot; data-url=&quot;/storage/temp/14878129-screen-shot-2021-06-21-at-74123-am.png&quot; src=&quot;https://dzone.com/storage/temp/14878129-screen-shot-2021-06-21-at-74123-am.png&quot; style=&quot;border: 0px; box-sizing: border-box; cursor: pointer; display: block; float: none !important; height: auto; margin: auto; max-width: 100%; position: relative; text-align: center; vertical-align: top; width: 600px;&quot; /&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;Camel is another&amp;nbsp;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;great&lt;/strong&gt;&amp;nbsp;option!&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;&lt;img class=&quot;fr-fic fr-dib fr-draggable&quot; data-creationdate=&quot;1624275930594&quot; data-creationdateformatted=&quot;06/21/2021 11:45 AM&quot; data-id=&quot;14878132&quot; data-image=&quot;true&quot; data-mimetype=&quot;image/png&quot; data-modificationdate=&quot;null&quot; data-name=&quot;apache-camel-logo.png&quot; data-new=&quot;false&quot; data-size=&quot;28967&quot; data-sizeformatted=&quot;29.0 kB&quot; data-type=&quot;temp&quot; data-url=&quot;/storage/temp/14878132-apache-camel-logo.png&quot; src=&quot;https://dzone.com/storage/temp/14878132-apache-camel-logo.png&quot; style=&quot;border: 0px; box-sizing: border-box; cursor: pointer; display: block; float: none !important; height: auto; margin: auto; max-width: 100%; position: relative; text-align: center; vertical-align: top; width: 195px;&quot; /&gt;&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;Apache Camel is a&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;em style=&quot;box-sizing: border-box;&quot;&gt;&amp;nbsp;GREAT alternative&amp;nbsp;&lt;/em&gt;&lt;/strong&gt;for connecting Kafka too. Here’s what Camel has to offer.&amp;nbsp;&lt;/p&gt;&lt;ul style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin-bottom: 10px; margin-top: 0px;&quot;&gt;&lt;li dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; padding: 0px 0px 8px;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; margin: 5px 0px 15px;&quot;&gt;Connector - Camel has more than 300+ connectors, you can use it to configure as source or the sink of the data flow, translating between the 100+client/Kafka protocol.&lt;/p&gt;&lt;/li&gt;&lt;li dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; padding: 0px 0px 8px;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; margin: 5px 0px 15px;&quot;&gt;Converter - &amp;nbsp;Validate and transform data formats with simple configuration.&lt;/p&gt;&lt;/li&gt;&lt;li dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; padding: 0px 0px 8px;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; margin: 5px 0px 15px;&quot;&gt;Transformer - Not only does simple message modification, it can apply integration patterns that are good for streaming processing, such as split, filter, even customization of processes. &amp;nbsp;&lt;/p&gt;&lt;/li&gt;&lt;li dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; padding: 0px 0px 8px;&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; margin: 5px 0px 15px;&quot;&gt;Error Handler - Dead letter queue, catching exceptions.&amp;nbsp;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;There are also many ways to run Camel. You can have it running as a standalone single process that directly streams data in/out of Kafka .&amp;nbsp;&lt;em style=&quot;box-sizing: border-box;&quot;&gt;But Kamel works EXCEPTIONALLY well on Kubernetes.&amp;nbsp;&lt;/em&gt;It run as a cluster of instances, that execute in parallel to maximize the performance. It can be deployed as native image through Quarkus to increase density and efficiency. The platform OpenShift (Kubernetes) allows users to control the scaling of the instance. Since it’s on K8s, another advantage is that operation can operate these as a unify platform, along with all other microservices.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;&lt;img class=&quot;fr-fic fr-dib fr-draggable&quot; data-creationdate=&quot;1624276118191&quot; data-creationdateformatted=&quot;06/21/2021 11:48 AM&quot; data-id=&quot;14878138&quot; data-image=&quot;true&quot; data-mimetype=&quot;image/png&quot; data-modificationdate=&quot;null&quot; data-name=&quot;screen-shot-2021-06-21-at-74621-am.png&quot; data-new=&quot;false&quot; data-size=&quot;416609&quot; data-sizeformatted=&quot;416.6 kB&quot; data-type=&quot;temp&quot; data-url=&quot;/storage/temp/14878138-screen-shot-2021-06-21-at-74621-am.png&quot; src=&quot;https://dzone.com/storage/temp/14878138-screen-shot-2021-06-21-at-74621-am.png&quot; style=&quot;border: 0px; box-sizing: border-box; cursor: pointer; display: block; float: none !important; height: auto; margin: auto; max-width: 100%; position: relative; text-align: center; vertical-align: top; width: 600px;&quot; /&gt;&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;&lt;/p&gt;&lt;h4 dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 1.2; margin-bottom: 5px; margin-top: 20px;&quot;&gt;Why Kamelet? &amp;nbsp;(This is the way!)&lt;/h4&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;One of the biggest hurdles for non Camel developers is, they need to learn another framework, maybe another language (Non-Java) to be able to get Camel running. What if we can smooth the learning curve and make it simple for newcomers? We see a great number of use cases where the masking and filtering are implemented company wide. Being able to build a repository and reuse these logics will make developers work more efficiently.&amp;nbsp;&lt;/p&gt;&lt;h4 dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 1.2; margin-bottom: 5px; margin-top: 20px;&quot;&gt;Plug &amp;amp; Play&amp;nbsp;&lt;/h4&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;You can look at Kamelets as templates, where you can define where to consume data from and send data to, does filtering, masking, simple calculation logic. Once the template is defined, it can be made available to the teams, that simply plugs it into the platform, configure for their needs (with either Kamelet Binding or another Camel route), and boom. The underlying Camel K will do the hard work for you, compile, build, package and deploy. You have a smart running data pipeline streams into Kafka.&amp;nbsp;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;&lt;img class=&quot;fr-fic fr-dib fr-draggable&quot; data-creationdate=&quot;1624283820748&quot; data-creationdateformatted=&quot;06/21/2021 01:57 PM&quot; data-id=&quot;14878309&quot; data-image=&quot;true&quot; data-mimetype=&quot;image/png&quot; data-modificationdate=&quot;null&quot; data-name=&quot;screen-shot-2021-06-21-at-95558-am.png&quot; data-new=&quot;false&quot; data-size=&quot;321042&quot; data-sizeformatted=&quot;321.0 kB&quot; data-type=&quot;temp&quot; data-url=&quot;/storage/temp/14878309-screen-shot-2021-06-21-at-95558-am.png&quot; src=&quot;https://dzone.com/storage/temp/14878309-screen-shot-2021-06-21-at-95558-am.png&quot; style=&quot;border: 0px; box-sizing: border-box; cursor: pointer; display: block; float: none !important; height: auto; margin: auto; max-width: 100%; position: relative; text-align: center; vertical-align: top; width: 600px;&quot; /&gt;&lt;/p&gt;&lt;h4 dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 1.2; margin-bottom: 5px; margin-top: 20px;&quot;&gt;Assemble &amp;amp; Reuse&lt;/h4&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;In a data pipeline, sometimes, you just need that bit of extra work on the data. Instead of defining a single template for each case, you can also break it down into smaller tasks. And assemble these small tasks to perform in the pipeline for each use case. . &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;&lt;img class=&quot;fr-fic fr-dib fr-draggable&quot; data-creationdate=&quot;1624283952151&quot; data-creationdateformatted=&quot;06/21/2021 01:59 PM&quot; data-id=&quot;14878312&quot; data-image=&quot;true&quot; data-mimetype=&quot;image/png&quot; data-modificationdate=&quot;null&quot; data-name=&quot;screen-shot-2021-06-21-at-95900-am.png&quot; data-new=&quot;false&quot; data-size=&quot;151241&quot; data-sizeformatted=&quot;151.2 kB&quot; data-type=&quot;temp&quot; data-url=&quot;/storage/temp/14878312-screen-shot-2021-06-21-at-95900-am.png&quot; src=&quot;https://dzone.com/storage/temp/14878312-screen-shot-2021-06-21-at-95900-am.png&quot; style=&quot;border: 0px; box-sizing: border-box; cursor: pointer; display: block; float: none !important; height: auto; margin: auto; max-width: 100%; position: relative; text-align: center; vertical-align: top; width: 600px;&quot; /&gt;&lt;/p&gt;&lt;h4 dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 1.2; margin-bottom: 5px; margin-top: 20px;&quot;&gt;Streams &amp;amp; Serverless&lt;/h4&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;Kamelets allows you to stream data to/from either Kafka store or Knative event channel/broker. To be able to support Knative, Kamelet can help translate messages to CloudEvents, which is the CNCF standard event format for serverless. And also apply any pre/post-processing of the content in the pipeline.&amp;nbsp;&lt;/p&gt;&lt;h4 dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 1.2; margin-bottom: 5px; margin-top: 20px;&quot;&gt;Scalable &amp;amp; Flexible&lt;/h4&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;Kamelet lives on Kubernetes(can also run standalone), which gives you a comprehensive set of scaling tools, readiness, liveness check and scaling configuration. They are all part of the package. It scales by adding more instances. The UI on the OpenShift Developer Console can assist you to fill in what’s needed. And also auto discover the available source/sink for you to choose where the data pipelines start or end.&amp;nbsp;&lt;/p&gt;&lt;h4 dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 1.2; margin-bottom: 5px; margin-top: 20px;&quot;&gt;Unify for DEV &amp;amp; OPS&amp;nbsp;&lt;/h4&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;In many cases, DevOps engineers are often required to develop another set of automation tools for the deployment of connectors. Kamelet can run like other applications on kubernetes, the same tools can be used to build, deploy and monitor these pipelines. The streamline DEVOPS experience can help speed up the automation setup time. &amp;nbsp;&lt;/p&gt;&lt;h4 dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 1.2; margin-bottom: 5px; margin-top: 20px;&quot;&gt;Marketplace&lt;/h4&gt;&lt;p dir=&quot;ltr&quot; style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;List of catalogues that are already available &amp;nbsp;(Not enough?). If you just want to stream data directly, simple pick the ones you need and start streaming. And we welcome your contributions too.&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;&lt;img class=&quot;fr-fic fr-dib fr-draggable&quot; data-creationdate=&quot;1624284138952&quot; data-creationdateformatted=&quot;06/21/2021 02:02 PM&quot; data-id=&quot;14878316&quot; data-image=&quot;true&quot; data-mimetype=&quot;image/png&quot; data-modificationdate=&quot;null&quot; data-name=&quot;screen-shot-2021-06-21-at-100211-am.png&quot; data-new=&quot;false&quot; data-size=&quot;516503&quot; data-sizeformatted=&quot;516.5 kB&quot; data-type=&quot;temp&quot; data-url=&quot;/storage/temp/14878316-screen-shot-2021-06-21-at-100211-am.png&quot; src=&quot;https://dzone.com/storage/temp/14878316-screen-shot-2021-06-21-at-100211-am.png&quot; style=&quot;border: 0px; box-sizing: border-box; cursor: pointer; display: block; float: none !important; height: auto; margin: auto; max-width: 100%; position: relative; text-align: center; vertical-align: top; width: 600px;&quot; /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;&lt;br style=&quot;box-sizing: border-box;&quot; /&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;What to know more about Kamelet? Take a look at this video, where it talks about why using Kamelet for streaming data to Kafka with a demo.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;&lt;a dir=&quot;auto&quot; href=&quot;https://www.youtube.com/watch?v=onOlnEdOhfM&amp;amp;t=0s&quot; spellcheck=&quot;false&quot; style=&quot;-webkit-user-select: auto; box-sizing: border-box; color: #29a8ff; text-decoration: none;&quot;&gt;00:00&lt;/a&gt;&lt;span dir=&quot;auto&quot; style=&quot;box-sizing: border-box;&quot;&gt;&amp;nbsp;Introduction&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;&lt;a dir=&quot;auto&quot; href=&quot;https://www.youtube.com/watch?v=onOlnEdOhfM&amp;amp;t=30s&quot; spellcheck=&quot;false&quot; style=&quot;-webkit-user-select: auto; box-sizing: border-box; color: #29a8ff; text-decoration: none;&quot;&gt;00:30&lt;/a&gt;&lt;span dir=&quot;auto&quot; style=&quot;box-sizing: border-box;&quot;&gt;&amp;nbsp;What is Kamelet?&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;&lt;a dir=&quot;auto&quot; href=&quot;https://www.youtube.com/watch?v=onOlnEdOhfM&amp;amp;t=66s&quot; spellcheck=&quot;false&quot; style=&quot;-webkit-user-select: auto; box-sizing: border-box; color: #29a8ff; text-decoration: none;&quot;&gt;01:06&lt;/a&gt;&lt;span dir=&quot;auto&quot; style=&quot;box-sizing: border-box;&quot;&gt;&amp;nbsp;Why do you need connectors to Kafka, and what is required in each connector?&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;&lt;a dir=&quot;auto&quot; href=&quot;https://www.youtube.com/watch?v=onOlnEdOhfM&amp;amp;t=136s&quot; spellcheck=&quot;false&quot; style=&quot;-webkit-user-select: auto; box-sizing: border-box; color: #29a8ff; text-decoration: none;&quot;&gt;02:16&lt;/a&gt;&lt;span dir=&quot;auto&quot; style=&quot;box-sizing: border-box;&quot;&gt;&amp;nbsp;Why Kamelet?&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;&lt;a dir=&quot;auto&quot; href=&quot;https://www.youtube.com/watch?v=onOlnEdOhfM&amp;amp;t=465s&quot; spellcheck=&quot;false&quot; style=&quot;-webkit-user-select: auto; box-sizing: border-box; color: #29a8ff; text-decoration: none;&quot;&gt;07:45&lt;/a&gt;&lt;span dir=&quot;auto&quot; style=&quot;box-sizing: border-box;&quot;&gt;&amp;nbsp;Marketplace of Kamelet!&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;&lt;a dir=&quot;auto&quot; href=&quot;https://www.youtube.com/watch?v=onOlnEdOhfM&amp;amp;t=527s&quot; spellcheck=&quot;false&quot; style=&quot;-webkit-user-select: auto; box-sizing: border-box; color: #29a8ff; text-decoration: none;&quot;&gt;08:47&lt;/a&gt;&lt;span dir=&quot;auto&quot; style=&quot;box-sizing: border-box;&quot;&gt;&amp;nbsp;Using Kamelet as a Kafka user&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;&lt;a dir=&quot;auto&quot; href=&quot;https://www.youtube.com/watch?v=onOlnEdOhfM&amp;amp;t=658s&quot; spellcheck=&quot;false&quot; style=&quot;-webkit-user-select: auto; box-sizing: border-box; color: #29a8ff; text-decoration: none;&quot;&gt;10:58&lt;/a&gt;&lt;span dir=&quot;auto&quot; style=&quot;box-sizing: border-box;&quot;&gt;&amp;nbsp;Building a Kamelet&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;&lt;a dir=&quot;auto&quot; href=&quot;https://www.youtube.com/watch?v=onOlnEdOhfM&amp;amp;t=805s&quot; spellcheck=&quot;false&quot; style=&quot;-webkit-user-select: auto; box-sizing: border-box; color: #29a8ff; text-decoration: none;&quot;&gt;13:25&lt;/a&gt;&lt;span dir=&quot;auto&quot; style=&quot;box-sizing: border-box;&quot;&gt;&amp;nbsp;Running Kamelet on Kubernetes&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;&lt;a dir=&quot;auto&quot; href=&quot;https://www.youtube.com/watch?v=onOlnEdOhfM&amp;amp;t=944s&quot; spellcheck=&quot;false&quot; style=&quot;-webkit-user-select: auto; box-sizing: border-box; color: #29a8ff; text-decoration: none;&quot;&gt;15:44&lt;/a&gt;&lt;span dir=&quot;auto&quot; style=&quot;box-sizing: border-box;&quot;&gt;&amp;nbsp;Demo&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;&lt;a dir=&quot;auto&quot; href=&quot;https://www.youtube.com/watch?v=onOlnEdOhfM&amp;amp;t=1050s&quot; spellcheck=&quot;false&quot; style=&quot;-webkit-user-select: auto; box-sizing: border-box; color: #29a8ff; text-decoration: none;&quot;&gt;17:30&lt;/a&gt;&lt;span dir=&quot;auto&quot; style=&quot;box-sizing: border-box;&quot;&gt;&amp;nbsp;Red Hat OpenShift Streams in action&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;&lt;a dir=&quot;auto&quot; href=&quot;https://www.youtube.com/watch?v=onOlnEdOhfM&amp;amp;t=1166s&quot; spellcheck=&quot;false&quot; style=&quot;-webkit-user-select: auto; box-sizing: border-box; color: #29a8ff; text-decoration: none;&quot;&gt;19:26&lt;/a&gt;&lt;span dir=&quot;auto&quot; style=&quot;box-sizing: border-box;&quot;&gt;&amp;nbsp;Kamelets in action&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px; margin: 5px 0px 15px;&quot;&gt;&lt;span dir=&quot;auto&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;span class=&quot;fr-jiv fr-video fr-deletable&quot; draggable=&quot;true&quot; style=&quot;-webkit-user-select: none; box-sizing: border-box; position: relative; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;fr-draggable&quot; frameborder=&quot;0&quot; height=&quot;360&quot; src=&quot;https://www.youtube.com/embed/onOlnEdOhfM?&amp;amp;wmode=opaque&quot; style=&quot;border-style: none; box-sizing: content-box; max-width: 100%;&quot; width=&quot;640&quot;&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br class=&quot;Apple-interchange-newline&quot; /&gt;</content><link rel='replies' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/4324245612189196881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1207253639848690946/4324245612189196881' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/4324245612189196881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/4324245612189196881'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/2021/06/kamelet-for-streaming-to-kafka.html' title='Kamelet for streaming to Kafka!'/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/onOlnEdOhfM/default.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1207253639848690946.post-6583156231804656370</id><published>2021-05-26T21:20:00.002+08:00</published><updated>2021-05-26T21:37:33.063+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Apache Camel"/><category scheme="http://www.blogger.com/atom/ns#" term="Apicurio"/><category scheme="http://www.blogger.com/atom/ns#" term="Atlasmap"/><category scheme="http://www.blogger.com/atom/ns#" term="Camel Extension"/><category scheme="http://www.blogger.com/atom/ns#" term="Getting Started"/><category scheme="http://www.blogger.com/atom/ns#" term="metrics"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Tekton"/><category scheme="http://www.blogger.com/atom/ns#" term="VS Code"/><title type='text'>Tooling guide for Getting Started with Apache Camel in 2021</title><content type='html'>&lt;div&gt;&lt;span id=&quot;docs-internal-guid-f1b07091-7fff-e355-c90f-d4cc448f6cc7&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Getting Started with Apache Camel ? This post is for you. But I am not going to dive into how to write the Camel route, there are plenty of materials out there that do a better job than me. A good place to get started is the one and only &lt;/span&gt;&lt;a href=&quot;https://camel.apache.org/blog/&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;color: #1155cc; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; text-decoration-skip: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Camel Blog&lt;/span&gt;&lt;/a&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;, it gives you all the latest and greatest news from the community. If you want to start from the basics, I highly recommend Camel in Action II Book. It has everything you need to know about writing Camel. Or join the Camel community &lt;/span&gt;&lt;a href=&quot;https://camel.apache.org/community/mailing-list/&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;color: #1155cc; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; text-decoration-skip: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;mailing list&lt;/span&gt;&lt;/a&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; or &lt;/span&gt;&lt;a href=&quot;https://camel.zulipchat.com/&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;color: #1155cc; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; text-decoration-skip: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Zulip&lt;/span&gt;&lt;/a&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; chat&amp;nbsp; to ask questions, it&#39;s very friendly and welcoming.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span face=&quot;Red Hat Text, sans-serif&quot;&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;background-color: transparent; color: black; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;If you are a returning Camel rider, I would go through this &lt;/span&gt;&lt;a href=&quot;https://camel.apache.org/blog/2019/12/Camel3-Whatsnew.&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;background-color: transparent; color: #1155cc; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration-skip: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;post&lt;/span&gt;&lt;/a&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;background-color: transparent; color: black; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;, where it will get you up to speed on what to expect.&amp;nbsp; Another good resource is the &lt;/span&gt;&lt;a href=&quot;https://camel.apache.org/manual/latest/faq/index.html&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;background-color: transparent; color: #1155cc; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration-skip: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;FAQ&lt;/span&gt;&lt;/a&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;background-color: transparent; color: black; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; page. I found the majority of the getting started enquiries can be found here.&amp;nbsp;&lt;/span&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;background-color: transparent; color: black; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;background-color: transparent; color: black; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: white; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif;&quot;&gt;This post will be about tools that can help you, when it comes to running a Camel application in its lifetime. From design, implementation, testing, deployment and monitoring. Of course this is strictly my opinion. Any suggestions or comments are welcome.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: white; caret-color: rgb(34, 38, 53); color: #222635; font-family: Cambria, serif; font-size: 19px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;background-color: transparent; color: black; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Here is a quick collection of the tools I recommend.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;br class=&quot;Apple-interchange-newline&quot; /&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTD4C6auQCGzagcH0ovTrrF8CDD-hgl_RMEaDtGm9SK1OuTW3umz4bggDSxemb_1nHhJqlooAmcNF0eWxs6cIHdA4mAlJWmuRqVi9QdGjEypk9U_FtwWRVxLzbvScGfQPopT5bMdRfvp3S/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1084&quot; data-original-width=&quot;2048&quot; height=&quot;339&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTD4C6auQCGzagcH0ovTrrF8CDD-hgl_RMEaDtGm9SK1OuTW3umz4bggDSxemb_1nHhJqlooAmcNF0eWxs6cIHdA4mAlJWmuRqVi9QdGjEypk9U_FtwWRVxLzbvScGfQPopT5bMdRfvp3S/w640-h339/Screen+Shot+2021-05-13+at+1.53.38+PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span id=&quot;docs-internal-guid-497d3a12-7fff-29ae-5686-8739b79ec381&quot; style=&quot;text-align: start;&quot;&gt;&lt;h3 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 4pt; margin-top: 16pt;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;color: #434343; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Design &amp;amp; Implementation&lt;/span&gt;&lt;/h3&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;There are several different IDEs out there that have language support for Camel. My current goto is the &lt;/span&gt;&lt;a href=&quot;https://code.visualstudio.com/&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;color: #1155cc; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; text-decoration-skip: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Visual Code Studio&lt;/span&gt;&lt;/a&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;. VS Code itself has very primitive support for Java developers, but it comes with a large variety of extensions for you to customize it, and install all the tools you need. Speaking of extension, there is a must have… “&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=redhat.apache-camel-extension-pack&quot;&gt;Extension Pack for Apache Camel by Red Hat&lt;/a&gt;”. It contains the essentials for developing Camel. I recommend checking out the &lt;a href=&quot; https://www.youtube.com/channel/UCsUzmA5antdAKXMTugN1vfw&quot;&gt;Aurélien Pupier youtube channel&lt;/a&gt; for updates!&lt;/span&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;To begin a project, it’s always good to have some help to set the basic structure. You can either use the Project Initializer that comes with the Apache Camel by Red Hat Extension in VS Code that will generate the base project for you. Or you can always go to the Quarkus start coding page, adding the Camel dependencies to create the base project, but one downside of the Quarkus start coding page, it will not create the template extended RouteBuilder class for you.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;No matter what runtime you choose, you are still writing Camel DSL (Domain Specific Language), you have the latest and greatest support from the camel extension, where it will help you with autocomplete, validating your Camel code.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://github.com/camel-tooling/vscode-camel-extension-pack/raw/master/images/CreateProjectFromTopLevelCommand.gif&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;485&quot; data-original-width=&quot;800&quot; height=&quot;388&quot; src=&quot;https://github.com/camel-tooling/vscode-camel-extension-pack/raw/master/images/CreateProjectFromTopLevelCommand.gif&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Mapping data between formats can be tedious, especially with larger documents or more complex structure. But using the &lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt; tooling can help you map between two data sources with a drag and drop user interface, so you will be able to visualize the mappings. The tool will generate an “.adm” file, place the file into your Camel project. You can then use the &lt;i&gt;camel-atlasmap&lt;/i&gt; components to run the mapping.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGpqlGJPgv5Xk3oGqpAwIzHLLkHs9pOJPpyE23n5_tzv9yYjyeQkSG3foqFE1tg9ajufky5ddxRPzAEVn_RsMNkwMdTjIevOB9kyi1lL15Z6-IwJmgO5k6nSi2myaBMyt_YWiihMylC_o3/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1512&quot; data-original-width=&quot;2048&quot; height=&quot;295&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGpqlGJPgv5Xk3oGqpAwIzHLLkHs9pOJPpyE23n5_tzv9yYjyeQkSG3foqFE1tg9ajufky5ddxRPzAEVn_RsMNkwMdTjIevOB9kyi1lL15Z6-IwJmgO5k6nSi2myaBMyt_YWiihMylC_o3/w400-h295/Screen+Shot+2021-05-17+at+4.24.54+PM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: courier; text-indent: 36pt; white-space: pre-wrap;&quot;&gt;from(&quot;servicenow:xxxxxx....&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;span style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&amp;nbsp;&amp;nbsp;.split().body()&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;span style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.marshal().json()&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.to(&quot;atlasmap:&lt;/span&gt;&lt;span style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;servicenow.adm&lt;/span&gt;&lt;span style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&quot;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;span style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.to(&quot;kafka:xxx?brokersxxx&quot;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;RESTful API is another popular implementation in Camel, I highly recommend you take advantage of the Apicurio project, where it provides a GUI interface for designing the API contract. Making contract first application development a lot easier. For more details, take a look at my previous &lt;a href=&quot;https://dzone.com/articles/contract-first-api-design-with-apicurio-and-red-ha&quot;&gt;blog&lt;/a&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhorSa77yE3Ys5he9uICC99cQtI8_FZ_0uZGMHrGta7dvkscvfCtUWo6I6AoAKx2s8BtqZcTGWG7CwanqKrID4-gdiQ12xeOLl6utpFBCXlCoOA24kmJpGbbxwVIslB0C2PCW5Bo6Poh0Sn/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1662&quot; data-original-width=&quot;2048&quot; height=&quot;519&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhorSa77yE3Ys5he9uICC99cQtI8_FZ_0uZGMHrGta7dvkscvfCtUWo6I6AoAKx2s8BtqZcTGWG7CwanqKrID4-gdiQ12xeOLl6utpFBCXlCoOA24kmJpGbbxwVIslB0C2PCW5Bo6Poh0Sn/w640-h519/Screen+Shot+2021-05-17+at+4.27.17+PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Another nice complements to the toolset is the &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=brunoNetId.camel-designer&quot;&gt;Camel Designer&lt;/a&gt;, this is another extension in VS Code by Bruno, this can help you visualize the design of camel processing flow. So you will be able to see what your camel route does in a quick glance. &lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://github.com/brunoNetId/camel-designer/raw/HEAD/docs/images/readme/vs-extension.gif&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;450&quot; data-original-width=&quot;800&quot; height=&quot;360&quot; src=&quot;https://github.com/brunoNetId/camel-designer/raw/HEAD/docs/images/readme/vs-extension.gif&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;h3 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 4pt; margin-top: 16pt; text-align: left;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;color: #434343; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Testing&lt;/span&gt;&lt;span style=&quot;color: #434343; font-family: Arial; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeEqbAFTjahb8LBSwvOd2aHLhsMXN9VemyZqGx4mykVUKGNSgHT77740bsJ4_7H8VV1l5yVQM_wLzxGTuDhUPQi2iZt8b2TWdaf7A1oU_YmGSu6hNTngn2eXg1NbJswTVC-si7_qK2QA2R/&quot; style=&quot;margin-left: 1em; margin-right: 1em; white-space: pre-wrap;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1097&quot; data-original-width=&quot;2048&quot; height=&quot;342&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeEqbAFTjahb8LBSwvOd2aHLhsMXN9VemyZqGx4mykVUKGNSgHT77740bsJ4_7H8VV1l5yVQM_wLzxGTuDhUPQi2iZt8b2TWdaf7A1oU_YmGSu6hNTngn2eXg1NbJswTVC-si7_qK2QA2R/w640-h342/Screen+Shot+2021-05-24+at+4.51.03+PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Camel can easily wire up unit tests in your preferred testing framework. My past experience has been great with using JUnit for creating my test cases.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;What I normally would do is create a java Class for each test case (Extend “CamelTestSupport” class). Where it can kick off your camel route with mock endpoints, loading set of data or even stub out the actual endpoint&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;When testing integration, introducing Behavior-Driven Development(BDD) Testing is a development practice, as it’s black box testing nature allows it to better mimic user input and expectation, and can test more complex scenarios when compared to Test-Driven Development(TDD). Consider using the “&lt;/span&gt;&lt;a href=&quot;https://citrusframework.org/samples/camel-context/&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;color: #1155cc; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; text-decoration-skip: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Citrus Testing Framework&lt;/span&gt;&lt;/a&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;” for building out BDD test cases. You can define the test scenario descriptions with a &quot;Given-When-Then&quot; structure in a feature file, as well as a simple setup for mimicking the common endpoints such as Kafka, AMQP, JMS, REST… etc.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;span style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;Feature: integration runs&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;span style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;Background:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;span style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Given load variables namespace.properties&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;span style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Given URL: http://camel-hello-quarkus.${namespace}.svc.cluster.local:8080&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;span style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;Scenario: Checking GET Method&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;span style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;When send GET /prescription?profileid=123456&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;span style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Then verify HTTP response body: {&quot;profileid&quot;: 123456, &quot;pharmancy&quot;: &quot;CVS&quot; }&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;span style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Then receive HTTP 200 OK&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;I have also been using a spinoff project from Citrus called YAKs to do my BDD testing on Kubernetes(OpenShift) platform. And I LOVED it. Simply because 1st, the lifecycle of the test was managed by the YAKs operator, meaning the test was run on a separate instance, that is where the client supposed the call, and also the YAKs operator takes in the feature, and does the test based on it. You can run it separately or plug it into your CI/CD pipeline. &lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7whuxrZis5STqpZhJCkT34AxIvLH6lIGyoqnLWT90mGk6s8YPScrX0hln-KoBRyjmFiGevjXdFu5GNySDn3ZA7qe0H5GAN3TJGy3TfX7MVqvtLPco8-41D1RUOuuxVYI5YJNwcRiMwcWS/s2048/Screen+Shot+2021-05-25+at+4.33.46+PM.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1113&quot; data-original-width=&quot;2048&quot; height=&quot;348&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7whuxrZis5STqpZhJCkT34AxIvLH6lIGyoqnLWT90mGk6s8YPScrX0hln-KoBRyjmFiGevjXdFu5GNySDn3ZA7qe0H5GAN3TJGy3TfX7MVqvtLPco8-41D1RUOuuxVYI5YJNwcRiMwcWS/w640-h348/Screen+Shot+2021-05-25+at+4.33.46+PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;h3 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 4pt; margin-top: 16pt; text-align: left;&quot;&gt;&lt;span style=&quot;color: #434343; font-family: inherit; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Platform&lt;/span&gt;&lt;/h3&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;I have been using &lt;/span&gt;&lt;a href=&quot;https://www.openshift.com/&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;color: #1155cc; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; text-decoration-skip: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;OpenShift(Kunerenets)&lt;/span&gt;&lt;/a&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; for managing all the running instances. It&#39;s just easier when there are hundreds of Camels running, it manages the scaling, resources, configuration and load-balancing for me. As well as a better deployment module (images). There are so many articles out there talking about the benefits of running a container &amp;amp; container management, so I won’t dive into it.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;h3 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 4pt; margin-top: 16pt; text-align: left;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;color: #434343; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;CI/CD&lt;/span&gt;&lt;/h3&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Jenkin was on my list for a long time when it comes to building the pipeline for my Camel application. Basically using the maven jenkins plugin for compiling and deploying, and using the OpenShift plugin to do the canary releases. And recently, I have been using the Tekton pipeline, it’s built-in on OpenShift, so there is no need to install a separate instance and manage it. The Kubernetes platform itself will become the CI/CD platform itself. Here is an example of how it works with the Camel projects. I will write another deep dive into how it works.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIPnAkJRQCVefw3jNJKYu-F37PAlNYuWhvXqnbGotymarDU9C3zKRswFK1646r_l6jBTwhmM44oIzykw6YjrBAk5H4luTD2bcBUQXlFnV-Lttp572xPZNs95pWA8r7bHLfzAtlDlMCL623/s2048/Screen+Shot+2021-05-26+at+9.17.01+AM.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1186&quot; data-original-width=&quot;2048&quot; height=&quot;370&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIPnAkJRQCVefw3jNJKYu-F37PAlNYuWhvXqnbGotymarDU9C3zKRswFK1646r_l6jBTwhmM44oIzykw6YjrBAk5H4luTD2bcBUQXlFnV-Lttp572xPZNs95pWA8r7bHLfzAtlDlMCL623/w640-h370/Screen+Shot+2021-05-26+at+9.17.01+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;h3 dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 4pt; margin-top: 16pt; text-align: left;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;color: #434343; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Monitoring&lt;/span&gt;&lt;/h3&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;&lt;span face=&quot;&amp;quot;Red Hat Text&amp;quot;, sans-serif&quot; style=&quot;font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;With Camel 3, in order to collect and export the metrics, you will need to specifically add the microprofile-metrics dependency. And by using Prometheus to scrape metrics on the platform. It stores all scraped samples locally and aggregate the time series data. I then use Grafana to visualize the collected data, and create a dashboard to monitor all the camel routes. &lt;/span&gt;&lt;/p&gt;&lt;br class=&quot;Apple-interchange-newline&quot; style=&quot;text-align: start;&quot; /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghWPhAP-J50FehDygdv-pZXxiS8IXrlL2QVQtnJjtgThIOXZmZym2bf6oA8JyhnbmeDnXMrwN8nTqduvD0a-Wz6p71DZd1aD5FuukrMr22QsK5ehaYcdShh0J3wRXTJ4qPJB3imo0Pr1rL/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;866&quot; data-original-width=&quot;1908&quot; height=&quot;290&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghWPhAP-J50FehDygdv-pZXxiS8IXrlL2QVQtnJjtgThIOXZmZym2bf6oA8JyhnbmeDnXMrwN8nTqduvD0a-Wz6p71DZd1aD5FuukrMr22QsK5ehaYcdShh0J3wRXTJ4qPJB3imo0Pr1rL/w640-h290/Screen+Shot+2021-05-18+at+11.26.37+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Also checkout this video and see how things work:&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;266&quot; src=&quot;https://www.youtube.com/embed/T26KKY5U-5Q&quot; width=&quot;320&quot; youtube-src-id=&quot;T26KKY5U-5Q&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/6583156231804656370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1207253639848690946/6583156231804656370' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/6583156231804656370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/6583156231804656370'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/2021/05/tooling-guide-for-getting-started-with.html' title='Tooling guide for Getting Started with Apache Camel in 2021'/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTD4C6auQCGzagcH0ovTrrF8CDD-hgl_RMEaDtGm9SK1OuTW3umz4bggDSxemb_1nHhJqlooAmcNF0eWxs6cIHdA4mAlJWmuRqVi9QdGjEypk9U_FtwWRVxLzbvScGfQPopT5bMdRfvp3S/s72-w640-h339-c/Screen+Shot+2021-05-13+at+1.53.38+PM.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1207253639848690946.post-2299473377097218684</id><published>2020-11-09T23:53:00.001+08:00</published><updated>2020-11-11T07:10:33.808+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AMQ Streams"/><category scheme="http://www.blogger.com/atom/ns#" term="Apache Camel"/><category scheme="http://www.blogger.com/atom/ns#" term="Contract First App Dev"/><category scheme="http://www.blogger.com/atom/ns#" term="Fuse"/><category scheme="http://www.blogger.com/atom/ns#" term="Kafka"/><category scheme="http://www.blogger.com/atom/ns#" term="Red Hat Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="Schema Registry"/><category scheme="http://www.blogger.com/atom/ns#" term="Service Registry"/><title type='text'>Contract first development - the event driven way! </title><content type='html'>&lt;span id=&quot;docs-internal-guid-6c984566-7fff-2405-c19a-78c280f68c5d&quot;&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Introduction:&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Contract first application development is not limited to synchronized RESTFul API calls. With the adoption of event driven architecture, more developers are demanding a way to set up contracts between these asynchronous event publishers and consumers.. Sharing what data format that each subscriber is consuming, what data format is used from the event publisher, in a way OpenAPI standards is going to be very helpful.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;But in the asynchronous world, it is ever more complex, not only do you need to be caring about the data schema, there are different protocols, serializing, deserializing mechanisms, and various support libraries. In fact there are talks on AsyncAPI. But I am going to show you that what can be done today,&amp;nbsp; is to use ONE of the most commonly used solutions in building EDA, “Kafka”. And show how to do Contract First Application Development using Camel + Apicurio Registry.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;The Solutions:&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;I will be using Red Hat’s version of Kafka, AMQ Streams,&amp;nbsp; APIcurio as my service registry and finally using Apache Camel to build the contract first event driven application. . To spice things up I am going to be Avro and Protobuf. &amp;nbsp; (Normally you want to choose between one of them.)&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Rather than sending plain text like JSON or XML, binary representation is more compacted and efficient. And this works well with Kafka, since Kafka is using binary message format. In short,&amp;nbsp; Avro and Protobuf are just ways to serialize/deserialize the data. Both also provide schema in order to serialize/deserialize data. And we can use it as the contract for each topic that is publishing/consuming the events.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Avro is from Hadoop, more commonly used in Kafka, as it’s default serialization.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Protobuf is from Google, has two versions, here I am using proto 3.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Apricurio Registry is a datastore for standard event schemas and API designs. We are going to use it for our Schema management. Where we will use it to store all the schemas, and use it’s client serializer/deserializer to validate the event messages.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Camel is the perfect framework for connecting the dots, transforming messages to desired states. As it provides built-in libraries to connect to Kafka, built-in data format transforms for Avro/Protobuf. (This is a great feature if you want to process the body, it simplifies and marshal the data into POJO.)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;There are two different approaches to do this:&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;ol style=&quot;margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;li dir=&quot;ltr&quot; style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: upper-alpha; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Manually upload schema, and using default Camel dataformat component to&amp;nbsp; serialize/deserialize&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li dir=&quot;ltr&quot; style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: upper-alpha; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Using the Apicurio Registry libraries to upload schema and serialize/deserialize&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Environment&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Here is what you need to have in the environment.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;ol style=&quot;margin-bottom: 0px; margin-top: 0px;&quot;&gt;&lt;li dir=&quot;ltr&quot; style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: upper-alpha; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Kafka Cluster (AMQ Streams)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li dir=&quot;ltr&quot; style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: upper-alpha; vertical-align: baseline; white-space: pre;&quot;&gt;&lt;p dir=&quot;ltr&quot; role=&quot;presentation&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Apricurio Service Registry&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Solution A Camel built-in Dataformat components: Steps in a glance&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;, using Camel Quarkus.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Step One:&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Go to this page to &lt;/span&gt;&lt;a href=&quot;https://code.quarkus.io/&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;color: #1155cc; font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; text-decoration-skip: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;https://code.quarkus.io/&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; to generate your bootstrap quarkus application.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;You will have a sample Camel project ready to go. Add all the dependencies needed for the project. Depending on the endpoint you want to connect to, and add the dependencies into the pom.xml file under the project.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Add the dependencies you will need to convert between two serialize mechanisms, and place it into the Kafka topics.&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.camel&amp;lt;/groupId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;camel-quarkus-protobuf&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.camel&amp;lt;/groupId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;camel-quarkus-avro&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.camel&amp;lt;/groupId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;camel-quarkus-kafka&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.camel&amp;lt;/groupId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;camel-quarkus-stream&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Add plugins to download the schema from registry. (Of course you can register a schema from local code too). But&amp;nbsp; I am assuming there is a separate person that will design and handle schema management.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;io.apicurio&amp;lt;/groupId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;apicurio-registry-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;${registry.version}&amp;lt;/version&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;executions&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;execution&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;phase&amp;gt;generate-sources&amp;lt;/phase&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goals&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goal&amp;gt;download&amp;lt;/goal&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/goals&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;registryUrl&amp;gt;http://localhost:8080/api&amp;lt;/registryUrl&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;ids&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param1&amp;gt;demo-avro&amp;lt;/param1&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;param1&amp;gt;demo-protobuf&amp;lt;/param1&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/ids&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;outputDirectory&amp;gt;${project.basedir}/src/main/resources&amp;lt;/outputDirectory&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/execution&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/executions&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-style: italic; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Note&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;: In configuration,&amp;nbsp; enter the location of the Registry. Also make sure you tell the plugin what schema to download and where to place it in the project.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Step Two&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Create the schema. Login to your Apricurio Service Registry, upload the schema.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Setup the topics that you want to use to populate the events.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Add plugins to generate the POJO that we are going to be using for marshalling/unmarshalling. And it’s easier if we want to further process the data.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;lt;plugin&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.avro&amp;lt;/groupId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;avro-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;1.8.1&amp;lt;/version&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;executions&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;execution&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;phase&amp;gt;generate-sources&amp;lt;/phase&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goals&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goal&amp;gt;schema&amp;lt;/goal&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/goals&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;sourceDirectory&amp;gt;${project.basedir}/src/main/resources&amp;lt;/sourceDirectory&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;outputDirectory&amp;gt;${project.basedir}/src/main/java&amp;lt;/outputDirectory&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/execution&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/executions&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.xolstice.maven.plugins&amp;lt;/groupId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;protobuf-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;0.6.1&amp;lt;/version&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;extensions&amp;gt;true&amp;lt;/extensions&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;executions&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;execution&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goals&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goal&amp;gt;compile&amp;lt;/goal&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/goals&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;protocArtifact&amp;gt;com.google.protobuf:protoc:${protobuf-version}:exe:${os.detected.classifier}&amp;lt;/protocArtifact&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;outputDirectory&amp;gt;${project.basedir}/src/main/java&amp;lt;/outputDirectory&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;protoSourceRoot&amp;gt;${project.basedir}/src/main/resources&amp;lt;/protoSourceRoot&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;clearOutputDirectory&amp;gt;false&amp;lt;/clearOutputDirectory&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/execution&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/executions&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;After adding the plugins, run the following command:&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;`` mvn compile ``&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;It will generate the corresponding java source base on the schema that was loaded from the registry.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Step Three&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Add your Camel route in the MyRouteBuilder.java. Depending on what you want to do with the object.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;For example, the code here demonstrates how to use the built-in Protobuf component, and transform to the Protobuf object. Before sending the data as Byte Array into the Kafka Topics.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;.marshal().protobuf(&quot;demo.camel.TransactionProtos$Transaction&quot;)&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;.log(&quot;Sender: ${header.sender}&quot;)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .toD(&quot;kafka:webtrans-quarkus?brokers=localhost:9092&amp;amp;key=${header.sender}&amp;amp;serializerClass=org.apache.kafka.common.serialization.ByteArraySerializer&quot;)&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Or this shows you how to use the built-in Camel Avro component to transform before sending the data as Byte Array into the Kafka Topics&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;AvroDataFormat format = new AvroDataFormat(Transaction.SCHEMA$);&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;....&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;.marshal(format)&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;.toD(&quot;kafka:transrec-quarkus?brokers=localhost:9092&amp;amp;groupId=producergroup&amp;amp;serializerClass=org.apache.kafka.common.serialization.ByteArraySerializer&quot;)&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;And it’s done.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Here are the working Camel Quarkus Project:&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;I will discuss more in the next post.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;-----&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Instead of manually uploading the schemas to the registry, we will be using the Apicurio Registry libraries, by adding it to the Kafka configuration, it will automatically save the schema in the registry.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Here is how it’s done,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Solution B - Apricurio Registry Libraries : Steps in a glance&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;, using Camel Java Main.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Step One:&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Create a Camel Project using the archetypes.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: #fefefe; color: #4f51ae; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 10.5pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;mvn archetype:generate \&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: #fefefe; color: #4f51ae; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 10.5pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;-DarchetypeGroupId=org.apache.camel.archetypes \&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: #fefefe; color: #4f51ae; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 10.5pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;-DarchetypeArtifactId=camel-archetype-java \&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;background-color: #fefefe; color: #4f51ae; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 10.5pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;-DarchetypeVersion=3.5.0&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Add the dependencies you will need to convert between two serialize mechanisms, and place it into the Kafka topics.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;io.apicurio&amp;lt;/groupId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;apicurio-registry-utils-converter&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;${registry.version}&amp;lt;/version&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.glassfish.jersey.core&amp;lt;/groupId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;jersey-common&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;2.32&amp;lt;/version&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.camel&amp;lt;/groupId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;camel-kafka&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;dependency&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.camel&amp;lt;/groupId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;camel-stream&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Step Two:&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Create the schema and place the schema files into your application resource folder:&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-style: italic; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;${project.basedir}/src/main/resources&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Setup the topics that you want to use to populate the events.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Add plugins to generate the POJO that we are going to be using for marshalling/unmarshalling. And it’s easier if we want to further process the data.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;lt;plugin&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.avro&amp;lt;/groupId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;avro-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;1.8.1&amp;lt;/version&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;executions&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;execution&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;phase&amp;gt;generate-sources&amp;lt;/phase&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goals&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goal&amp;gt;schema&amp;lt;/goal&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/goals&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;sourceDirectory&amp;gt;${project.basedir}/src/main/resources&amp;lt;/sourceDirectory&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;outputDirectory&amp;gt;${project.basedir}/src/main/java&amp;lt;/outputDirectory&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/execution&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/executions&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.xolstice.maven.plugins&amp;lt;/groupId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;protobuf-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;0.6.1&amp;lt;/version&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;extensions&amp;gt;true&amp;lt;/extensions&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;executions&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;execution&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goals&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goal&amp;gt;compile&amp;lt;/goal&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/goals&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;protocArtifact&amp;gt;com.google.protobuf:protoc:${protobuf-version}:exe:${os.detected.classifier}&amp;lt;/protocArtifact&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;outputDirectory&amp;gt;${project.basedir}/src/main/java&amp;lt;/outputDirectory&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;protoSourceRoot&amp;gt;${project.basedir}/src/main/resources&amp;lt;/protoSourceRoot&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;clearOutputDirectory&amp;gt;false&amp;lt;/clearOutputDirectory&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/execution&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/executions&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;After adding the plugins, run the following command:&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;`` mvn compile ``&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Step Three:&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Add your Camel route in the MyRouteBuilder.java. Configure the Kafka component with the Apicurio registry libraries.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;For example, the code here demonstrates how to serialize Avro and deserialize Protobuf with Apicurio registry libraries. And automatically register the schema in the registry. Note you need to point to the registry URL by providing the “apicurio.registry.url”.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;serializerClass=io.apicurio.registry.utils.serde.AvroKafkaSerializer&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;deserializerClass=io.apicurio.registry.utils.serde.ProtobufKafkaDeserializer&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;additionalProperties.apicurio.registry.url=&lt;/span&gt;&lt;a href=&quot;http://localhost:8080/api&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;color: #1155cc; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; text-decoration-skip: none; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://localhost:8080/api&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;additionalProperties.apicurio.registry.global-id=io.apicurio.registry.utils.serde.strategy.GetOrCreateIdStrategy&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;And in the Camel route, instantiate the two generated Avro/Protobuf classes aldds, work normally with your camel integration logic, and simply send it to the Kafka endpoint that was configured on the previous step.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;For example, this bean will create the ProtoBuf class and then sent to Kafka topics&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;.bean(demo.camel.TransactionProtos.Transaction.class, &quot;parseFrom(${body})&quot;)&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;.toD(&quot;kafka:webtrans?key=${header.sender}&quot;)&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;For example, the method will create the Avro class and then sent to Kafka topics&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;setBody(method(this,&quot;setAvroValue( ${originalmsg.userid},${originalmsg.amt})&quot;))&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 9pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;.toD(&quot;kafka:transrec?serializerClass={{serializerClass}}&quot;+registryconfigAvro)&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;You can find a working github example, in the link.That’s all for this post.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;In my next post, I will walk you through the details of the example.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Summary&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Here is a video that explain everything with diagrams (NO CODE)&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;266&quot; src=&quot;https://www.youtube.com/embed/MljKMXxpAxQ&quot; width=&quot;320&quot; youtube-src-id=&quot;MljKMXxpAxQ&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Apricurio Registry is a datastore to help topic owners to&amp;nbsp; manage the schema of it’s dat format.&amp;nbsp; (API for Rest endpoints). When trying to publish/subscribe to the topic, developers will have access to the already defined schema contract. And using Apache Camel, to implement the actual integration code with simple configuration or built-in data format components.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;br class=&quot;Apple-interchange-newline&quot; /&gt;</content><link rel='replies' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/2299473377097218684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1207253639848690946/2299473377097218684' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/2299473377097218684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/2299473377097218684'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/2020/11/contract-first-development-event-driven.html' title='Contract first development - the event driven way! '/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/MljKMXxpAxQ/default.jpg" height="72" width="72"/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1207253639848690946.post-6663094158212718924</id><published>2020-07-09T02:16:00.000+08:00</published><updated>2020-07-09T02:16:14.565+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agile Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="Camel K"/><category scheme="http://www.blogger.com/atom/ns#" term="Kafka"/><category scheme="http://www.blogger.com/atom/ns#" term="microservices"/><category scheme="http://www.blogger.com/atom/ns#" term="Red Hat Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="Serverless"/><title type='text'>Serverless Integration Components</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Serverless should not be optional, but instead it should be there for all cloud native environments. Of course not all applications should adopt serverless. But if you look closer, the majority of the modules in the application are stateless, often stash away in the corner, that are needed occasionally. Some need to to handle loads that are highly fluctuated. These are the perfect candidates to run as serverless.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;b id=&quot;docs-internal-guid-507b9077-7fff-c3a7-b440-490f6d1ce602&quot; style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Serverless let developers focus on code instead of worrying about infrastructural setups. To provide this environment, along with proper monitoring and reliable backbone to handle large throughput of events.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;This is what Serverless Integration (Kubernetes based) looks like,&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Everything is based on containers. Why care about the underlying technologies for serverless ? Shouldn’t it all be transparent? If your goal is to host or build on a hybrid/multi cloud that is locked-in free from all vendors, it means there are NOT just developers involved in the picture. You will eventually need cooperation between teams and work with all sorts of applications such as traditional services and microservices. Having unification and standardization technology, will flatten the learning curve for teams to adopt new kinds of applications and make maintenance less complex.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;From the development to the platform everything should seamlessly work together, and being able to automate and manage with ease.&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIUsdAs8ljeXw8_2Z2BpiTgIT0xMOeR5xtyYP2VJq_6X6cJ_MQl0-4N1Lt4xLQu9CRVEXtNtbczkr221ej027Ntqxm8TWCHDwE3K0Od0YoBXQTM_jeKltH5wQ2rgBqznZshm2K5dEmeGzE/s1600/Serverless+Architecture.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIUsdAs8ljeXw8_2Z2BpiTgIT0xMOeR5xtyYP2VJq_6X6cJ_MQl0-4N1Lt4xLQu9CRVEXtNtbczkr221ej027Ntqxm8TWCHDwE3K0Od0YoBXQTM_jeKltH5wQ2rgBqznZshm2K5dEmeGzE/s640/Serverless+Architecture.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 14.666666984558105px; white-space: pre-wrap;&quot;&gt;Let’s break down all the elements.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 14.666666984558105px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;The Platform:&amp;nbsp; A Platform that provides full infrastructure and platform management with self service capability, service discovery and applying container policy and compliance.&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgblYecRsxR_VoWe68m8cnPRbzHG4e0Wm6JhBs8s_4_7Ac8XvppK6j802XvwLZho3u31E1u2_c3G6JEcnHFY5Hsv4JhevJp1ULwm9qVyfEc7gzfvLy2w50Y7vBgTtWRCywEBKNhGQvkrtaE/s1600/Platform.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;236&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgblYecRsxR_VoWe68m8cnPRbzHG4e0Wm6JhBs8s_4_7Ac8XvppK6j802XvwLZho3u31E1u2_c3G6JEcnHFY5Hsv4JhevJp1ULwm9qVyfEc7gzfvLy2w50Y7vBgTtWRCywEBKNhGQvkrtaE/s640/Platform.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;The Serverless Platform:&amp;nbsp; Handles autoscaling of the functions/application. Abstraction of the underlying infrastructure.&amp;nbsp; Setup revision of the deployments for easy rollback. And unify events for the publishers and consumers.&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6E25D6BTGIBTpeL2wTCmUUFFpUFPZ3lnBb2ti7-OBgmQS1WJpm7CXKJpbDlOyczDCDATcAaIxLBk6j7K4ro4tX33SMnqLBHSKitNxfI6Lj8SDrqHqYH93P8b9jSVPI2YVNd9Ejsz3PKCU/s1600/03-serverless.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;344&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6E25D6BTGIBTpeL2wTCmUUFFpUFPZ3lnBb2ti7-OBgmQS1WJpm7CXKJpbDlOyczDCDATcAaIxLBk6j7K4ro4tX33SMnqLBHSKitNxfI6Lj8SDrqHqYH93P8b9jSVPI2YVNd9Ejsz3PKCU/s640/03-serverless.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;The Event Mesh: Events are published to the mesh, and to the distributed consumers. The basic structure of the events are consistent and should be portable among platforms. All the events are flexible, governed and pushed quickly.&amp;nbsp; Powered by a reliable streaming network, it helps to store the streams of event for tracing, auditing or later replay for big data processing/ AI/ML datasets.&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtA2KGJ4N0VplO6-2wtce7HTwUI9KXEahCqAABDgqs2_j6XuPjrHmor13SwPy7x62_YDE6kRuoAKiFx9MwAbgBib8kcK3SMMh1cnmBaQitX-DP2W3kAgl5hIT8oo0GcIMUgZTqd_uhtvKq/s1600/04-eventmesh.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtA2KGJ4N0VplO6-2wtce7HTwUI9KXEahCqAABDgqs2_j6XuPjrHmor13SwPy7x62_YDE6kRuoAKiFx9MwAbgBib8kcK3SMMh1cnmBaQitX-DP2W3kAgl5hIT8oo0GcIMUgZTqd_uhtvKq/s640/04-eventmesh.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;The Integration Functions:&amp;nbsp; Typical characteristics of serverless integration include, small, lightweight, stateless and event driven. These characteristics allow the application to be elastic, to tackle the under/over provisioning that we face today. From the operation side these are the&amp;nbsp; applications that cease and quickly spin up after being triggered by events. For better resource optimization. And for developers&amp;nbsp; it is a simple modular code snippet that they write and gets automatically spun up. So they can focus on code instead of deployment related issues. And Integration functions are the application that typically handles routing, transformation of data payload in events, and also other composing and orchestrating problems.&amp;nbsp; Also commonly used for connecting to external services, and bridges between systems.&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRnvzlwgwZfA8bMjDf0yFRC6Pp5XGK94fR2E6Jx-t9y298mGAPKFtEmZHR5lVdhc9PfK-5xMNxAthR_1bNUDBpO00FjrfwawwSqAjTmKfbZi46wzWiWpZzhqh1aVLQzKSK91ERs-PEnid1/s1600/05-functions.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;358&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRnvzlwgwZfA8bMjDf0yFRC6Pp5XGK94fR2E6Jx-t9y298mGAPKFtEmZHR5lVdhc9PfK-5xMNxAthR_1bNUDBpO00FjrfwawwSqAjTmKfbZi46wzWiWpZzhqh1aVLQzKSK91ERs-PEnid1/s640/05-functions.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;The microservice or the long running applications: These are the long running applications that contain states, heavier or that is always being called. Some of them will send events to the mesh to trigger serverless functions to initiate and start, or simply another consumer of the events.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;The Service Registry: For sharing standard event schemas and API designs across API and event-driven architectures, either for events listening by serverless function or regular applications.&amp;nbsp; Decoupling data structure and managing data types at runtime.&lt;/span&gt;&lt;/div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXZC7OpVX4bfd-yBpdDROCTFLWEPuVi0Mk5F82TKjBcQIdA_zg1WNJRpL7n83FTF7sF3CF2wrlqRKcu34MrzYYilywrYntf-r1_y4aIVr5nDemnzz915CoCn10vRnKD3NQ3Vja3FfIJx31/s1600/06-serviceregistry.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;330&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXZC7OpVX4bfd-yBpdDROCTFLWEPuVi0Mk5F82TKjBcQIdA_zg1WNJRpL7n83FTF7sF3CF2wrlqRKcu34MrzYYilywrYntf-r1_y4aIVr5nDemnzz915CoCn10vRnKD3NQ3Vja3FfIJx31/s640/06-serviceregistry.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;The API management: Gateway to secure and manage outgoing API endpoints. With access control and limits for the consumer, managing consoles and data analytics for access endpoints.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw83k7O1FqagvuM5AzmDVnMLtBzS7nSsfcnwDwZstumuLmPAcPK5dgRExXvWd9kA8axAILqbLTXSlXOsf-2prbQ3gvCCLooL7lZmAugI7JzmoOIisAAELfGA5h53mm3-DcdmjbbhofltRx/s1600/07-apigateway.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;264&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw83k7O1FqagvuM5AzmDVnMLtBzS7nSsfcnwDwZstumuLmPAcPK5dgRExXvWd9kA8axAILqbLTXSlXOsf-2prbQ3gvCCLooL7lZmAugI7JzmoOIisAAELfGA5h53mm3-DcdmjbbhofltRx/s640/07-apigateway.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;Red Hat Display&amp;quot;, sans-serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;These are again, my two cents on the components that you need to have in order to deliver a complete serverless application environment.&amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;br class=&quot;Apple-interchange-newline&quot; /&gt;</content><link rel='replies' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/6663094158212718924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1207253639848690946/6663094158212718924' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/6663094158212718924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/6663094158212718924'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/2020/07/serverless-integration-components.html' title='Serverless Integration Components'/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIUsdAs8ljeXw8_2Z2BpiTgIT0xMOeR5xtyYP2VJq_6X6cJ_MQl0-4N1Lt4xLQu9CRVEXtNtbczkr221ej027Ntqxm8TWCHDwE3K0Od0YoBXQTM_jeKltH5wQ2rgBqznZshm2K5dEmeGzE/s72-c/Serverless+Architecture.png" height="72" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1207253639848690946.post-2418306302048501221</id><published>2020-04-23T20:30:00.000+08:00</published><updated>2020-04-23T20:30:08.868+08:00</updated><title type='text'>Six reasons why you will love Camel K</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;a href=&quot;https://arabiconline.eu/wp-content/uploads/2017/08/photo-960x675.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img alt=&quot;Camels and beauty - ARABIC ONLINE&quot; border=&quot;0&quot; height=&quot;140&quot; src=&quot;https://arabiconline.eu/wp-content/uploads/2017/08/photo-960x675.jpg&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; font-style: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Camel K, a project under the famous Apache Camel project. This project&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; white-space: pre-wrap;&quot;&gt; totally change the way developers work with Kubernetes/OpenShift cloud platforms. By automating the nasty configuration and loads of prep work from developers.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;b id=&quot;docs-internal-guid-66e7101c-7fff-0557-ddd8-92d06e8800ba&quot; style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; font-style: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;If you are an old time developer like me. I did my best slowly trying to adapt the latest and greatest cloud native “ecology”. It’s not difficult, but with small things and traps here and there. I’ll tell yel’ it&#39;s not a smooth ride. It’s understandable for emerging technologies. But with the large adoption of cloud, I see it’s reaching a level of maturity, where now we are thinking of how to make things go faster, as well as making it more accessible to the larger audience.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; font-style: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;And here is why you will love &lt;a href=&quot;https://github.com/apache/camel-k&quot;&gt;Camel K&lt;/a&gt;..&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; font-style: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Real-time coding on the platform&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; font-style: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;When a developer wants to publish their application onto a Kubernetes/OpenShift Platform, they need to first build the app. And containerized the app to have a working image. Then pushing the image to the platform to run.&amp;nbsp; If the developer is trying to debug or develop the app with some changes, sorry, go back to square one and build it again. The worst nightmare for developers is the wait. It’s time consuming, and breaks the chain of thoughts.&amp;nbsp; Camel K eliminates the painstaking process. Let developers quickly update apps they are building on the platform immediately. By layering the image build on cloud, and streaming the code efficiently with the Camel K operator.&lt;/span&gt;&lt;/div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCIapprkMV49pE07Am5NHDwXbOqwSO4S3RQ-Wq7NRcF4cRcflScwq5_5U6gMO_eufe_jwVAFte53PYxbfXmokrGaBdqN6XDUPljPjetcIBY-jIalqqtpmYtnSy9mwB12Fco8tSCrZdh4Pp/s1600/6reasons.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;265&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCIapprkMV49pE07Am5NHDwXbOqwSO4S3RQ-Wq7NRcF4cRcflScwq5_5U6gMO_eufe_jwVAFte53PYxbfXmokrGaBdqN6XDUPljPjetcIBY-jIalqqtpmYtnSy9mwB12Fco8tSCrZdh4Pp/s400/6reasons.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; font-style: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Natively on cloud&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; font-style: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;a href=&quot;https://github.com/apache/camel-k&quot;&gt;Camel K&lt;/a&gt; is smart to discover the surrounding platform resources required to run on the platform. For instance, if a developer exposes a HTTP endpoint in the app, Camel K will know to create a related service and route in the platform. Another example is the cron jobs, where Camel K configures it for developers when it sees the behaviour in the code. Configurations are also taken care of for developers with Camel K convert the properties files into Kubernetes resources too. Reversing it is also simple. Simply remove the app, and Camel K will delete the related resource.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; font-style: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;No more dependency hell&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; font-style: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Dependency is troublesome, annoying things to a developer. It’s not a big deal in the monolithic world, it probably imported everything in the world already from prior projects. (Let’s not talk about the redundancy, wasted resource and version conflicts). When writing a 20 lines small microservice or function, it doesn’t make sense for a developer to write a 50 line dependency definition.&amp;nbsp; &lt;a href=&quot;https://github.com/apache/camel-k&quot;&gt;Camel K&lt;/a&gt; will smartly pick up the dependencies needed to run the app, it will automatically locate the libraries when building. But also give developers the choice to load any specific libraries they need as well.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; font-style: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Freedom to choose the language and runtime&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; font-style: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;a href=&quot;https://github.com/apache/camel-k&quot;&gt;Camel K&lt;/a&gt; supports range of languages for developers, no matter if it’s Java or scripting languages like Groovy or Javascript to &lt;/span&gt;&lt;span style=&quot;background-color: white; color: black; font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; font-style: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;markup languages&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #3c4043; font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; font-style: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; font-style: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;like XML or YAML. Camel K no longer needs a big fat framework like Springboot to run. Depending on the types of application, developers can choose to&amp;nbsp; run simple plain small Java Main in their microservice. Or go with the latest and greatest Quarkus with fast boot up time for serverless apps. Running the runtime requires literally just &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; font-style: italic; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;ONE&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; font-style: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; configuration. “-t quarkus.enabled=true”&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; font-style: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Simple, Small but Powerful&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; font-style: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;If we look closely at Camel K app, the core is from Apache Camel.&amp;nbsp; This means developers will have well established patterns to reuse. Pre-built transformation for data and 300+ components available for quick connectivity. No more reinventing the wheel. So the code is cleaner, easier to maintain, but also maintains highly customizable freedom for users.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; font-style: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Serverless made easy&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; font-style: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Reduce the operation, development and scaling cost. KNative is the most popular serverless frameworks on Kubernetes. It introduces the idea of scaling to zero, scaling up for load. And also serving the new specification for future &lt;/span&gt;&lt;a href=&quot;https://github.com/cloudevents/spec&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #1155cc; font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; font-style: normal; font-weight: 400; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Cloud Events&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; font-style: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;. Applying these serverless capabilities to an app on the cloud requires a set of configuration. But with Camel K it will automatically do it and make it seamless for developer trying to access the channel to get the cloud events.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; font-style: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Check out this video I made a couple of months ago on Camel K. A 1000 feet high overview of what Camel K is. And also the getting started series I made for Camel K.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; class=&quot;YOUTUBE-iframe-video&quot; data-thumbnail-src=&quot;https://i.ytimg.com/vi/LaBvBonUC6g/0.jpg&quot; frameborder=&quot;0&quot; height=&quot;266&quot; src=&quot;https://www.youtube.com/embed/LaBvBonUC6g?feature=player_embedded&quot; width=&quot;320&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; font-style: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: &amp;quot;red hat display&amp;quot; , sans-serif; font-size: 11pt; font-style: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Lastly, choose the right tools for your projects. &lt;a href=&quot;https://github.com/apache/camel-k&quot;&gt;Camel K&lt;/a&gt; may not be a silver bullet that magically solves all your problems. But it’s definitely worth your time to see how dramatically it is going to change the way you code on Cloud platform! &lt;/span&gt;&lt;/div&gt;
&lt;br class=&quot;Apple-interchange-newline&quot; /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/2418306302048501221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1207253639848690946/2418306302048501221' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/2418306302048501221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/2418306302048501221'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/2020/04/six-reasons-why-you-will-love-camel-k.html' title='Six reasons why you will love Camel K'/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCIapprkMV49pE07Am5NHDwXbOqwSO4S3RQ-Wq7NRcF4cRcflScwq5_5U6gMO_eufe_jwVAFte53PYxbfXmokrGaBdqN6XDUPljPjetcIBY-jIalqqtpmYtnSy9mwB12Fco8tSCrZdh4Pp/s72-c/6reasons.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1207253639848690946.post-6750616038822932212</id><published>2019-03-19T22:21:00.002+08:00</published><updated>2019-04-11T03:43:49.051+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agile Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="cloud native development"/><category scheme="http://www.blogger.com/atom/ns#" term="event driven"/><category scheme="http://www.blogger.com/atom/ns#" term="microservice"/><category scheme="http://www.blogger.com/atom/ns#" term="my2cent"/><title type='text'>My2Cents - Eight things leads to developing catastrophic cloud native microservices system</title><content type='html'>&lt;br /&gt;
&lt;br /&gt;
More of my two cents, just my thoughts. A quick fun read, not too deep, but worth noting :).&lt;br /&gt;
&lt;br /&gt;
1. &lt;b&gt;Setting the domain boundary wrong&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;i&gt;This is a job guarantee tactics, it&#39;s endless looping in development and testing for everyone&amp;nbsp;involved&amp;nbsp;in the project&amp;nbsp;without making the service to production! First everything starts simple and gradually find more and more functions, business logic gets added into the microservice, at the end, one even have to rename the whole damn thing.&amp;nbsp;&lt;/i&gt;&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHsBqVjpyXhibHs3Hfj5MMUY75sWQtx1Snwo_f_Lqcls7O3KZL6DpfBoXuHp2nHri_5o6F5u8aD_QYjL2vJYbMqb2ABMqh5nGKTHNxwaWDab7ypxw-e_1VbTR-FWOJZofrYWVlIlDw2UU8/s1600/imageedit_44_4536471448.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;852&quot; data-original-width=&quot;910&quot; height=&quot;186&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHsBqVjpyXhibHs3Hfj5MMUY75sWQtx1Snwo_f_Lqcls7O3KZL6DpfBoXuHp2nHri_5o6F5u8aD_QYjL2vJYbMqb2ABMqh5nGKTHNxwaWDab7ypxw-e_1VbTR-FWOJZofrYWVlIlDw2UU8/s200/imageedit_44_4536471448.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;u&gt;Symptoms and side effects&amp;nbsp;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;A growing microservices becomes too fat, or every single microservices in the domain calls your microservice. (Sometime core microservice has the same behavior, but you should not see many of this type of services in a single domain.) This violates the microservices principle of easy, maintainable and agile.&lt;/li&gt;
&lt;li&gt;Duplication of microservices/code everywhere. Where you find bits and pieces of duplicate code or microservices being copied and deployed into other domains.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqq9HN_oPkVJMxIIcl9iPmn_fNyaFHdK2bLDmxZjC43xfsV8bpu_Sw5NvSGT9ZvLjDpJNTyjXSg8dyPuSC4-Ab6SwsaqHYkLNgjYBAKxT9oBVLinDGCaSeZeeLWGI_Nk0BvCFskQZF3lG7/s1600/imageedit_48_9341058924.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;477&quot; data-original-width=&quot;699&quot; height=&quot;135&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqq9HN_oPkVJMxIIcl9iPmn_fNyaFHdK2bLDmxZjC43xfsV8bpu_Sw5NvSGT9ZvLjDpJNTyjXSg8dyPuSC4-Ab6SwsaqHYkLNgjYBAKxT9oBVLinDGCaSeZeeLWGI_Nk0BvCFskQZF3lG7/s200/imageedit_48_9341058924.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;If you get into the endless implementation and testing hell, take a step back and look at how you separate the domains. Did you acc&lt;br /&gt;
identally place a context from other domains or mixing different concepts int&lt;br /&gt;
o one? Maybe it&#39;s worthwhile to go back to the design phase and think about the boundaries. To avoid duplication everywhere, make sure there are proper documented catalogs such as API portals using the Open API Standard Doc available between domains.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. &lt;b&gt;Mixing responsibilities of microservices&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;In the mood for some Spaghetti, this is the way to go, and want some meatball to go on the Spaghetti to make it tastier? Mixing some stateful processes in there will get you plenty!&amp;nbsp;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Mixing&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHqZxgamdkEOJZEQb6mPt1TwpwcUY8MUf0fFjKYDfZVh1SgSw2Az3Yg8H6g50na4A3IJ_BekLQj7qaU20cS5BbnTeapB3h0lOjzUuvMWN05EzU6shxGyDtmb-2dqFErmwABJMxZD0r45W6/s1600/imageedit_50_9140009164.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;595&quot; data-original-width=&quot;699&quot; height=&quot;272&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHqZxgamdkEOJZEQb6mPt1TwpwcUY8MUf0fFjKYDfZVh1SgSw2Az3Yg8H6g50na4A3IJ_BekLQj7qaU20cS5BbnTeapB3h0lOjzUuvMWN05EzU6shxGyDtmb-2dqFErmwABJMxZD0r45W6/s320/imageedit_50_9140009164.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;
&lt;li&gt;&amp;nbsp; Composing microservices&lt;/li&gt;
&lt;li&gt;&amp;nbsp; Functional core business&lt;/li&gt;
&lt;li&gt;&amp;nbsp; Stateless integration&lt;/li&gt;
&lt;li&gt;&amp;nbsp; Stateful process&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Symptoms and side effects&amp;nbsp;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Client calls becomes complex, if you don&#39;t provide a composed view of particular service, the client may require to compose and possibly handle some sort of core business login in it.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Spaghetti relations between services, and it&#39;s really easy to lose track of how the flow of data and business logic spread around microservices. &amp;nbsp;&lt;/li&gt;
&lt;li&gt;Too much coupling,&amp;nbsp;having stateless and stateful is depended on the storage solution and scaling down could also have potential problems.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
I&#39;ve done a bunch of blogs on this topic, the main concept is always the &lt;i&gt;&lt;u&gt;separation of concerns&lt;/u&gt;&lt;/i&gt;, making sure there your cloud native microservices are clean, lean and agile meaning you need to make sure the business composition and the actual business functions needs to be separated into different instance and deployed individually for better structured and more modularized. Making sure the composition/orchestrations of microservices are stateless for scalability and flexibility. Set aside other long running process on other instance with dedicated proper storage solution to keep the states.&lt;br /&gt;
&lt;br /&gt;
3. &lt;b&gt;Too much coupling with external factors/demands&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;i&gt;Being patient is always good, if you want to practice your ability to be extra patient while being calm, by coupling deeply with legacy system will train you to become the patient master, and become better&amp;nbsp;at code management as you need juggle between agile demands and slow legacy update cycles.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Symptoms and side effects&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Constant updates to core business to the core business system outside of better control. Having external system decide and make change request and short reaction time could cause issues.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Once contract are establish between parties, will need extra&amp;nbsp;care for version updates.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWbS-Ck55I8RSW4veSqyAKObANAOBmQi1Jht1byuo8wgp5PCP3jSSLu5z_qCFhdIc_TUpcDSrSLoZZ8qIfudw1see5c13pr9NS-GyVcGoGS2QWN9yAqpzPIpuxehOM2aLY07NILMaYiJ87/s1600/imageedit_52_6603423796.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;579&quot; data-original-width=&quot;699&quot; height=&quot;265&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWbS-Ck55I8RSW4veSqyAKObANAOBmQi1Jht1byuo8wgp5PCP3jSSLu5z_qCFhdIc_TUpcDSrSLoZZ8qIfudw1see5c13pr9NS-GyVcGoGS2QWN9yAqpzPIpuxehOM2aLY07NILMaYiJ87/s320/imageedit_52_6603423796.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;The deployment cycle varies from system to system, but brown field application will have a longer application lifecycle compare to more agile and dynamic cloud native application. To move things faster, always consider to have a shield protection between your brown/green field application. So it accommodates to the s&lt;br /&gt;
lower moving parts as well as help green field cycle to continue on it&#39;s agile development. In your core domain microservices, avoid add anything that is dependent or specific for external consumers, as it might leads to too much customization that breaks the definite context boundary. Make sure you have other vendor/external system facing module that does the customization and hide the presentation complexity from internal domain models.&lt;br /&gt;
&lt;br /&gt;
4. &lt;b&gt;Duplicating and replicate non-biz related code in microservices&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;As a developer, it&#39;s nice to be depended on, you feel the satisfaction of being needed. There is a reason why there are 24 hours each day, so you get to work 20 hours per day and you are so important when ever there is a deployment, you needed to be there.&amp;nbsp;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Symptoms and side effects&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBo5q5U_xrjW5eK319c4qR_wOm55JmfnI9jncWETFN7rZMFKC1un4vgtFNGvDJMzYPVbvWT8_YOz7HhmQdsMg2vYCziyt5KajbMb8HM8DpPd2cU7r2W1vNiTEZOPaVGoROfDEns2_D4caO/s1600/imageedit_54_8534297864.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;502&quot; data-original-width=&quot;699&quot; height=&quot;229&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBo5q5U_xrjW5eK319c4qR_wOm55JmfnI9jncWETFN7rZMFKC1un4vgtFNGvDJMzYPVbvWT8_YOz7HhmQdsMg2vYCziyt5KajbMb8HM8DpPd2cU7r2W1vNiTEZOPaVGoROfDEns2_D4caO/s320/imageedit_54_8534297864.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;None centralized control, all retry, reroute, versioning and deployment strategy are store in each individual instance.&lt;/li&gt;
&lt;li&gt;Responsibility not clear between DEV/DEVOPS, again, the networking strategy is better for party that has better access to monitoring stats of how the environment is doing.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Setting retry and routing policy can allows application to be more robust to failure. To have a more centralized view of how these policies are handled instead of spreading them all over individual microservices. Release the burden of developer handling everything in the application and better management and monitoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. &lt;b&gt;Service in mesh, connecting all with APIs&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Making API calls are super easy, and service mesh is what everyone is doing today. Every technology has an library to handle REST/JSON. Let&#39;s connect all components in the system with APIs!&amp;nbsp;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Symptoms and side effects&lt;/u&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Slow to react, since request and response are how most people uses it. And the wait could take longer and more locks for longer process. That becomes the performance bottleneck.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Not utilizing cloud infrastructure.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
When microservice first came out, people wants to get away from ESB therefore many moved away from messaging broker and use API as the only connection method between services, as the Open API standard allows you to build a nice catalog among what is available. But event driven is there for a reason, to achieve true scalability, better decoupling, you need to stop making sticky dependency between calls. And event driven allows you to populate events to related parties, and because it&#39;s asynchronies, no resource are wasted when waiting for the reply.&lt;br /&gt;
&lt;br /&gt;
6. &lt;b&gt;Un-sorted events&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJmh_vf4iWqXKakiMzerlsogsBH0WZ__s5Zw7X7Ac5UVVWW2px58FTMVOQCDF3JnQztqfW-fVibLG1M-MsSicH7aZN0bqID8Y34AJ-O_2euW9kc10ZFFW3uHvnuHX9ZmZg_dikE9yjhdGK/s1600/imageedit_58_5805145960.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;602&quot; data-original-width=&quot;699&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJmh_vf4iWqXKakiMzerlsogsBH0WZ__s5Zw7X7Ac5UVVWW2px58FTMVOQCDF3JnQztqfW-fVibLG1M-MsSicH7aZN0bqID8Y34AJ-O_2euW9kc10ZFFW3uHvnuHX9ZmZg_dikE9yjhdGK/s320/imageedit_58_5805145960.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;i&gt;Blasting the system with events, notify every corner to any events, will get your system super reactive! By the way, why not stream everything and store all the event! For better traceability!&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Symptoms and side effects&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Events everywhere, you realized you have to listen to insane amount of events to react up on it.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Un-needed code to filter out events.&lt;/li&gt;
&lt;li&gt;Confusion between status change or action should taken&lt;/li&gt;
&lt;li&gt;Don&#39;t know what is better to preserve or lose the event messages&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
There are various types of events, if not carefully where and how the events are distributed, it&#39;s very likely to end up with unwanted events floating around consuming unnecessary resources. Focusing on some of the common ones like events containing data, status and commands. You want to minimize the number of data messages, as it take longer to process, more work to store. Striping down, filter the data could be more efficient. Handling retries of status events and rolling back command events should also be part of the event strategies.&lt;br /&gt;
&lt;br /&gt;
7. &lt;b&gt;Data Silos&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;One mircroservice one datasource, that is what experts says.&amp;nbsp;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Symptoms and side effects&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Data not consistent among the datasources, or slow.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Un-needed microservices created just for making sure the data are consistent.&lt;/li&gt;
&lt;li&gt;Events everywhere to update status.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqwdqgI7P8VK365AnUmpFpYRl1qIe_FoHroo1BqUmlX4-8lnxm2tUE52VIob3FHqNhqJHy3DtQ3wqINwnRlgNVGYuZrSAF4vsz7jmR0cjS1EEvRUkTT-ucH4ixv79JvtsREq9tVR70xnlk/s1600/imageedit_56_4470457635.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;296&quot; data-original-width=&quot;699&quot; height=&quot;135&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqwdqgI7P8VK365AnUmpFpYRl1qIe_FoHroo1BqUmlX4-8lnxm2tUE52VIob3FHqNhqJHy3DtQ3wqINwnRlgNVGYuZrSAF4vsz7jmR0cjS1EEvRUkTT-ucH4ixv79JvtsREq9tVR70xnlk/s320/imageedit_56_4470457635.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;When you have isolated datasources there are risk of creating data silos, and because of the nature in microservice being distribute and more complex datastore scenario, it has become more difficult to mange the data consistency. You can start looking into how to capture the data change with many existing solutions such as streaming event changes as it happens during process or listen to changes from the main status store.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8.&lt;b&gt; Limited automation&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Manual is much more flexible, beside that was how it was done before with the JavaEE application on the servers. Automation, it takes too much time to setup, Lets deal with it when we have time? &amp;nbsp;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Symptoms and side effects&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Slow updates&lt;/li&gt;
&lt;li&gt;Long painful steps to productions&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
The first thing that needs to be in the planning is definitely automation. How to apply automated CI/CD pipelines and the deployment strategy, this how cloud native microservices system achieve the agility. I&#39;ve done a couple of CI/CD automation with Jenkins in the past. &lt;a href=&quot;https://github.com/jbossdemocentral/fuse-financial-cicd&quot;&gt;See Github Link&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Alright, these are just my two cents, let me know if you think there are any other things that could lead to terrible&amp;nbsp;cloud native microservices development? Love to know!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/6750616038822932212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1207253639848690946/6750616038822932212' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/6750616038822932212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/6750616038822932212'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/2019/03/my2cents-eight-things-leads-to.html' title='My2Cents - Eight things leads to developing catastrophic cloud native microservices system'/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHsBqVjpyXhibHs3Hfj5MMUY75sWQtx1Snwo_f_Lqcls7O3KZL6DpfBoXuHp2nHri_5o6F5u8aD_QYjL2vJYbMqb2ABMqh5nGKTHNxwaWDab7ypxw-e_1VbTR-FWOJZofrYWVlIlDw2UU8/s72-c/imageedit_44_4536471448.png" height="72" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1207253639848690946.post-8722986284805205217</id><published>2019-01-29T22:15:00.000+08:00</published><updated>2019-01-29T22:27:35.492+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agile Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="AMQ"/><category scheme="http://www.blogger.com/atom/ns#" term="AMQ Online"/><category scheme="http://www.blogger.com/atom/ns#" term="Broker"/><category scheme="http://www.blogger.com/atom/ns#" term="MaaS"/><category scheme="http://www.blogger.com/atom/ns#" term="Messaging"/><category scheme="http://www.blogger.com/atom/ns#" term="Messagings as a Service"/><category scheme="http://www.blogger.com/atom/ns#" term="MQ"/><category scheme="http://www.blogger.com/atom/ns#" term="Red Hat Integration"/><title type='text'>AMQ Online 101 - What I&#39;ve learnt from recent AMQ Online Hackfest</title><content type='html'>AMQ Online, project name, EnMasse. Recently, I&#39;ve attended AMQ Online Hackfest where the Rob and Ulf the engineering team &lt;b&gt;&lt;i&gt;kindly&lt;/i&gt;&lt;/b&gt; ask us to take a hack on the new platform. If you don&#39;t know what AMQ Online is, it&#39;s basically an online self-service (Messaging as a Service) messaging platform for developers/application owners to quickly spin up their own queue and topic without worrying about the scalability, network setting and all sorts of operation setups.&lt;br /&gt;
&lt;br /&gt;
Watch this quick video overview on what is AMQ Online:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; class=&quot;YOUTUBE-iframe-video&quot; data-thumbnail-src=&quot;https://i.ytimg.com/vi/P1RcYH6CuQI/0.jpg&quot; frameborder=&quot;0&quot; height=&quot;266&quot; src=&quot;https://www.youtube.com/embed/P1RcYH6CuQI?feature=player_embedded&quot; width=&quot;320&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
Before the hack, they went through the basics of AMQ Online, and here is my take on explaining the basics of AMQ Online. With AMQ Online being the platform to service users, there are obviously two main area of focus for people depending on their roles. &amp;nbsp;The administration side to spin up and manage the platform, the other side of course is the user end, where they will be requesting for the message services.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Admin&lt;/span&gt;&lt;/b&gt; does the installation of the platform foundation on OpenShift, they install all the basic elements that controls all the needed brokers, routers, user console and monitoring tools, and also takes care of setting up the authentication and authorization of who has access to the platform. We don&#39;t always have unlimited computing resource for all users, admin also has control over the resource limitation and create different plans that can apply to accompany different needs from users.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbm9ZByO66MYErrqhSwPAKfIxSx0VAdHM_uCzqHzA1GxgLiYGzNRc9KrV_YhSvVk3jBDuEuMsoJRaUOVjzJs35kw2CbTSbNO1zaqvW6vl5N4zFZIAec_ltSGkH6wY784Wc-Rz2YxQUqC8q/s1600/Screen+Shot+2019-01-29+at+9.06.29+AM.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;332&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbm9ZByO66MYErrqhSwPAKfIxSx0VAdHM_uCzqHzA1GxgLiYGzNRc9KrV_YhSvVk3jBDuEuMsoJRaUOVjzJs35kw2CbTSbNO1zaqvW6vl5N4zFZIAec_ltSGkH6wY784Wc-Rz2YxQUqC8q/s640/Screen+Shot+2019-01-29+at+9.06.29+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Each user will be assign to an &quot;Address Space&quot;, each Address Space will have separate sets of brokers, router and console for it, and later on when user comes in to ask for queue and topics, they will be running on top of these set of brokers and routers. Admins does not create the actual &quot;Address Space&quot;, their job is to create PLANs that specify the limits, configuration. So when a new user comes in, they can then create the &quot;Address Space&quot; base on the plans.&lt;br /&gt;
&lt;br /&gt;
There are several plans that can be defined.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Infrastructure configuration&lt;/b&gt; - as name suggested, it configures the hardware resource allocated to the components, such as CPU. memory, storage of console, broker and router, also some other specific config too.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Address Space Plan&lt;/b&gt; - basically the main quota control, it knows how much hardware can be used by referring to infrastructure configuration, as well as controls the number of routers/brokers in the system. And so what are the queue/topic plans are available in the address space.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Address Plan&lt;/b&gt; - Address plan defines the consumption of resource base on the percentage. The sum of number of brokers/routers of the entire address space will determine how many instance of broker and router will be running in the name space.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8GCWV-1yirgYI21olFSTAW7iz3TdNEd3xfQqyXR8HtzOFzNHLt03K3-Sd6hASRd-z9dlUykzTvoCXiRdVemURZSiCMcw0BKjAcOM3PR03bY7BDq16PK-xn_gIZia8_6LMNtlbinbs4amg/s1600/imageedit_16_8722742427.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;411&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8GCWV-1yirgYI21olFSTAW7iz3TdNEd3xfQqyXR8HtzOFzNHLt03K3-Sd6hASRd-z9dlUykzTvoCXiRdVemURZSiCMcw0BKjAcOM3PR03bY7BDq16PK-xn_gIZia8_6LMNtlbinbs4amg/s640/imageedit_16_8722742427.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Tenants&lt;/b&gt;&lt;/span&gt; are the users of the platform, they will be creating &quot;Address Space&quot;, and create destinations by applying the plans on top of it. &amp;nbsp;After the queue and topics are created, the tenants can go ahead and create credentials maps to different access roles, they can decide what account has access to admin console, which account has consume/produce right to any addresses(queues/ topics) in the Address Space. Please note, tenants will have no visibility to queue or topics of other Address Space, unless specially specified. Once the address are created and config correctly, application will be able to use the credential to read/write to the messaging address.&lt;br /&gt;
&lt;br /&gt;
These are the three things tenants need to create&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Address Space&lt;/b&gt; - refer back to&amp;nbsp;Address Space Plan and create and config pod base on the plan selected.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Address&lt;/b&gt; - the destination create for user access. Maps to address plan.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Message User&lt;/b&gt; - defines the authentication method for destination access, and the authorization of destinations to this user.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGqiIzRwZ2NPuua3jlMtJudVoeFFHaCWXazr9dLNuZQh54GN8TIuhm2cWV7K9AwpuvOh06J7mujmYSAg-7KE6wzjejiJxL6lZAh9oDjKso7dgp4mF3g45i_9yj8Z8S0Z-9kdGcYYBwEQwb/s1600/imageedit_18_9234256356.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;392&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGqiIzRwZ2NPuua3jlMtJudVoeFFHaCWXazr9dLNuZQh54GN8TIuhm2cWV7K9AwpuvOh06J7mujmYSAg-7KE6wzjejiJxL6lZAh9oDjKso7dgp4mF3g45i_9yj8Z8S0Z-9kdGcYYBwEQwb/s640/imageedit_18_9234256356.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Watch this video on AMQ Online 101:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;iframe allowfullscreen=&quot;&quot; class=&quot;YOUTUBE-iframe-video&quot; data-thumbnail-src=&quot;https://i.ytimg.com/vi/Zcd7Tgx8XUc/0.jpg&quot; frameborder=&quot;0&quot; height=&quot;266&quot; src=&quot;https://www.youtube.com/embed/Zcd7Tgx8XUc?feature=player_embedded&quot; width=&quot;320&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are different types of Address Space, Address.. and other configs available. I want to keep this post as simple and basic as possible, please read into the documentation for more details. I might go over in next post, if I ever get some spare time to do it :) Till next time! Enjoy.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/8722986284805205217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1207253639848690946/8722986284805205217' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/8722986284805205217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/8722986284805205217'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/2019/01/amq-online-101-what-ive-learnt-from.html' title='AMQ Online 101 - What I&#39;ve learnt from recent AMQ Online Hackfest'/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/P1RcYH6CuQI/default.jpg" height="72" width="72"/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1207253639848690946.post-1441599262384042191</id><published>2019-01-22T10:32:00.000+08:00</published><updated>2019-01-22T10:41:20.866+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agile Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenShift"/><category scheme="http://www.blogger.com/atom/ns#" term="Red Hat Fuse"/><category scheme="http://www.blogger.com/atom/ns#" term="Service mesh"/><title type='text'>My 2cents on the future of Integration - With Service Mesh/Istio and Serverless/KNative </title><content type='html'>&lt;br /&gt;
It&#39;s been a year and half since I blogged about &quot;Agile Integration architecture&quot; (Gosh, time just flies). With the &quot;microservices&quot; and &quot;cloud-native&quot; hype, I was especially curious on how all these new concept and technology affect us on how to architect the integration systems. If you ever pay close attention to all the latest and greatest news from the Kubernetes community, I am sure you will hear a lot about the new &quot;Service Mesh&quot;. And rumor has it that this is how integration can/should be done in cloud native world, but, is that so? Anyone who has ever worked on an integration project would tell you, it&#39;s a LOT more COMPLEX and can get worst overtime. I did a talk with Christian Posta in Red Hat Tech Exchange coming from a more comprehensive view of how different Red Hat technologies are applied under different patterns when building integration solutions. In fact he also did a great &lt;a href=&quot;http://blog.christianposta.com/microservices/application-safety-and-correctness-cannot-be-offloaded-to-istio-or-any-service-mesh/&quot;&gt;blog&lt;/a&gt; about it.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW5I8bek8oXmFHO6iRHdFmwuOoci-xB5ZA_EsCaLX0UX5RIvFKz_HmOZI9YZL6-ZTIrLlsWXjPgjmbWK4EAPUbHMSiXeavzKb5G9DlxmqWZz4uRuSEKLpb2Rl9cFc8p6Wfc2DXWb6dmM3t/s1600/imageedit_10_3554669503.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;227&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW5I8bek8oXmFHO6iRHdFmwuOoci-xB5ZA_EsCaLX0UX5RIvFKz_HmOZI9YZL6-ZTIrLlsWXjPgjmbWK4EAPUbHMSiXeavzKb5G9DlxmqWZz4uRuSEKLpb2Rl9cFc8p6Wfc2DXWb6dmM3t/s400/imageedit_10_3554669503.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
Since then, another topics has been brought up numerous time, what about Serverless, how would it impact integration? Does it mean the death of services? &amp;nbsp;If we have all Microservices connected via Serviceless mechanism in service mesh, does that mean we go back to the old days of writing all the integration transformation logics in our application again? Obviously, this is complicated question to answer, and the new features keeps popping up, I am going to try to give my best to try and explain how I see everything fits into Agile Integration vision. Honestly, there is no exact right answer when it&#39;s about architecting system, it requires constant refactoring, my thought is to give a more general and flexible way of doing it that has less impact when change and being able to adapt change quickly. (That is what I call Agile Integration).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Service Mesh&amp;nbsp;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/b&gt;
I remember last time, I started the agile integration reference architecture simply because the lack of organization of Microservices, and it still stand today. JUST because we have service mesh, doesn&#39;t mean it will magically solve the spaghetti connectivity if you are not being careful. To set the ground, what service mesh helps is to relief developer from dealing with repetitive, boring work in a distributed environment. Yes. Being cloud native with Microservices, means the system is more vulnerable to chain reaction disaster if not designed correctly, as you are working with small bots and gears in the system, that you never know how any small missed-handle can impact the entire system. Therefore we need to make each component more robust, failure proof and ideally damage recoverable. And Service Mesh helps you with getting the BASICs ready by adding a sidecar next to your running application. For every Microservices you create, no matter what they do, core business or content orchestration, they all need some kind of failure proof. Service Mesh gives you all that, from an application networking level. So that as a developer you will no longer have to wrap every single one of your Microservices with the circuit breaker, error retry and even handling version, deployment routing, and apply authorization, &amp;nbsp;those that has NOTHING to do with what the actually app is responsible for. These are often common rules that applies to the whole cluster. And service mesh is best for that, as these common policies are detached from actual application, can be managed centrally and apply individual on the sidecar so the microservice running your app is protected behind it.&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaeXwNLnhtgfry3-hQh_d_5ewUiXO4eO536mbfJQPwIniDtDhU91DDsvEYfcfhMbktg9Ta2Kbf54dWY2MWodESSUvD8mv58VN6-M_ABcBBY0QiKIuoItifxV8U4LnNSMeDpCZg5w52Zwld/s1600/imageedit_6_9445908844.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;378&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaeXwNLnhtgfry3-hQh_d_5ewUiXO4eO536mbfJQPwIniDtDhU91DDsvEYfcfhMbktg9Ta2Kbf54dWY2MWodESSUvD8mv58VN6-M_ABcBBY0QiKIuoItifxV8U4LnNSMeDpCZg5w52Zwld/s400/imageedit_6_9445908844.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
Another great feature with service mesh, is to ability to trace and observe the incoming request for the entire system. This will certainly help developer/operation have more insight into the complex spider web-like connectivity.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Dealing with REAL Life Integration&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
But when it comes to actually application implementation, some folks thinks we can now rely on Service Mesh to configure and connect. &lt;i&gt;MAYBE&lt;/i&gt;, if you are developing only a couple of small microservices, you can probably get away from that. BUT that is not what&#39;s happening in real life. For instance, formatting the data to the right granularity (Splitting/Aggregation), routing base on processing outcome of some content, a more complex orchestration of services call that requires precise rollback and business handling (Saga) , collection of events triggering, we can&#39;t possibly write all these into the Service Mesh config yml file (I am just being practical :p). So, I am sure now we have mutual agreement that integration logic still needs be written somewhere, DON&#39;T tried to do it in your microservice with the business logic. That is why we need the conceptual layer in agile integration. They are the composite and core layer. Remember, &amp;nbsp;I mean CONCEPTUAL not physically on top of another, but separating the responsibility of the microservices so it&#39;s easier to locate, maintain and organize your applications. Taken from the lesson learnt from SOA. You will still need some kind of integration patterns to compose service that has the right granularity for the receiving end. &lt;br /&gt;
&lt;br /&gt;
Monitoring and tracing is crucial in ANY integration system, and let&#39;s face it, there are NOT JUST http calls. Majority of times, they are events, and honestly an event driven reactive system is 100 times more flexible and modularize than sticking a bunch of API together. To be able to collect these data are needed beyond simple request tracing. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;Serverless&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2aEkrfcwXfNrzW0y3Y2B0uaqddU2VbZltGrP3qhqDMpCQFJ7LIsqFS9I3pLNo7hqM8Nh33aaJLLSH0mwadOb4mh3DnPnA7OH4PqtjwYTmedoW1aO4HKLPUMXbyjla7dR7pZ82Eua-NcKz/s1600/imageedit_8_5274947810.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2aEkrfcwXfNrzW0y3Y2B0uaqddU2VbZltGrP3qhqDMpCQFJ7LIsqFS9I3pLNo7hqM8Nh33aaJLLSH0mwadOb4mh3DnPnA7OH4PqtjwYTmedoW1aO4HKLPUMXbyjla7dR7pZ82Eua-NcKz/s640/imageedit_8_5274947810.png&quot; width=&quot;456&quot; /&gt;&lt;/a&gt;I had to talk about this, the whole serverless development, deployment and runtime concept can take agile integration in another level not just conceptually but physically too. The idea of quickly spin up integration piece of logic, the ability to scale freely up and down. That is what I call true agility. I was thrilled to see Nicola demonstrate&lt;a href=&quot;https://www.nicolaferraro.me/2018/12/10/camel-k-on-knative/&quot;&gt; Camel-K on KNative&lt;/a&gt;. &amp;nbsp;Camel just opens up a wide range of connect possibility for the serverless call. To me the core spirits of server less is (For now)&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Being able to quickly produce/start application without complex configuration and heavy runtime.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Elastic resource allocation responding to loads.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
And what integration helps to bring to the table is the ability to allow the system to responds more events from boarder range of endpoints, for instance, IoT, SOAP and messaging and other protocol that are not simple http calls.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is just a HIGH level overview of how I see Integration are shaped in the future of a serverless cloud native world. Of course I have not touch upon many topics like APIs, Event driven architecture, self service ability. They deserve separate blogs. Might do another later this week. Again, these are just my 2cents coming out from a more practical real life point of view.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/1441599262384042191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1207253639848690946/1441599262384042191' title='45 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/1441599262384042191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/1441599262384042191'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/2019/01/my-2cents-on-future-of-integration-with.html' title='My 2cents on the future of Integration - With Service Mesh/Istio and Serverless/KNative '/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW5I8bek8oXmFHO6iRHdFmwuOoci-xB5ZA_EsCaLX0UX5RIvFKz_HmOZI9YZL6-ZTIrLlsWXjPgjmbWK4EAPUbHMSiXeavzKb5G9DlxmqWZz4uRuSEKLpb2Rl9cFc8p6Wfc2DXWb6dmM3t/s72-c/imageedit_10_3554669503.png" height="72" width="72"/><thr:total>45</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1207253639848690946.post-83314155728393228</id><published>2018-07-06T01:46:00.000+08:00</published><updated>2019-01-10T03:21:24.697+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="API"/><category scheme="http://www.blogger.com/atom/ns#" term="Design First"/><category scheme="http://www.blogger.com/atom/ns#" term="Fuse"/><category scheme="http://www.blogger.com/atom/ns#" term="Red Hat Fuse"/><title type='text'>Fuse - Contract First API Design with Apicurio and Fuse/Camel - Part One</title><content type='html'>This is part one of my two-article series that demonstrates the approach of implementing contract-first API design using&amp;nbsp;&lt;a href=&quot;https://www.apicur.io/&quot;&gt;Apicurio&lt;/a&gt;and&amp;nbsp;&lt;a href=&quot;https://www.redhat.com/en/technologies/jboss-middleware/fuse&quot;&gt;Red Hat Fuse&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
It covers how to create an OpenAPI standard document as the contract between API providers and consumers using&amp;nbsp;Apicurio. It also shows how to quickly create mock tests using Red Hat Fuse.&lt;br /&gt;
&lt;br /&gt;
There are two common approaches of creating these APIs.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Code First&lt;/li&gt;
&lt;li&gt;Contract First&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Coming from a old time ESB developer, these are not new. We have been doing this forever. Before, it was the WSDL that define the contract of the service. we were doing a lot more code first, for me it&#39;s simply because it&#39;s much easier for me to write couple of Java classes and generate the WSDL for my consumer.&amp;nbsp;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWtAxnPld3CZTCyCB8LBAR9eLIzi9fZfqi2uV5QuDJTlQYpr1_CQR6OQW7-4xY8tmLsb75gM1j2m_dte-ZJ8pRpo8dVvL_AZ5ly3yoEvDOknjKuCBzHKIQU6e86t5uApBHW-xblwPpWRr9/s1600/Screen+Shot+2018-07-03+at+4.07.01+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1081&quot; data-original-width=&quot;1600&quot; height=&quot;270&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWtAxnPld3CZTCyCB8LBAR9eLIzi9fZfqi2uV5QuDJTlQYpr1_CQR6OQW7-4xY8tmLsb75gM1j2m_dte-ZJ8pRpo8dVvL_AZ5ly3yoEvDOknjKuCBzHKIQU6e86t5uApBHW-xblwPpWRr9/s400/Screen+Shot+2018-07-03+at+4.07.01+AM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
It&#39;s often pretty straightforward if the consumer of your application has finalized how they want the service to be like. But you and I all know this is not often the case. So I had to go back to my code, and make the changes accordingly and pray I did not break anything in the way.&lt;br /&gt;
&lt;br /&gt;
Of course there is always preliminary discussion, but small changes are inevitable, and it&#39;s taking the toll of developer to&amp;nbsp;grind through the process of getting everything right.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7dCaFJO2uDCVrsi1tAbnBw_RK03NW8KNZ7cxCw_R8xzNkclubM6bHRruGoGpY2uvJEMPA-hqXDjbEYdYMnnWhy_h_nZ0PF8koqqYMM-w4dYKUc__HEWB6HwSpIw808T1fWdoSz-ipmZGv/s1600/Screen+Shot+2018-07-03+at+4.31.35+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;894&quot; data-original-width=&quot;1600&quot; height=&quot;222&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7dCaFJO2uDCVrsi1tAbnBw_RK03NW8KNZ7cxCw_R8xzNkclubM6bHRruGoGpY2uvJEMPA-hqXDjbEYdYMnnWhy_h_nZ0PF8koqqYMM-w4dYKUc__HEWB6HwSpIw808T1fWdoSz-ipmZGv/s400/Screen+Shot+2018-07-03+at+4.31.35+AM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Thanks to the new OpenAPI Specification, business user, citizen user/developer can use it to negotiate and maybe rung a couple of pre-test with the consumer before it gets handed over to developer. This design approach is called Contract First. It has become more and more popular as it avoids developer wasting time while in the process of negotiating how the service should be provided.&lt;br /&gt;
&lt;br /&gt;
Obviously there are many ways to do Contract First API . I am going to demonstrate how this can be done using&amp;nbsp;Apicurio and Fuse. I will be using&amp;nbsp;Apicurio to define APIs, and automatically generates the Fuse project for quick testing purpose.&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Theme: Customer Service API&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbcJGtJUzDUaFvhsngEJi6Pet3F3Hh1XpyhSMRNi92cJilKRXAMeHzx0C6jlzluQgNcrizZEuzjW8_mCRnF2rLWHXmDrrogbQvw-HZpgeJP56IlUv4ahyH9Y6uXY3HDSqu8u7-D_p-x3AA/s1600/Screen+Shot+2018-07-03+at+8.03.27+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;196&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbcJGtJUzDUaFvhsngEJi6Pet3F3Hh1XpyhSMRNi92cJilKRXAMeHzx0C6jlzluQgNcrizZEuzjW8_mCRnF2rLWHXmDrrogbQvw-HZpgeJP56IlUv4ahyH9Y6uXY3HDSqu8u7-D_p-x3AA/s400/Screen+Shot+2018-07-03+at+8.03.27+AM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
We will be providing customer service to our consumer. For the sake of this demo, we will only start with retrieving and creating customer service.&lt;br /&gt;
&lt;br /&gt;
Defining Application with OpenAPI Specification in Apicurio&lt;br /&gt;
&lt;br /&gt;
Apicurio is a web-based Open Source tool to design OpenAPI specification. Go to&amp;nbsp;&lt;a href=&quot;https://www.apicur.io/&quot;&gt;https://www.apicur.io/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
If you don&#39;t already have an account, please register for one.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCOw6ToBPjy7BnL0gFn8whVh7v8kxaOLwCrTGwUznqnw2BlHVXoWHX__5t2mHWQf-PhbCvwDQOxsjs1H-c5ZoxV38wL7ChULYuIDRwrcyLYjyf2wQRkDb0Gica7l_fkaPivIl1tDQa-fGX/s1600/Screen+Shot+2018-07-03+at+8.03.42+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;192&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCOw6ToBPjy7BnL0gFn8whVh7v8kxaOLwCrTGwUznqnw2BlHVXoWHX__5t2mHWQf-PhbCvwDQOxsjs1H-c5ZoxV38wL7ChULYuIDRwrcyLYjyf2wQRkDb0Gica7l_fkaPivIl1tDQa-fGX/s640/Screen+Shot+2018-07-03+at+8.03.42+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
After registering, you will be redirected to the main page of &lt;b&gt;Apicurio&lt;/b&gt;, so after discussing with the consumer on what they wish to have for the customer service, we can start creating the contract by clicking on &quot;&lt;b&gt;Create New API&lt;/b&gt;&quot;.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzmI7M_sZ_0yYy1sHdIFg28xoxbgXsn1jEzJc-Lvifl0pVOeXaq9oSh52IM-d3NL2vT0M3VTJiTDZ8VPjdczEvX06BqcO-jYjXiIwaXWtTZ0uxjVF1dj4VfqKOplfEdL2nlkqQysbhhcNz/s1600/Screen+Shot+2018-07-03+at+8.06.13+AM.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;332&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzmI7M_sZ_0yYy1sHdIFg28xoxbgXsn1jEzJc-Lvifl0pVOeXaq9oSh52IM-d3NL2vT0M3VTJiTDZ8VPjdczEvX06BqcO-jYjXiIwaXWtTZ0uxjVF1dj4VfqKOplfEdL2nlkqQysbhhcNz/s640/Screen+Shot+2018-07-03+at+8.06.13+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Basically, what you need to do is pretty simple&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Create the API(Service)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Create the data definitions (if any)&amp;nbsp;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Add Paths, and define parameters, operations and return responses to the path&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Enter the name of the service, and would be nice to add some of the description to it so it&#39;s easier for people to pick up what everything means.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnJFwvO1iPRWQjYqy4M4DfW_wWArf8s_FB2OJ_7tLjwvRgKR4rQjK2h8MrF9rduIoi7e6kTBd8TcvDTJP7caenvO6XvpfqM8MSkXU7H3KdhHfQHRtDi0aOGVxBH_3nPYAiEWHb_D9YEyZH/s1600/Screen+Shot+2018-07-03+at+11.27.59+AM.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;158&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnJFwvO1iPRWQjYqy4M4DfW_wWArf8s_FB2OJ_7tLjwvRgKR4rQjK2h8MrF9rduIoi7e6kTBd8TcvDTJP7caenvO6XvpfqM8MSkXU7H3KdhHfQHRtDi0aOGVxBH_3nPYAiEWHb_D9YEyZH/s640/Screen+Shot+2018-07-03+at+11.27.59+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
Set the customer definition, show the detail of info we are going exchange.&amp;nbsp;&lt;/div&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmgBJiteAfvLK00BJcaewy-7gymGWEuWlp3t0dHpOLAtxYJAnBPvoDhrxnaW05YHmQKQowsnQhvytBmBVzyo6DJ1ey8XtPbfUeihbsRintgytZIRe-v0MZQd6hVH20GjV93Ahcpbqrq8a3/s1600/Screen+Shot+2018-07-03+at+8.11.25+AM.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;216&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmgBJiteAfvLK00BJcaewy-7gymGWEuWlp3t0dHpOLAtxYJAnBPvoDhrxnaW05YHmQKQowsnQhvytBmBVzyo6DJ1ey8XtPbfUeihbsRintgytZIRe-v0MZQd6hVH20GjV93Ahcpbqrq8a3/s640/Screen+Shot+2018-07-03+at+8.11.25+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Add and define the properties and their data type.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXD3aikuWhj8G_PXKwmSS8ojJI0F3N0yAopsWRm9ZUmOfsA4r8UM-qtiHKj2B5VRlUHdJU8RifywZGTii-F3hwQvJC5rcAvJsw8lavQTjpXtRWwz2hCgpN1wZ9uHsiIIQaXxZtZy5xclIb/s1600/Screen+Shot+2018-07-03+at+8.24.36+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;178&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXD3aikuWhj8G_PXKwmSS8ojJI0F3N0yAopsWRm9ZUmOfsA4r8UM-qtiHKj2B5VRlUHdJU8RifywZGTii-F3hwQvJC5rcAvJsw8lavQTjpXtRWwz2hCgpN1wZ9uHsiIIQaXxZtZy5xclIb/s640/Screen+Shot+2018-07-03+at+8.24.36+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEia72rrjgPE8UaHKs1oRX-ud4jtfvaSr0ESEX-tmzYwU7oq3r_vOZ2wS9sqVkK-Eo8St-S1dl2P4f2PhMRoAWMUGhcKdfxdJflcXotVRC-syTl4b-_Os2OgAlNc0LtgbybFcpx20RUcoPVM/s1600/Screen+Shot+2018-07-03+at+8.27.54+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;251&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEia72rrjgPE8UaHKs1oRX-ud4jtfvaSr0ESEX-tmzYwU7oq3r_vOZ2wS9sqVkK-Eo8St-S1dl2P4f2PhMRoAWMUGhcKdfxdJflcXotVRC-syTl4b-_Os2OgAlNc0LtgbybFcpx20RUcoPVM/s400/Screen+Shot+2018-07-03+at+8.27.54+AM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
We can start adding the Paths to the doc,&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8jYolZbsO6G1VXDpDN4_R6M4j2-x0pzTPijRvY55Aanw5geN31S0calM0-W_zIJMhxzA7wUIAmIJeHkh_yPAz70yXIfeOaDMZ2ROcUZhu8hPFGYmd8O7lfOCUcgHSIIEmnD4_Uu3XC6qG/s1600/Screen+Shot+2018-07-03+at+8.07.43+AM.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;170&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8jYolZbsO6G1VXDpDN4_R6M4j2-x0pzTPijRvY55Aanw5geN31S0calM0-W_zIJMhxzA7wUIAmIJeHkh_yPAz70yXIfeOaDMZ2ROcUZhu8hPFGYmd8O7lfOCUcgHSIIEmnD4_Uu3XC6qG/s640/Screen+Shot+2018-07-03+at+8.07.43+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
Adding Parameters and define it&#39;s type.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfrJtVxMpueW-oZbHIVo5I2its1EBkLfh1CK3EOd_mi03Po2VlDIqrWJxwhdGPrxt56SrB2RHlpGy3cMy0CDEaPGauovUpDCTSSNJXqWRj7gkGFtkKKRMIv03mXW4ZowwFoFU24zWz9wO9/s1600/Screen+Shot+2018-07-03+at+8.28.04+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfrJtVxMpueW-oZbHIVo5I2its1EBkLfh1CK3EOd_mi03Po2VlDIqrWJxwhdGPrxt56SrB2RHlpGy3cMy0CDEaPGauovUpDCTSSNJXqWRj7gkGFtkKKRMIv03mXW4ZowwFoFU24zWz9wO9/s640/Screen+Shot+2018-07-03+at+8.28.04+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrIMy3kIKUpSO3rz5bAdIgKli9om5iLFToS0buaGrbdVu0o8ZRDwLSSm4DUeDGltEYnzxfjQOFUd3MD0Sm__C4X2SL-uDtIhgQVW3rTmB5VqtnXVcapmyhYwrfltEOjQaA_B6Q0FoBFfcc/s1600/Screen+Shot+2018-07-03+at+8.28.50+AM.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;402&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrIMy3kIKUpSO3rz5bAdIgKli9om5iLFToS0buaGrbdVu0o8ZRDwLSSm4DUeDGltEYnzxfjQOFUd3MD0Sm__C4X2SL-uDtIhgQVW3rTmB5VqtnXVcapmyhYwrfltEOjQaA_B6Q0FoBFfcc/s640/Screen+Shot+2018-07-03+at+8.28.50+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpkcm6z1A6gJ27ev4h9Re1Uli1zM7Le4RFmiycNRPy_h346Luc4wdwfiK54im-uFimfFRV8HWh2KWZ9beFdrCMVbiKJJ5mxfnUVz80wWGgK3kaHJ_IgiI5P4yLL_seUeZFPuowp2tCLMiJ/s1600/Screen+Shot+2018-07-03+at+8.28.58+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;236&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpkcm6z1A6gJ27ev4h9Re1Uli1zM7Le4RFmiycNRPy_h346Luc4wdwfiK54im-uFimfFRV8HWh2KWZ9beFdrCMVbiKJJ5mxfnUVz80wWGgK3kaHJ_IgiI5P4yLL_seUeZFPuowp2tCLMiJ/s640/Screen+Shot+2018-07-03+at+8.28.58+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfivCo-GcjlrhewJsZRUyjjP2GbKMYaffagFbkYcqv91aYiKHJQVmwWzJ-eAdGTcpGbUIlVqq2DJZBu2-Lv5UsBaJ1nY-GN1k9OYdZiVHmlvtap8Yf4eMOoS2ab96RBBL9hvvNdMmneRhY/s1600/Screen+Shot+2018-07-03+at+8.29.21+AM.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;136&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfivCo-GcjlrhewJsZRUyjjP2GbKMYaffagFbkYcqv91aYiKHJQVmwWzJ-eAdGTcpGbUIlVqq2DJZBu2-Lv5UsBaJ1nY-GN1k9OYdZiVHmlvtap8Yf4eMOoS2ab96RBBL9hvvNdMmneRhY/s640/Screen+Shot+2018-07-03+at+8.29.21+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
And responses too, (if your path needs it)&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC4PRcpW13Pj9AiiGEP7x2IDrLTaBA6HZd5xKL9LukQ2kjwviGMunP95yk8NESIEZ8f3vpiTXLhEY8O3XxCvuLsvENz4_O9PVTlMvT1Zg1ZqC3dNGdKmItDEKstE4-FnskkA6Kw9GWjKRZ/s1600/Screen+Shot+2018-07-03+at+8.36.37+AM.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;408&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC4PRcpW13Pj9AiiGEP7x2IDrLTaBA6HZd5xKL9LukQ2kjwviGMunP95yk8NESIEZ8f3vpiTXLhEY8O3XxCvuLsvENz4_O9PVTlMvT1Zg1ZqC3dNGdKmItDEKstE4-FnskkA6Kw9GWjKRZ/s640/Screen+Shot+2018-07-03+at+8.36.37+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Once we are done, it&#39;s time to export the API Standard documents.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh91RD5PFctoVQdkfXBWrsTTK-AnEd4wERKDWrOkGbhAFYAC4SMecYTWyu-HoCT2QDge4yRiMm-sN7QUoPxtnpsDmFzhpYUGPJQSxuChMCq4dOUnKBSl6Qe8n-yspMg2DmrxI6_U6veD9Wi/s1600/Screen+Shot+2018-07-03+at+8.43.13+AM.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;292&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh91RD5PFctoVQdkfXBWrsTTK-AnEd4wERKDWrOkGbhAFYAC4SMecYTWyu-HoCT2QDge4yRiMm-sN7QUoPxtnpsDmFzhpYUGPJQSxuChMCq4dOUnKBSl6Qe8n-yspMg2DmrxI6_U6veD9Wi/s640/Screen+Shot+2018-07-03+at+8.43.13+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Generating Fuse Project from Standard API Doc&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;br /&gt;
Go to JBoss Developer Studio, create a new Fuse project by right click on navigation panel, select New and Fuse Integration project.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhV-83SZMgvmjbEaIsnvPn_2ZCTANwBV1fc7RQJh1jBS7FBKESKdEai752XYanyTmeP3YeHNBf0udq-OMw1uTw2SExWdIRPYm-2_Kw4JMSSDNilmfrYP0fG-eiXpD_RVcOmSPimSgSuAGCk/s1600/Screen+Shot+2018-07-03+at+10.08.18+AM.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;224&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhV-83SZMgvmjbEaIsnvPn_2ZCTANwBV1fc7RQJh1jBS7FBKESKdEai752XYanyTmeP3YeHNBf0udq-OMw1uTw2SExWdIRPYm-2_Kw4JMSSDNilmfrYP0fG-eiXpD_RVcOmSPimSgSuAGCk/s640/Screen+Shot+2018-07-03+at+10.08.18+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Provide a name to the project,&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1G8DaQSCSOg-FP0_yXzrSAMOxv0uCFuJtsWQs1agbf8Br1JXXzUUEgg9t9TC6Mel0rxNb-jsfg8e6p-UqUFTSW3fepUO40HFZtkOFss4TscgHiyJnUhAuEU3M1xscg69aVNRTcHwKojgP/s1600/Screen+Shot+2018-07-03+at+8.51.36+AM.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;212&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1G8DaQSCSOg-FP0_yXzrSAMOxv0uCFuJtsWQs1agbf8Br1JXXzUUEgg9t9TC6Mel0rxNb-jsfg8e6p-UqUFTSW3fepUO40HFZtkOFss4TscgHiyJnUhAuEU3M1xscg69aVNRTcHwKojgP/s320/Screen+Shot+2018-07-03+at+8.51.36+AM.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
We are going to do this in a microservices approach, so select the most popular runtime - Spring Boot, and we will be running this on Cloud Platform - OpenShift.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLNeGTWmCCmr73odO47Sw7c1JqC1dF6DukAlR4-h6rXNmbvIzQGJLRcgyQ2YcHYT6GTygl4atp80-UA1VaTXGrN3-Qx78Gjzi0EK6z7SGxhDOTD7Nxo8iVfvXK51Zy-EFkC8BtJibceelO/s1600/Screen+Shot+2018-07-03+at+8.51.45+AM.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLNeGTWmCCmr73odO47Sw7c1JqC1dF6DukAlR4-h6rXNmbvIzQGJLRcgyQ2YcHYT6GTygl4atp80-UA1VaTXGrN3-Qx78Gjzi0EK6z7SGxhDOTD7Nxo8iVfvXK51Zy-EFkC8BtJibceelO/s400/Screen+Shot+2018-07-03+at+8.51.45+AM.png&quot; width=&quot;356&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Select the Spring DSL template.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJquNGZBdZ7jJMJhhmToXqD5qX4d3-3W0903XHbWCH1qKzZInsiUkqEkt8geew-K-tyVHttJwDU2CfWLtB6fp700eUuUlNJIppwbGNq08MTW4dh7ysxrtMj9-0iVFUHUUGr7dgS69Njz2j/s1600/Screen+Shot+2018-07-03+at+8.51.59+AM.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJquNGZBdZ7jJMJhhmToXqD5qX4d3-3W0903XHbWCH1qKzZInsiUkqEkt8geew-K-tyVHttJwDU2CfWLtB6fp700eUuUlNJIppwbGNq08MTW4dh7ysxrtMj9-0iVFUHUUGr7dgS69Njz2j/s400/Screen+Shot+2018-07-03+at+8.51.59+AM.png&quot; width=&quot;360&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
You will have a sample Fuse project,&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-CD_npmb2CKioOxOUBC5_ghyphenhyphen2stfA9VxJk4Fsc-akZIyC_U4Gn_qMoHKbG68JK7LjMbvaxh_BvXS7PYUvf0gHsCRTafxGy7S8qPLjTrJW-syicE9F-m2wtwDFUq-x-ei84OtxUScEf9Il/s1600/Screen+Shot+2018-07-03+at+10.17.38+AM.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;144&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-CD_npmb2CKioOxOUBC5_ghyphenhyphen2stfA9VxJk4Fsc-akZIyC_U4Gn_qMoHKbG68JK7LjMbvaxh_BvXS7PYUvf0gHsCRTafxGy7S8qPLjTrJW-syicE9F-m2wtwDFUq-x-ei84OtxUScEf9Il/s640/Screen+Shot+2018-07-03+at+10.17.38+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Add the generated API Spec doc to directory: &lt;b&gt;src/spec/&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9vdov0C8rWA7k_Y55LeLe24H49PPlS0Y7l3K2inoxQwSPyy9u_58QOi7dzJab5IRZ45ZHhY_DXZmjIdicDsUsGvc40AeJZv-TW1a9Qyrr3klGwAA618L4HaBIS8ZQ0DgeyiBwWNY2JxLl/s1600/Screen+Shot+2018-07-03+at+10.50.43+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;277&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9vdov0C8rWA7k_Y55LeLe24H49PPlS0Y7l3K2inoxQwSPyy9u_58QOi7dzJab5IRZ45ZHhY_DXZmjIdicDsUsGvc40AeJZv-TW1a9Qyrr3klGwAA618L4HaBIS8ZQ0DgeyiBwWNY2JxLl/s320/Screen+Shot+2018-07-03+at+10.50.43+AM.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Go to the &lt;b&gt;pom.xml&lt;/b&gt; file, place the following in it,&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009193; font-family: &amp;quot;monaco&amp;quot;; font-size: 11px;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192; font-family: &amp;quot;monaco&amp;quot;; font-size: 11px;&quot;&gt;plugins&lt;/span&gt;&lt;span style=&quot;color: #009193; font-family: &amp;quot;monaco&amp;quot;; font-size: 11px;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009193; font-family: &amp;quot;monaco&amp;quot;; font-size: 11px;&quot;&gt;....&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;color: #4e9192; font-family: Monaco; font-size: 11px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;plugin&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 11px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;groupId&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;org.apache.camel&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;groupId&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 11px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;artifactId&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;camel-&lt;span style=&quot;text-decoration: underline;&quot;&gt;restdsl&lt;/span&gt;-swagger-&lt;span style=&quot;text-decoration: underline;&quot;&gt;plugin&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;artifactId&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 11px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;2.21.0&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 11px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;configuration&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 11px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;specificationUri&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;src/spec/MyCustomer.json&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;specificationUri&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 11px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;fileName&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;camel-rest.xml&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;fileName&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 11px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;outputDirectory&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;src/main/resources/spring&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;outputDirectory&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 11px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp; &lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;configuration&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #4e9192; font-family: Monaco; font-size: 11px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;plugin&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #4e9192; font-family: Monaco; font-size: 11px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;....&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;color: #009193; font-family: &amp;quot;monaco&amp;quot;; font-size: 11px;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #4e9192; font-family: &amp;quot;monaco&amp;quot;; font-size: 11px;&quot;&gt;plugin&lt;/span&gt;&lt;span style=&quot;color: #009193; font-family: &amp;quot;monaco&amp;quot;; font-size: 11px;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Generate the XML by running following in command line tool,&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;b&gt;&amp;nbsp; mvn camel-restdsl-swagger:generate-xml&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEio71mxqH_YymzX0YlMo63HWYlKC9mt9gcvUvpUff6hfYrOMa-4dHd9r57T7XcS1h-X8tr0eOe_wBMFkYrJQY__wua3n8gT0nYuh0k-N29pUaYYvtr5jnbbojsvTIMAAfw-z5iUr7WMInDX/s1600/Screen+Shot+2018-07-03+at+11.31.08+AM.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;190&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEio71mxqH_YymzX0YlMo63HWYlKC9mt9gcvUvpUff6hfYrOMa-4dHd9r57T7XcS1h-X8tr0eOe_wBMFkYrJQY__wua3n8gT0nYuh0k-N29pUaYYvtr5jnbbojsvTIMAAfw-z5iUr7WMInDX/s640/Screen+Shot+2018-07-03+at+11.31.08+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
You will find a newly generated camel context named &quot;&lt;b&gt;camel-rest.xml&lt;/b&gt;&quot;, and it has all the Path implementation in Camel.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1ab8XvZoP8i_7puV_hAHEelg2m7JwYm5zm_ywwqQdJKpXUVFR_p8lxgA-h1ayT-LJeI3IXhxfLyVIS-FaWGqsz6A-nvDo1cSopxV-KF6DYJxA5uBvGWV6qnUu0JqqGkh0klSbL8xRhQfc/s1600/Screen+Shot+2018-07-03+at+11.33.36+AM.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;206&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1ab8XvZoP8i_7puV_hAHEelg2m7JwYm5zm_ywwqQdJKpXUVFR_p8lxgA-h1ayT-LJeI3IXhxfLyVIS-FaWGqsz6A-nvDo1cSopxV-KF6DYJxA5uBvGWV6qnUu0JqqGkh0klSbL8xRhQfc/s640/Screen+Shot+2018-07-03+at+11.33.36+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Copy everything in between &quot;&lt;b&gt;rests&lt;/b&gt;&quot;, into the original &quot;&lt;b&gt;camel-context.xml&lt;/b&gt;&quot;&lt;b&gt;&amp;nbsp;&lt;/b&gt;and place in-between &quot;&lt;b&gt;camelContext&lt;/b&gt;&quot;. and add the following rest configuration on top of the rest component.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #932192; font-family: Monaco; font-size: 11px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;restConfiguration&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;apiContextPath&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #3933ff;&quot;&gt;&quot;api-docs&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;bindingMode&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #3933ff;&quot;&gt;&quot;auto&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3933ff; font-family: Monaco; font-size: 11px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;component&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&quot;undertow&quot;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;contextPath&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&quot;/customer&quot;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 11px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #932192;&quot;&gt;enableCORS&lt;/span&gt;=&lt;span style=&quot;color: #3933ff;&quot;&gt;&quot;true&quot;&lt;/span&gt; &lt;span style=&quot;color: #932192;&quot;&gt;port&lt;/span&gt;=&lt;span style=&quot;color: #3933ff;&quot;&gt;&quot;8080&quot;&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 11px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;apiProperty&lt;/span&gt; &lt;span style=&quot;color: #932192;&quot;&gt;key&lt;/span&gt;=&lt;span style=&quot;color: #3933ff;&quot;&gt;&quot;cors&quot;&lt;/span&gt; &lt;span style=&quot;color: #932192;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;color: #3933ff;&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3933ff; font-family: Monaco; font-size: 11px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;apiProperty&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&quot;api.title&quot;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&quot;Customer Service&quot;&lt;span style=&quot;color: #009193;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3933ff; font-family: Monaco; font-size: 11px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;apiProperty&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&quot;api.version&quot;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&quot;1.0.0&quot;&lt;span style=&quot;color: #009193;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #4e9192; font-family: Monaco; font-size: 11px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;restConfiguration&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #4e9192; font-family: Monaco; font-size: 11px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #4e9192; font-family: Monaco; font-size: 11px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #4e9192; font-family: Monaco; font-size: 11px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmnx6mFtUA8ToCcrbMLZFYx0vHSYcNtbmXU5PVBd4AkcbGa2zrctpbsUY1StaudIKmg8yHJD5vfNBDSjergA7I7zPiKgsUAXBtJM5kmWMhPCyu0bAyFHsUwSWS_BiJATNcWXeWmc0xBMq7/s1600/Screen+Shot+2018-07-03+at+12.07.58+PM.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;222&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmnx6mFtUA8ToCcrbMLZFYx0vHSYcNtbmXU5PVBd4AkcbGa2zrctpbsUY1StaudIKmg8yHJD5vfNBDSjergA7I7zPiKgsUAXBtJM5kmWMhPCyu0bAyFHsUwSWS_BiJATNcWXeWmc0xBMq7/s640/Screen+Shot+2018-07-03+at+12.07.58+PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #4e9192; font-family: Monaco; font-size: 11px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #4e9192; font-family: Monaco; font-size: 11px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
Delete&amp;nbsp;the generated &quot;&lt;b&gt;camel-rest.xml&lt;/b&gt;&quot;.&amp;nbsp;&lt;/div&gt;
&lt;h4&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Mocking the APIs with Camel&lt;/span&gt;&lt;/h4&gt;
We will mock the return result by adding a constant defined bean in the camel context.&lt;br /&gt;
Add a beans.xml under&amp;nbsp;&lt;b&gt;src/main.resource/spring&amp;nbsp;&lt;/b&gt;(Right click on the folder, select New-&amp;gt;beans.xml File)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlZJVFN5oyZxRGt3EotMYMCTqWvf3FjoV53wrEOogojR7POD1phVgWE9kXPgV72DEF_rEKHlO1pVuxRIFdQ-lIfnfzuqQwpjKhzJ0-DyOM3SIyjwEKEPVf0BRhXuYnlwKOzkOwcGq7mUb0/s1600/Screen+Shot+2018-07-05+at+10.34.50+AM.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;346&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlZJVFN5oyZxRGt3EotMYMCTqWvf3FjoV53wrEOogojR7POD1phVgWE9kXPgV72DEF_rEKHlO1pVuxRIFdQ-lIfnfzuqQwpjKhzJ0-DyOM3SIyjwEKEPVf0BRhXuYnlwKOzkOwcGq7mUb0/s640/Screen+Shot+2018-07-05+at+10.34.50+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Add the follow code snap to the beans.xml&lt;br /&gt;
&lt;div style=&quot;color: #932192; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;?&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;xml&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;version&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #3933ff;&quot;&gt;&quot;1.0&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;encoding&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #3933ff;&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3933ff; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;beans&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;xmlns&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&quot;http://www.springframework.org/schema/beans&quot;&lt;/div&gt;
&lt;div style=&quot;color: #3933ff; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;xmlns:util&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&quot;http://www.springframework.org/schema/util&quot;&lt;/div&gt;
&lt;div style=&quot;color: #3933ff; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;xmlns:xsi&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;xsi:schemaLocation&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #3933ff; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp; &amp;nbsp; http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #3933ff; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp; &amp;nbsp; http://camel.apache.org/schema/spring &amp;nbsp; &amp;nbsp; &amp;nbsp; http://camel.apache.org/schema/spring/camel-spring.xsd&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #3933ff; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp; &amp;nbsp; http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd&quot;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3933ff; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;util:list&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&quot;CustomerList&quot;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;list-class&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&quot;java.util.ArrayList&quot;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;ref&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #932192;&quot;&gt;bean&lt;/span&gt;=&lt;span style=&quot;color: #3933ff;&quot;&gt;&quot;Customer&quot;&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #4e9192; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;util:list&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3933ff; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;util:map&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&quot;Customer&quot;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;map-class&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&quot;java.util.HashMap&quot;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3933ff; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;entry&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&quot;name&quot;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&quot;Christina&quot;&lt;span style=&quot;color: #009193;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;entry&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #932192;&quot;&gt;key&lt;/span&gt;=&lt;span style=&quot;color: #3933ff;&quot;&gt;&quot;age&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #932192;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;color: #3933ff;&quot;&gt;&quot;28&quot;&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3933ff; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;entry&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&quot;contact&quot;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&quot;765483921&quot;&lt;span style=&quot;color: #009193;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #4e9192; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;util:map&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;monaco&amp;quot;;&quot;&gt;beans&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
Add the camel route in the to &quot;&lt;b&gt;camel-context.xml&lt;/b&gt;&quot;, the first one returns a mock customer data, the second one takes the input of a customer info.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #3933ff; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;route&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&quot;rest1-route&quot;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #3933ff;&quot;&gt;&quot;restone&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;uri&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #3933ff;&quot;&gt;&quot;direct:rest1&quot;&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3933ff; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;setBody&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&quot;route-setBody1&quot;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;simple&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;bean:CustomerList?method=get(0)&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;simple&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp; &lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;setBody&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;route&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3933ff; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;route&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&quot;rest2-route&quot;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #3933ff;&quot;&gt;&quot;resttwo&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;uri&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #3933ff;&quot;&gt;&quot;direct:rest2&quot;&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3933ff; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;log&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&quot;input-log&quot;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;message&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&quot;&amp;gt;&amp;gt;&amp;gt; ${body}&quot;&lt;span style=&quot;color: #009193;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3933ff; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;setBody&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #932192;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&quot;route-setBody2&quot;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;simple&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;Customer created&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;simple&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;setBody&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;route&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
And in the &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;b&gt;src/main/java/org/mycompany/Application.java&lt;/b&gt;&lt;/span&gt;&amp;nbsp;added the new beans.xml file.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #3933ff; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #777777;&quot;&gt;@ImportResource&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;({&lt;/span&gt;&quot;classpath:spring/camel-context.xml&quot;&lt;span style=&quot;color: black;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3933ff; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&quot;classpath:spring/beans.xml&quot;&lt;span style=&quot;color: black;&quot;&gt;})&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #931a68;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #931a68;&quot;&gt;class&lt;/span&gt; Application {&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
Now, it&#39;s time to setup the dependency libraries into pom.xml.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #4e9192; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;dependency&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;groupId&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;org.springframework.boot&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;groupId&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;artifactId&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;spring-boot-starter-&lt;span style=&quot;text-decoration: underline;&quot;&gt;undertow&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;artifactId&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #4e9192; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;dependency&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal; min-height: 17px;&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #4e9192; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;dependency&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;groupId&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;org.apache.camel&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;groupId&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;artifactId&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;camel-&lt;span style=&quot;text-decoration: underline;&quot;&gt;undertow&lt;/span&gt;-starter&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;artifactId&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #4e9192; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;dependency&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal; min-height: 17px;&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #4e9192; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;dependency&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;groupId&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;org.apache.camel&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;groupId&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;artifactId&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;camel-&lt;span style=&quot;text-decoration: underline;&quot;&gt;jackson&lt;/span&gt;-starter&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;artifactId&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #4e9192; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;dependency&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal; min-height: 17px;&quot;&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #4e9192; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;dependency&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;groupId&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;org.apache.camel&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;groupId&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;artifactId&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;camel-swagger-java-starter&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;artifactId&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #4e9192; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;dependency&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;caret-color: rgb(0, 0, 0); color: black; font-family: -webkit-standard; font-size: small;&quot;&gt;and remove the tomcat&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;caret-color: rgb(0, 0, 0); color: black; font-family: -webkit-standard; font-size: small;&quot;&gt;dependency (we are using undertow now)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;caret-color: rgb(0, 0, 0); color: black; font-family: -webkit-standard; font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;dependency&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;caret-color: rgb(0, 0, 0); color: black; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;groupId&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;org.springframework.boot&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;groupId&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;caret-color: rgb(0, 0, 0); color: black; font-stretch: normal; line-height: normal;&quot;&gt;
&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;artifactId&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;spring-boot-starter-&lt;span style=&quot;text-decoration: underline;&quot;&gt;web&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #4e9192;&quot;&gt;artifactId&lt;/span&gt;&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&amp;lt;/&lt;/span&gt;dependency&lt;span style=&quot;color: #009193;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;color: #4e9192; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #009193;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #4e9192; font-family: Monaco; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;caret-color: rgb(0, 0, 0); color: black; font-family: -webkit-standard; font-size: small;&quot;&gt;Finally, it&#39;s time to test. run the follow in command line:&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;b&gt;&amp;nbsp; mvn spring-boot:run&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
And two endpoint will be exposed for testing.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;background-color: rgba(0, 0, 0, 0.85098); color: #f4f4f4; font-family: Monaco; font-size: 17px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-variant-ligatures: no-common-ligatures;&quot;&gt;Christina Laptop$ curl http://YOURIP:8080/customer/id/123&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(0, 0, 0, 0.85098); color: #f4f4f4; font-family: Monaco; font-size: 17px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-variant-ligatures: no-common-ligatures;&quot;&gt;{&quot;name&quot;:&quot;Christina&quot;,&quot;age&quot;:&quot;28&quot;,&quot;contact&quot;:&quot;765483921&quot;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(0, 0, 0, 0.85098); color: #f4f4f4; font-family: Monaco; font-size: 17px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-variant-ligatures: no-common-ligatures;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(0, 0, 0, 0.85098); color: #f4f4f4; font-family: Monaco; font-size: 17px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-variant-ligatures: no-common-ligatures;&quot;&gt;Christina Laptop$ curl --header &quot;Content-Type: application/json&quot; &amp;nbsp; --request PUT &amp;nbsp; --data &#39;{&quot;name&quot;:&quot;Christina&quot;,&quot;age&quot;:28,&quot;contact&quot;:&quot;765483921&quot;}&#39; &amp;nbsp; http://YOURIP:8080/customer/add&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(0, 0, 0, 0.85098); color: #f4f4f4; font-family: Monaco; font-size: 17px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-variant-ligatures: no-common-ligatures;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(0, 0, 0, 0.85098); color: #f4f4f4; font-family: Monaco; font-size: 17px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-variant-ligatures: no-common-ligatures;&quot;&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(0, 0, 0, 0.85098); color: #f4f4f4; font-family: Monaco; font-size: 17px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-variant-ligatures: no-common-ligatures;&quot;&gt;&quot;Customer created&quot;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
You are now ready for the consumer to start testing the APIs.&lt;br /&gt;
Next part I will take you through how to actually implement the API, expose it on Cloud and manage it.&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/83314155728393228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1207253639848690946/83314155728393228' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/83314155728393228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/83314155728393228'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/2018/07/fuse-contract-first-api-design-with.html' title='Fuse - Contract First API Design with Apicurio and Fuse/Camel - Part One'/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWtAxnPld3CZTCyCB8LBAR9eLIzi9fZfqi2uV5QuDJTlQYpr1_CQR6OQW7-4xY8tmLsb75gM1j2m_dte-ZJ8pRpo8dVvL_AZ5ly3yoEvDOknjKuCBzHKIQU6e86t5uApBHW-xblwPpWRr9/s72-c/Screen+Shot+2018-07-03+at+4.07.01+AM.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1207253639848690946.post-2115553904906490918</id><published>2018-06-04T14:30:00.000+08:00</published><updated>2018-06-04T21:35:50.153+08:00</updated><title type='text'>Red Hat Fuse 7 - Announcing Red Hat Fuse 7 GA!!</title><content type='html'>Red Hat Fuse 7 (formerly called Red Hat JBoss Fuse) is now officially available. This cloud-native, distributed solution allows developers to easily develop, deploy and scale integration applications. Architects can compose and orchestrate microservices with Red Hat Fuse to introduce agility to the systems. In this release, Fuse also&amp;nbsp;empowers integration experts and business users to become more productive with the self-service low-code platform. With this new agile integration solution, enterprises can now engage in wider collaboration with and among partners at a much quicker pace.&lt;br /&gt;
Here&#39;s where you can download it:&amp;nbsp;&lt;a href=&quot;https://developers.redhat.com/products/fuse/download/&quot;&gt;https://developers.redhat.com/products/fuse/download/&lt;/a&gt;.&lt;br /&gt;
&lt;h1&gt;
What&#39;s in Fuse 7?&lt;/h1&gt;
&lt;div class=&quot;separator&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnqK_9D_e0LzBPrylldgxY6yx2oSQv4weZxl7HzHHlBoWoIuhcWE6LXRbSipKcn5v2m1wDHBInRwykN437ugfKaiWHbcWzR72Q8IE0uNppyx7twZrrEmFuLilof5Dfh7wnfj1xIJ4acOL1/s1600/Screen+Shot+2018-05-29+at+11.45.33+AM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;256&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnqK_9D_e0LzBPrylldgxY6yx2oSQv4weZxl7HzHHlBoWoIuhcWE6LXRbSipKcn5v2m1wDHBInRwykN437ugfKaiWHbcWzR72Q8IE0uNppyx7twZrrEmFuLilof5Dfh7wnfj1xIJ4acOL1/s640/Screen+Shot+2018-05-29+at+11.45.33+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Camel still&amp;nbsp;is the core component in Fuse. Due to the complexity&amp;nbsp;of integration solutions, a pattern-based integration solution is crucial for preventing developers from falling into complex, tangled, and spaghetti-like integration logic. Therefore, pre-built components and pre-defined patterns are always going to be the way to develop integration solutions, regardless of whether they are local or in the cloud.&lt;br /&gt;
Narayana is now the transaction technology, to get you ready for handling more-complex distributed transactions.&lt;br /&gt;
Jetty is deprecated and replaced by a more streamlined, lightweight web container: Undertow.&lt;br /&gt;
One of the most common questions I get from people just getting started with Fuse is, &quot;Why do you need to have so many different options for runtime?&quot; It&#39;s because we believe developers should be able to choose what best suits them, for example:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Spring Boot for microservices&lt;/li&gt;
&lt;li&gt;Karaf 4 for OSGi lover&lt;/li&gt;
&lt;li&gt;Red Hat JBoss Enterprise Application Platform for Java EE developers&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
A Cloud-Native Integration Platform&lt;/h1&gt;
Building cloud-native applications can be complicated. Integrating them as well as making the integration solution itself be cloud-ready is even more challenging.&amp;nbsp;You need to address the entire software lifecycle as whole, for example, creating applications with a&amp;nbsp;smaller footprint, automating the deployment flow, and monitoring applications in a distributed environment. &amp;nbsp;Because the Fuse 7 platform&#39;s features and technology that take care of much of this&amp;nbsp;complexity, integration teams can now focus on the most important thing: the business logic of the integration application.&lt;br /&gt;
&lt;b&gt;Lightweight Development&lt;/b&gt;&lt;br /&gt;
Building a small-footprint microservice/service is the most fundamental thing when it comes to moving integration into the cloud. Both the Spring Boot and Karaf runtimes are lightweight and microservices-enabled. Developers can take advantage of pattern-based integration in Camel, and plugins help developers package their integration application as a container to be cloud-ready.&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyS0OT4EePl3fHCJq_m2nNPtuWM0UzF3jP5kU8PuJuQThtU4sNztDcAWLj0i6Xa7EfIMGPzJgSVMizJIHQjf5SGqOhfMcKMF3jHSA_syn6zA5TXTrLrlq07dyYzUfQfzOfBgYrVTPITEbj/s1600/Screen+Shot+2018-05-30+at+9.21.14+AM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;252&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyS0OT4EePl3fHCJq_m2nNPtuWM0UzF3jP5kU8PuJuQThtU4sNztDcAWLj0i6Xa7EfIMGPzJgSVMizJIHQjf5SGqOhfMcKMF3jHSA_syn6zA5TXTrLrlq07dyYzUfQfzOfBgYrVTPITEbj/s640/Screen+Shot+2018-05-30+at+9.21.14+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;Hybrid Deployment &amp;nbsp;&lt;/b&gt;&lt;br /&gt;
After deployment, Fuse 7 helps developers to package the application into immutable images. Based on your versioning and deployment strategy, these images can be tagged and sent along to be deployed in different stages of the&amp;nbsp;environment. The platform also takes care of the availability, scalability, and resiliency for the application; scaling up and down the application require just a few clicks in the UI. Or, if you prefer to automate that, you can.&amp;nbsp; The application not only runs in the cloud, it can also be run as a single, standalone application. All three runtimes are available to run in both scenarios.&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3u-eDHgS4GsJGuQFt6Z4InlrrjZieLKDLGips_Iqqc2RX79f0i7jEqSg3RehzJjd115DBgdW8I_3IQCjkzqEPJF1gT2L8MYhyphenhyphenCFNnY66peSqTwMpU1ZHVJj3Mqa51TeiMZd0di0RPKi32/s1600/Screen+Shot+2018-05-30+at+4.18.44+PM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;296&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3u-eDHgS4GsJGuQFt6Z4InlrrjZieLKDLGips_Iqqc2RX79f0i7jEqSg3RehzJjd115DBgdW8I_3IQCjkzqEPJF1gT2L8MYhyphenhyphenCFNnY66peSqTwMpU1ZHVJj3Mqa51TeiMZd0di0RPKi32/s640/Screen+Shot+2018-05-30+at+4.18.44+PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;Management That Provides a Centralized Application View&lt;/b&gt;&lt;br /&gt;
Managing a distributed cloud environment is a nightmare: instead of a couple instances, you now have thousands of individual running instances. Fuse gives you a centralized viewing console in the cloud environment, so it will be much easier to locate all the running Fuse instances. Also, each running application is managed by Red Hat OpenShift, which provides comprehensive features for managing applications in the cloud.&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIch3pDUMbiwGx54yH_u1xthZev9aa8YK6t8xJMxTWFpgyMCu7WHcLMdr50hnDd6cEzg7gWjLHhv0ziadukn9y_m90Pj52Vh27GEE42kso0BRuwZ-uHWaB09UnJotE4zIZiM6Vbz4cKWkz/s1600/Screen+Shot+2018-05-30+at+9.29.54+AM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;290&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIch3pDUMbiwGx54yH_u1xthZev9aa8YK6t8xJMxTWFpgyMCu7WHcLMdr50hnDd6cEzg7gWjLHhv0ziadukn9y_m90Pj52Vh27GEE42kso0BRuwZ-uHWaB09UnJotE4zIZiM6Vbz4cKWkz/s640/Screen+Shot+2018-05-30+at+9.29.54+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;Low-Code Integration for Citizen Integrators&lt;/b&gt;&lt;br /&gt;
Another new feature introduced in Fuse 7 is the Red Hat Fuse Online self-service platform, which allows citizen&amp;nbsp;integrators to build integration services on their own. Fuse 7 allows a&amp;nbsp;company to have a single, standardized platform instead of having multiple pieces of technology for different user characteristics, allowing maximum collaboration between developers and citizen integrators. With the intuitive interface&amp;nbsp;and the highly customizable components&#39; capabilities, citizen integrators can quickly deliver an integration solution without waiting for a developer&#39;s implementation. And developers can concentrate on developing more-complex integration logic and also package that into the platform so the&amp;nbsp;citizen integrators can re-use it on the fly.&lt;br /&gt;
When you log in to the platform, you will be greeted with an overview of all the available integrations and connectors as well as the status of the running integrations.&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivTCCXLEJUqblRMBMbGNKYMYaSq2ArDEp7XJXyYh48pyXuh5d8Xw0JeHHMhUo1xffKB9M0KYcy8VSxMxTrbog0AVvkqM4C97WSEajS0hPs0kn69Fv7E9KOcNZ_h84dsyYWBTG39hJ4A5ft/s1600/Screen+Shot+2018-05-30+at+7.16.51+PM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;358&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivTCCXLEJUqblRMBMbGNKYMYaSq2ArDEp7XJXyYh48pyXuh5d8Xw0JeHHMhUo1xffKB9M0KYcy8VSxMxTrbog0AVvkqM4C97WSEajS0hPs0kn69Fv7E9KOcNZ_h84dsyYWBTG39hJ4A5ft/s640/Screen+Shot+2018-05-30+at+7.16.51+PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
Integrations allow an integrator to create an application by simply dragging and dropping the pre-built connectors&amp;nbsp;or by mapping between input source and output target data.&lt;br /&gt;
&lt;div class=&quot;separator&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQSSnSdj2gHeCxHwedT7jU8j4vPRPZNALF4C4TtFcmYnliwlpulRoPsV6pnIAnoSJpFxgJqNh1S8k8MuEXUCN7760lAIUNh6uIl4jQAyQiYntUgT-9HZYPzChpLI2jBR7HT-DcC37gg-W0/s1600/Screen+Shot+2018-05-30+at+7.20.38+PM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;204&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQSSnSdj2gHeCxHwedT7jU8j4vPRPZNALF4C4TtFcmYnliwlpulRoPsV6pnIAnoSJpFxgJqNh1S8k8MuEXUCN7760lAIUNh6uIl4jQAyQiYntUgT-9HZYPzChpLI2jBR7HT-DcC37gg-W0/s640/Screen+Shot+2018-05-30+at+7.20.38+PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZOYznqZIgJaEFBRRON0V90movwUaxJiZLZOlkBDTpVu8o3IESPV_nTWSugNp9ygwQ7D3Y3U9Z23vGNby35w5eqFiwD2SB4li2UGtkaNcLrtn7B1D2xHbqof9xGd9Hj8oOEWqkVG6DPe8K/s1600/Screen+Shot+2018-05-30+at+7.20.48+PM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;216&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZOYznqZIgJaEFBRRON0V90movwUaxJiZLZOlkBDTpVu8o3IESPV_nTWSugNp9ygwQ7D3Y3U9Z23vGNby35w5eqFiwD2SB4li2UGtkaNcLrtn7B1D2xHbqof9xGd9Hj8oOEWqkVG6DPe8K/s640/Screen+Shot+2018-05-30+at+7.20.48+PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
When there is a need for more-complex process, you can also add customized connectors by simply importing the project package into the system. The customized connectors can be created by the in-house developer or provided online from our open source community.&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxwrAkRdZ9btUlsUJ51FzsAw9Gtj95Y-NGLoHOT55rIZiHhmt56miEZCmrbA7bmVhK0yi6py-esVEXhaVxluQoGjo-EsTgXizcBcDvKweDDuSm8uoKLuEzgw6y7Aaz7PBozLWNdnUkThYt/s1600/Screen+Shot+2018-05-30+at+7.43.15+PM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;160&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxwrAkRdZ9btUlsUJ51FzsAw9Gtj95Y-NGLoHOT55rIZiHhmt56miEZCmrbA7bmVhK0yi6py-esVEXhaVxluQoGjo-EsTgXizcBcDvKweDDuSm8uoKLuEzgw6y7Aaz7PBozLWNdnUkThYt/s640/Screen+Shot+2018-05-30+at+7.43.15+PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h1&gt;
Try Fuse 7 Now&lt;/h1&gt;
You can try the new version of the platform here:&lt;br /&gt;
&lt;a href=&quot;https://www.redhat.com/en/explore/fuse-online&quot;&gt;https://www.redhat.com/en/explore/fuse-online&lt;/a&gt;&lt;br /&gt;
So what are you waiting for? Start your new Fuse 7 adventure today.</content><link rel='replies' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/2115553904906490918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1207253639848690946/2115553904906490918' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/2115553904906490918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/2115553904906490918'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/2018/06/red-hat-fuse-7-announcing-red-hat-fuse.html' title='Red Hat Fuse 7 - Announcing Red Hat Fuse 7 GA!!'/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnqK_9D_e0LzBPrylldgxY6yx2oSQv4weZxl7HzHHlBoWoIuhcWE6LXRbSipKcn5v2m1wDHBInRwykN437ugfKaiWHbcWzR72Q8IE0uNppyx7twZrrEmFuLilof5Dfh7wnfj1xIJ4acOL1/s72-c/Screen+Shot+2018-05-29+at+11.45.33+AM.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1207253639848690946.post-7199339328315332170</id><published>2018-02-27T20:00:00.000+08:00</published><updated>2018-02-27T20:00:14.535+08:00</updated><title type='text'>Red Hat Fuse - Announcing Fuse 7 Tech preview 3 release.</title><content type='html'>Red Hat Fuse 7.0  technical preview three is out today!&amp;nbsp;On the pathway to become one of the best cloud-native integration platform, Fuse gives developer freedom to choose how they want to develop the integration solution, where they want to deploy it and capabilities to address new integration personas that do not have development experience.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;By supporting the &lt;b&gt;&lt;i&gt;three major runtime&lt;/i&gt;&lt;/b&gt;, developer is free to work on the runtime of their choice.&lt;/li&gt;
&lt;li&gt;By supporting&amp;nbsp;&lt;b&gt;&lt;i&gt;standalone and cloud deployment&lt;/i&gt;&lt;/b&gt;, it simplifies the complexity to distinguish between these environments, allowing application to deploy freely among the environment of your choice.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;All levels of developers are welcome, you can either dive deep into creating &lt;b&gt;customize complex integration logic&lt;/b&gt;, or using the new &lt;b&gt;low code platform&lt;/b&gt; to quickly build a simple integration.&lt;/li&gt;
&lt;/ul&gt;
In this Tech Preview release you get it all.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Fuse Standalone&lt;ul&gt;
&lt;li&gt;Spring-boot for microservice&lt;/li&gt;
&lt;li&gt;Karaf 4 for OSGi lover&lt;/li&gt;
&lt;li&gt;JBoss EAP for JavaEE developers&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Fuse on OpenShift&lt;ul&gt;
&lt;li&gt;Plugins for easy containerize application&lt;/li&gt;
&lt;li&gt;Flexible cloud platform (based on OpenShift(Kubernetes) technology&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Fuse Online&lt;ul&gt;
&lt;li&gt;Low code integration development&lt;/li&gt;
&lt;li&gt;Supports customization&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;strong&gt;Fuse Online Highlights&lt;/strong&gt;&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJGA0CqLIv_8cPfYBWvQ-HZGJSzS5-hHZnUBKGCrjfO-gnwST910tA3SvKariCV0Ra_cjkDb7tgV6MA4aakujkASTbop_OxN-YK1HYD9NSnlh3QCSK026Cfmt41_3feEtSr0E85IT9r5IQ/s1600/Screen+Shot+2018-02-22+at+3.12.14+PM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;354&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJGA0CqLIv_8cPfYBWvQ-HZGJSzS5-hHZnUBKGCrjfO-gnwST910tA3SvKariCV0Ra_cjkDb7tgV6MA4aakujkASTbop_OxN-YK1HYD9NSnlh3QCSK026Cfmt41_3feEtSr0E85IT9r5IQ/s640/Screen+Shot+2018-02-22+at+3.12.14+PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this release you can now integrate with existing SaaS API. Simply by define a connector via importing Swagger documents into Fuse Online.&lt;br /&gt;
&lt;br /&gt;
1. Upload Swagger document in the customize&amp;nbsp;API Client Connector&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEior-fEre24GQ5e2GO5C15BIOBSpv0TcWr4dKx73pRcdunJZ2TtBYDTXrNTEXMDWcFeT2aw-9Y7Qap5_vmFHkkSuWZ699Egfx_moYVx3-R_VBm4lCl_8lIY-EDs2zAd-IO5wmwDB31Tmwfs/s1600/Screen+Shot+2018-02-22+at+5.49.25+PM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;306&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEior-fEre24GQ5e2GO5C15BIOBSpv0TcWr4dKx73pRcdunJZ2TtBYDTXrNTEXMDWcFeT2aw-9Y7Qap5_vmFHkkSuWZ699Egfx_moYVx3-R_VBm4lCl_8lIY-EDs2zAd-IO5wmwDB31Tmwfs/s640/Screen+Shot+2018-02-22+at+5.49.25+PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
2. Create a connection base on the customized connector&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjih3ULly-abWOvY3jCJo2RCa-6uPCak5Z4drBvdxDXC2DpowWRS0tcaMfhCy-Qq0dpzq26BPKKX1Aje4UfrEriN3fHJIbsg9U5Na2fPfUaJYtcPknCDvvgH4CNf7O1XzkUHiqUvT-1pD5/s1600/Screen+Shot+2018-02-22+at+5.49.37+PM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;348&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjih3ULly-abWOvY3jCJo2RCa-6uPCak5Z4drBvdxDXC2DpowWRS0tcaMfhCy-Qq0dpzq26BPKKX1Aje4UfrEriN3fHJIbsg9U5Na2fPfUaJYtcPknCDvvgH4CNf7O1XzkUHiqUvT-1pD5/s640/Screen+Shot+2018-02-22+at+5.49.37+PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
3. Get roll&#39;n and start your integration!&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgvy4PbkI1xpisqyIpq3X_-oavWBQJ8nv_-YwR8er_p67KdMFTz-YXgdIfePPO5QUyPEqxJSrklnWV4kdZyUMjurop3S5MxjmjO9cHj4kwOK9G_g2VurbFbUavBzhLa_ggOxGHC1wdGQj7/s1600/Screen+Shot+2018-02-22+at+5.50.11+PM.png&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;220&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgvy4PbkI1xpisqyIpq3X_-oavWBQJ8nv_-YwR8er_p67KdMFTz-YXgdIfePPO5QUyPEqxJSrklnWV4kdZyUMjurop3S5MxjmjO9cHj4kwOK9G_g2VurbFbUavBzhLa_ggOxGHC1wdGQj7/s640/Screen+Shot+2018-02-22+at+5.50.11+PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Or customize your own integration by uploading an extension.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtzVa1iUTUcYFViEiwgB8Ti6tbj0vl8HWnn1I7llhHwuT__C2cxppc4h9avIuwdK_UI7_j1mcTwFu0aUEzWmqMJ1CeQxe6y6FR9T-KNd_zRWmuUX3K06yKQEMxJL1KeRd-FTGbfH-OevD_/s1600/Screen+Shot+2018-02-26+at+3.30.11+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtzVa1iUTUcYFViEiwgB8Ti6tbj0vl8HWnn1I7llhHwuT__C2cxppc4h9avIuwdK_UI7_j1mcTwFu0aUEzWmqMJ1CeQxe6y6FR9T-KNd_zRWmuUX3K06yKQEMxJL1KeRd-FTGbfH-OevD_/s640/Screen+Shot+2018-02-26+at+3.30.11+PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Watch and follow my video on getting started with this new feature.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Learn how to integrate an existing SaaS API with the Fuse LOW-CODE platform.&lt;br /&gt;
No coding is required.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allow=&quot;autoplay; encrypted-media&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/8C9Bd_aLIWY&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;

&lt;br /&gt;
Swagger Doc:&lt;br /&gt;
https://raw.githubusercontent.com/weimeilin79/fuse7tp3demo/master/waterpayment.yml&lt;br /&gt;
&lt;br /&gt;
Water Company Dashboard:&lt;br /&gt;
https://water-company-tp3demo.4b63.pro-ap-southeast-2.openshiftapps.com/main&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
I hope you like what you see, go ahead and play with it. Let us know what you think!&lt;br /&gt;
&lt;a href=&quot;http://redhat.com/en/explore/red-hat-fuse-online&quot;&gt;CLICK HERE! To get started on Fuse Online!&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The demo instructions can be found here:&lt;br /&gt;
&lt;a href=&quot;https://github.com/weimeilin79/fuse7tp3demo/blob/master/README.md&quot;&gt;https://github.com/weimeilin79/fuse7tp3demo/blob/master/README.md&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Also adding a bonus demo:&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allow=&quot;autoplay; encrypted-media&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/M-8PAfQT6v0&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;

&lt;br /&gt;
The bonus demo instructions can be found here:&lt;br /&gt;
&lt;a href=&quot;https://github.com/weimeilin79/fuse7tp3demo/blob/master/README-1.md&quot;&gt;https://github.com/weimeilin79/fuse7tp3demo/blob/master/README-1.md&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/7199339328315332170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1207253639848690946/7199339328315332170' title='103 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/7199339328315332170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/7199339328315332170'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/2018/02/red-hat-fuse-announcing-fuse-7-tech.html' title='Red Hat Fuse - Announcing Fuse 7 Tech preview 3 release.'/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJGA0CqLIv_8cPfYBWvQ-HZGJSzS5-hHZnUBKGCrjfO-gnwST910tA3SvKariCV0Ra_cjkDb7tgV6MA4aakujkASTbop_OxN-YK1HYD9NSnlh3QCSK026Cfmt41_3feEtSr0E85IT9r5IQ/s72-c/Screen+Shot+2018-02-22+at+3.12.14+PM.png" height="72" width="72"/><thr:total>103</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1207253639848690946.post-8786403337579534470</id><published>2018-01-03T23:37:00.001+08:00</published><updated>2018-01-03T23:38:02.226+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Fuse"/><category scheme="http://www.blogger.com/atom/ns#" term="Getting Started"/><category scheme="http://www.blogger.com/atom/ns#" term="JBoss Fuse"/><category scheme="http://www.blogger.com/atom/ns#" term="Quick Starts"/><category scheme="http://www.blogger.com/atom/ns#" term="Tech Quickies"/><title type='text'>Red Hat Fuse - Tech Quickies series - Zero. Hello world</title><content type='html'>This is the sample that I create for the hello world.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h3&gt;
&lt;b&gt;Prerequisite&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
Before you start, make sure you have installed the following software:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://openjdk.java.net/install/&quot;&gt;Java SE Development Kit (JDK) version 1.8.x (Java 8)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://maven.apache.org/download.cgi&quot;&gt;Apache Maven&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJaRv53l5MXdQ2bf5NObvdual9fcDaVdEGFFxXBPqWrjMPS3l86viZzzPRha64OBw8gYN3g0IWfBOT2XTEssb4PNOJe9JfahKUnkpGa5bKhgcccRn6l12FWzvMik1_lv6Vh-FJqDSmd5-r/s1600/Screen+Shot+2018-01-03+at+10.03.03+AM.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;264&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJaRv53l5MXdQ2bf5NObvdual9fcDaVdEGFFxXBPqWrjMPS3l86viZzzPRha64OBw8gYN3g0IWfBOT2XTEssb4PNOJe9JfahKUnkpGa5bKhgcccRn6l12FWzvMik1_lv6Vh-FJqDSmd5-r/s640/Screen+Shot+2018-01-03+at+10.03.03+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h3&gt;
Setup your Development Environment&lt;/h3&gt;
&lt;div&gt;
Download and launch the installer&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;For Mac / Windows user:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Download Red Hat JBoss Developer Suite &lt;a href=&quot;https://developers.redhat.com/products/devsuite/download/&quot;&gt;here&lt;/a&gt;. &amp;nbsp;Go to the folder where you downloaded the installer and double click on the downloaded file and kick off the installation.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;For Linux user:&lt;/li&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Download Red Hat JBoss Developer Studio 11.x Stand-alone Installer from &lt;a href=&quot;https://access.redhat.com/jbossnetwork/restricted/listSoftware.html?product=jbossdeveloperstudio&amp;amp;downloadType=distributions&quot;&gt;JBoss Developer Studio Software Downloads&lt;/a&gt;. &amp;nbsp; For detail installation instruction, click &lt;a href=&quot;https://developers.redhat.com/products/devsuite/hello-world/#fndtn-rhel&quot;&gt;here&lt;/a&gt;.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Click Next on the Welcome page and choose your installation path and Next&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;ul&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifW7vpB7XzhlFBpd6YEGQ-lmDN8IlkZ1WgoGNK1cnkJXkDH8rXAbvsdIBdlvCplqFcvFxyMxLZOAV886bCBWS-f7qa29Iwccl8XAHJEgaYly2U2jMP3rof7YXBWWcSQALtxApbfLoC4w3-/s1600/step1-1.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifW7vpB7XzhlFBpd6YEGQ-lmDN8IlkZ1WgoGNK1cnkJXkDH8rXAbvsdIBdlvCplqFcvFxyMxLZOAV886bCBWS-f7qa29Iwccl8XAHJEgaYly2U2jMP3rof7YXBWWcSQALtxApbfLoC4w3-/s1600/step1-1.gif&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Check components for complete Fuse environment:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Red Hat Developer Studio&lt;/li&gt;
&lt;li&gt;Red Hat JBoss Fuse Tooling&lt;/li&gt;
&lt;li&gt;Red Hat JBoss Fuse on JBoss EAP&lt;/li&gt;
&lt;li&gt;Red Hat JBoss Fuse on Apache Karaf&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
Click Next, Enter credentials and click “Download &amp;amp; install”&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZj1eBRWjBqjrnY8YcG0gA44p_goSW9Y7HwVRkGN14e8Esy2AZ9gCyYUM3JKYLmNa8K_bdxtfMi-yW_jbve5prPAAFzJ4y6noprGGgqk-s1qPUNE2OAYrEiGg-awq68VlA3xzZfa4O5CPj/s1600/step1-2.gif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZj1eBRWjBqjrnY8YcG0gA44p_goSW9Y7HwVRkGN14e8Esy2AZ9gCyYUM3JKYLmNa8K_bdxtfMi-yW_jbve5prPAAFzJ4y6noprGGgqk-s1qPUNE2OAYrEiGg-awq68VlA3xzZfa4O5CPj/s1600/step1-2.gif&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Wait until components are downloaded and installed&lt;/div&gt;
&lt;div&gt;
Click “&lt;i&gt;Open Red Hat JBoss Developer Studio&lt;/i&gt;”&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
Create a New Fuse Project on OpenShift&lt;/h3&gt;
&lt;div&gt;
We are going to use the built-in SpringBoot on OpenShift template for our application. Right click in the Project Explorer pane and select New &amp;gt; Fuse Integration Project.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0AWAwTflKTaeSapozanxZFAJ28_7r-6WRGGcrC_lLmpG-yXeWvXRZbOiMEL_As0_H4zLVs-D15lKcy0BYaiP7HmdwAe6IhtddUw9eEMYQL2_NxFIV2oO3vNtecc5-9rNktk64i7nxfU7e/s1600/Screen+Shot+2018-01-03+at+10.12.14+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;380&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0AWAwTflKTaeSapozanxZFAJ28_7r-6WRGGcrC_lLmpG-yXeWvXRZbOiMEL_As0_H4zLVs-D15lKcy0BYaiP7HmdwAe6IhtddUw9eEMYQL2_NxFIV2oO3vNtecc5-9rNktk64i7nxfU7e/s640/Screen+Shot+2018-01-03+at+10.12.14+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
On the Choose a Project name page, enter a project name in the Project Name field. Click Next to continue and accept the defaults for all the other fields. &amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAoLv8rXksPsosohwvdj9ohuBBly5irYIBG2z9bJ0sgt8ltqnC6csb9UhIymNN627gV0DtheUJcl8hz3g16HzTfXGQMsRYft9MMPg167Fe3pRG1010OcfRCusB15fsQgcLmFcHtNqxKvKU/s1600/Screen+Shot+2018-01-03+at+10.12.21+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;238&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAoLv8rXksPsosohwvdj9ohuBBly5irYIBG2z9bJ0sgt8ltqnC6csb9UhIymNN627gV0DtheUJcl8hz3g16HzTfXGQMsRYft9MMPg167Fe3pRG1010OcfRCusB15fsQgcLmFcHtNqxKvKU/s640/Screen+Shot+2018-01-03+at+10.12.21+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
On the Select a Target Runtime page, select Next to accept all the defaults.&lt;/div&gt;
&lt;div&gt;
Select the latest version available for Camel. &amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-cEPZ5HoZlPtu_yFUj9yDlP_ZgsEwPJAYab3U5-4ya-IAX8eAanMRYBthS3jZ90cPsy77xiwFsUxsmyU7Uoa7ha8af1ePDbeYgpW_NNvYmw3gXD3fiY2s6U0m_bpcdWE_cfxKWTSRqPY6/s1600/Screen+Shot+2018-01-03+at+10.12.29+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;264&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-cEPZ5HoZlPtu_yFUj9yDlP_ZgsEwPJAYab3U5-4ya-IAX8eAanMRYBthS3jZ90cPsy77xiwFsUxsmyU7Uoa7ha8af1ePDbeYgpW_NNvYmw3gXD3fiY2s6U0m_bpcdWE_cfxKWTSRqPY6/s640/Screen+Shot+2018-01-03+at+10.12.29+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
The Advanced Project Setup page is where you select the pre-defined SpringBoot on OpenShift template.&lt;/div&gt;
&lt;div&gt;
Select Use a &lt;u&gt;Predefined Template&lt;/u&gt;, Expand &lt;i&gt;&lt;b&gt;Fuse on OpenShift&lt;/b&gt;&lt;/i&gt;. &amp;nbsp;Select &lt;i&gt;SpringBoot on Openshift&lt;/i&gt;.&lt;/div&gt;
&lt;div&gt;
The Project Type will be automatically set to Spring DSL. &amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBIbyZCuIF6YxGrJtOs4GM9mGcgOTnwKiIARmMULrbxPBnG5z1Z2kjiFFQJWknOcZGiwbwPaRh4O3RlKekr4nFwPkn_325wFOYBC9zSkWMp8RAe_oYaLCZ64SkK4bbs7-XQ-FiFGUvGOMx/s1600/Screen+Shot+2018-01-03+at+10.12.37+AM.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;504&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBIbyZCuIF6YxGrJtOs4GM9mGcgOTnwKiIARmMULrbxPBnG5z1Z2kjiFFQJWknOcZGiwbwPaRh4O3RlKekr4nFwPkn_325wFOYBC9zSkWMp8RAe_oYaLCZ64SkK4bbs7-XQ-FiFGUvGOMx/s640/Screen+Shot+2018-01-03+at+10.12.37+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Click Finish.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The build process will be displayed at the bottom of the Advanced Project Setup page. When the build process is complete, you can see the new project in the Project Explorer pane.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
Deploy and test your application&lt;/h3&gt;
&lt;/div&gt;
&lt;div data-katacoda-color=&quot;004d7f&quot; data-katacoda-hidefinish=&quot;false&quot; data-katacoda-hideintro=&quot;false&quot; data-katacoda-id=&quot;weimeilin/courses/intro-openshift/fuse-hello-world&quot; id=&quot;my-element-1&quot; style=&quot;height: 800px; padding-top: 20px;&quot;&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5YedYaox-t4g8IyiFlOPfuRAkyTEfkNicPXHnyS43MjK5X6TUTBbW1zCRLVobzjJAImZM70r4u7W2MNZUiviNddPSh6c7Z_-hqlSlr-F_PIkb1e-rX63WcKfhis9k0v6E8POCmrI7ynxS/s1600/Screen+Shot+2018-01-03+at+10.12.45+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5YedYaox-t4g8IyiFlOPfuRAkyTEfkNicPXHnyS43MjK5X6TUTBbW1zCRLVobzjJAImZM70r4u7W2MNZUiviNddPSh6c7Z_-hqlSlr-F_PIkb1e-rX63WcKfhis9k0v6E8POCmrI7ynxS/s1600/Screen+Shot+2018-01-03+at+10.12.45+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;171&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5YedYaox-t4g8IyiFlOPfuRAkyTEfkNicPXHnyS43MjK5X6TUTBbW1zCRLVobzjJAImZM70r4u7W2MNZUiviNddPSh6c7Z_-hqlSlr-F_PIkb1e-rX63WcKfhis9k0v6E8POCmrI7ynxS/s400/Screen+Shot+2018-01-03+at+10.12.45+AM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/8786403337579534470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1207253639848690946/8786403337579534470' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/8786403337579534470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/8786403337579534470'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/2018/01/red-hat-fuse-tech-quickies-series-zero.html' title='Red Hat Fuse - Tech Quickies series - Zero. Hello world'/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJaRv53l5MXdQ2bf5NObvdual9fcDaVdEGFFxXBPqWrjMPS3l86viZzzPRha64OBw8gYN3g0IWfBOT2XTEssb4PNOJe9JfahKUnkpGa5bKhgcccRn6l12FWzvMik1_lv6Vh-FJqDSmd5-r/s72-c/Screen+Shot+2018-01-03+at+10.03.03+AM.png" height="72" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1207253639848690946.post-4104806835527013459</id><published>2017-08-02T00:18:00.000+08:00</published><updated>2017-08-02T00:18:06.102+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agile Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="API"/><category scheme="http://www.blogger.com/atom/ns#" term="APIM"/><category scheme="http://www.blogger.com/atom/ns#" term="APM"/><category scheme="http://www.blogger.com/atom/ns#" term="ESB"/><category scheme="http://www.blogger.com/atom/ns#" term="Fuse"/><category scheme="http://www.blogger.com/atom/ns#" term="JBoss Fuse. microservices"/><category scheme="http://www.blogger.com/atom/ns#" term="NoESB"/><title type='text'> Organizing microservices - Modern Integration</title><content type='html'>&lt;span id=&quot;docs-internal-guid-e0ef10fe-89fd-f55c-a662-fa3d6daffbc7&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-e0ef10fe-89fd-f55c-a662-fa3d6daffbc7&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Microservices is probably one of the most popular buzz among my fellow developer friends, and I do like the concept of being flexible, agile and having simply having more choices. But as a person that worked in the software integration space for years, I started to see some resemblance of the old ESB days. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span id=&quot;docs-internal-guid-e0ef10fe-89fd-f55c-a662-fa3d6daffbc7&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-e0ef10fe-89fd-f55c-a662-fa3d6daffbc7&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Looking at the problem from ten thousand feet up. A decade ago, we had to come up with a better way of organizing the spaghetti connection in between systems, stop duplicating effort on the same piece of business logic. That is when Service oriented architecture(SOA) became popular. By modularizing services, sharing them among others systems, and organize ways of communication, routing of data. And ESB is one implementation of that, maybe not necessary how it should be done.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span id=&quot;docs-internal-guid-e0ef10fe-89fd-f55c-a662-fa3d6daffbc7&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-e0ef10fe-89fd-f55c-a662-fa3d6daffbc7&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;img height=&quot;189&quot; src=&quot;https://lh4.googleusercontent.com/iLy8J5--BzZA8uCoP-oYddYILQ5iYI4XmsmfNUOHOhMaDWFv6c3cgpBE1yKPxqn2eoSzaNObGTXeClyGwCyUjNEWEc-e3PLYfko_vescnQMs8_aQJnhEqp7hxCCDbuQLU0MbmpGV&quot; style=&quot;-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);&quot; width=&quot;624&quot; /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span id=&quot;docs-internal-guid-e0ef10fe-89fd-f55c-a662-fa3d6daffbc7&quot;&gt;
&lt;/span&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-e0ef10fe-89fd-f55c-a662-fa3d6daffbc7&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;I was very fortunate to participate in many of these kind of integration projects, and lead some myself. We worked with various middleware vendors, at the time the solutions was all about ESB. By removing the complex interconnecting logic between systems into ESB, negotiating data model among teams (with application/services leaders), setup WSDL contracts for webservices and adding BPEL processes if needed between calls. And I had seem a fair share of amount of these ESB myself, outside of ESB the everything seems very organized. But lift up the ESB “box” you will find many of them end up with even worst tangled spaghetti code (or diagrams depends on your tooling). And that giant bundle of chaos, then become the bottleneck in delivering changes in enterprise. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span id=&quot;docs-internal-guid-e0ef10fe-89fd-f55c-a662-fa3d6daffbc7&quot;&gt;
&lt;/span&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: center;&quot;&gt;
&lt;span id=&quot;docs-internal-guid-e0ef10fe-89fd-f55c-a662-fa3d6daffbc7&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFsDw9kv9_TcucETnjXdjegDivFkWw0En5wAFtMyaLW4Fw_cy3Aa5O_IJ-HdfENA-UqGjTa206GQ6ms_a3GnUsnJl1rVhAsiBD54GyhZwTOLbmQaNiXSA98UywHRFW-lcz1nYq5qKG6sV9/s1600/esb.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;134&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFsDw9kv9_TcucETnjXdjegDivFkWw0En5wAFtMyaLW4Fw_cy3Aa5O_IJ-HdfENA-UqGjTa206GQ6ms_a3GnUsnJl1rVhAsiBD54GyhZwTOLbmQaNiXSA98UywHRFW-lcz1nYq5qKG6sV9/s320/esb.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span id=&quot;docs-internal-guid-e0ef10fe-89fd-f55c-a662-fa3d6daffbc7&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;(On the side note. This is when I started on the lightweight ESB idea, and how I was introduced with Camel, Karaf, servicemix because it solves my problem of being to independently bundle my integration code and breaking that ESB box into smaller distribution..and so on..)&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;When the idea of independently deployable microservices came along. This giant monolithic monster with idea of &lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;smart pipe&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; where it tries to do too much, like data model definition, process flow, interconnect protocols and data format transform ...etc &amp;nbsp;and &lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;dumb endpoint&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; where services just waits to be activated by events was soon cast aside by developers. The relation between each services &amp;nbsp;are still messy and the monolithic nature make the cycle of development long and cumbersome. The microservice allows developer to be more agile, who needs that piece of “Integration”. So this where the resemblance of a problem where I once trying to solve :) &lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;img height=&quot;194&quot; src=&quot;https://lh3.googleusercontent.com/cUSxRio5nBYmDSR7FlPxf4tksy3JKue-LIGOFK4NwWKsHu-35lcnXbGjg_pIPoRlHDd9QNbXEQdP4XgwztFq-kFuTGzGiiy_ZZmcGJGNfq0enFhGeC8BBCt8C5wT6ymc4s0Ge2Ws&quot; style=&quot;-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);&quot; width=&quot;316&quot; /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;And let alone we still need to interact with other services(systems/applications) outside microservices. So learning from past here are the things we know what NOT to do.. &lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;No more large monolithic bundles application to speed up the dev cycle. &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Stop doing complex business process inside system integration code&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Data model shouldn’t be defined in the integration layer, it only leads to extra negotiation between teams. &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;State should not be keeped in the integration layer to allow maximum scalability&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Create fix complex contracts between services. &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;And still there are things we liked about the old &quot;integration&quot; way. &lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Organized visualized interconnect view of systems.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Patterns that are already defined for integrating applications such as aggregations, separation, normalization of data. &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Event-based approach. A more reactive way and less coupled ways to integration systems. &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;And that is why I came up with the layered architecture for microservice. The main goal that I wanted to achieve in the new integration architecture in the modern integration/application development is flexibility. Not only in the scalable way but also allowing developer to make any architectural change with ease. &lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;So first thing first, in the new modern agile integration, the integration code itself should be sorted into different small services that make sense in the business world. And are decoupled and made them to be independently deployable microservices units. Then we can start apply true CI/CD to the integration code. This will avoid becoming a large monolithic ESB. &lt;/span&gt;&lt;img height=&quot;468&quot; src=&quot;https://lh6.googleusercontent.com/wZqqX4rjeK8odspg2lAKLs3w2Abd8LzJCG7iqTP_XbNTOYv_YKRda5nTVr7qD-3_4AmmKkUXU8-h2J6ZbAHVFyj0HkWJRR52jGW23UO4XOa2g8vzorjVMb-lfDuG_NZ5iQS2dtCM&quot; style=&quot;-webkit-transform: rotate(0.00rad); border: none; transform: rotate(0.00rad);&quot; width=&quot;624&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;In order to bring some logical sense to my microservice spaghetti, and avoiding repeating the mistake of taking on too much in one single integration bundle. I have defined four layers for my microservice, so each will have it’s own responsibility making it easier to adopt changes. &lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Gateway layer&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &amp;nbsp;Provides simple gateway routing capability such as versioning, dealing with different platform of devices.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTxycEhequX8nTe5zBPqHuZO9_xVE7SL2JBl40mW_XQzRGc1D41O8Xr-kCRpac73LYQDuKb3SUATK3tHxq9nHf7uZhbpYh-JJAWtG1P9sU8Q8LfKRmC15Wx2RtNjZdbARy3qPcvEDn4GIC/s1600/Reference+Architecture+-+Gateway+layer.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTxycEhequX8nTe5zBPqHuZO9_xVE7SL2JBl40mW_XQzRGc1D41O8Xr-kCRpac73LYQDuKb3SUATK3tHxq9nHf7uZhbpYh-JJAWtG1P9sU8Q8LfKRmC15Wx2RtNjZdbARy3qPcvEDn4GIC/s640/Reference+Architecture+-+Gateway+layer.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Originally I want to divide this layer into two, but decide not to because the gateway pattern has become so popular now, people has the perception of gateway should achieve certain ability. (That is a whole other story I want to talk some other time). That is why I have two separate form of the gateway in my diagram, one represents as green other blue. &lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;It’s all about the &lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;separation of concerns&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;. This layer is all about generating putting together what is needed for external API consumption. This is where and when separate application domains tries to integrate with each other. And route to the correct versions of services. And clearly the two major concerns were, &lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: disc; margin-left: 36pt; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Accessing policy rules, versioning of endpoints. (APIs)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: circle; margin-left: 36pt; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Sets traffic throttle applying limits and policies&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: circle; margin-left: 36pt; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Security of &amp;nbsp;APIs&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: circle; margin-left: 36pt; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Routing to correct versions &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: disc; margin-left: 36pt; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Combine, transform return result to client. &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: circle; margin-left: 36pt; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Citizen developer are the main creators here, they uses the capability provided by each microservice team to put together meaningful service to external clients.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: circle; margin-left: 36pt; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Collect, split, or normalized a canonical data format to external users.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: circle; margin-left: 36pt; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Translate data output depending on the clients&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: circle; margin-left: 36pt; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Routing between application domains&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Composite layer &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Important middle tier that handles composition of multiple microservices. They do more complex routing from processing the content data and aggregates/split data and populate the split/aggregated result to other microservices by triggering events or simply passing it. This layer hides the complexity of microservices away from clients. &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1ww6adaolmT_t6VPCaO8El9IFickRIUMG-JcZBgMCB5toDKHiDQ_M5Ea24R4viUi1mW2hfkn40IDYaauHRL4DJZA1UwSTbPnTx7XfmHz8Gf-6rEAHNvJjXGfvLVXRrEwJVL3wXw6B4kFI/s1600/Reference+Architecture+-+Composite+Layer.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;248&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1ww6adaolmT_t6VPCaO8El9IFickRIUMG-JcZBgMCB5toDKHiDQ_M5Ea24R4viUi1mW2hfkn40IDYaauHRL4DJZA1UwSTbPnTx7XfmHz8Gf-6rEAHNvJjXGfvLVXRrEwJVL3wXw6B4kFI/s640/Reference+Architecture+-+Composite+Layer.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;This layer is probably the layer that does most of the old time integration logic where it is responsible for &lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: disc; margin-left: 36pt; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Composing microservices&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: circle; margin-left: 36pt; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;By calling the API available from microservices, and transforming data as needed between them and routing data to the corresponding microservices based on it’s content. &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: disc; margin-left: 36pt; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Triggers events within domain&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: circle; margin-left: 36pt; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;I believe strongly that event base does best at decoupling stickiness between each service. And allowing performance at it’s best because of its asynchronous nature. The event bus here doesn’t necessary has to be a message broker, but any forms of Bus. &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: disc; margin-left: 36pt; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Enrich contents&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: circle; margin-left: 36pt; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;The content enrichment here should be specific to the format and avoid any business side enrichment when possible. &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: disc; margin-left: 36pt; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Applying Integration patterns&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: circle; margin-left: 36pt; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Old integration problem will not just go away in microservices world. By applying proven patterns, we can avoid making mistakes. &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: disc; margin-left: 36pt; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Caching &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: circle; margin-left: 36pt; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;The REST architecture specifically talks about a caching layer. It make sense for the composite layer to try apply caching mechanism because it’s non business related, but do make significant impact to the performance and fault tolerance ability of the system. &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;The composite services should also be included in the application domain, which I will talk about in the basic layer.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Base layer&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &amp;nbsp;&amp;nbsp;Like the name which is most likely represents the basic components of the system. Handles data retrieval or business logic processing. Each should be independent and self-contained. &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCbw_3KSR3VFXLLvCL6SxI_kBzPpnaRR_R6LAuEauZj7wq7YrlcUJdJMnH5782snrtUjeAX8Cu4X-WzaV6VosRVr5hP5DIXv-Pb0sMDuImoytxsqihmC9tbv13AAiMxQ9AK8uyRsqpd2gE/s1600/Reference+Architecture+-+Base+Layer.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;312&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCbw_3KSR3VFXLLvCL6SxI_kBzPpnaRR_R6LAuEauZj7wq7YrlcUJdJMnH5782snrtUjeAX8Cu4X-WzaV6VosRVr5hP5DIXv-Pb0sMDuImoytxsqihmC9tbv13AAiMxQ9AK8uyRsqpd2gE/s640/Reference+Architecture+-+Base+Layer.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Borrowing from the idea of &lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; font-style: italic; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Bounded Context&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;, &amp;nbsp;in this case logically organized group of microservices into what is called &lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; font-style: italic; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;application domain&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;. Where each domain represents separate entities of business functions that shares the same data model, this eliminates the need for doing too much transformation in the code. &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;&lt;br /&gt;&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Anti-corruption layer&lt;/span&gt;&lt;span style=&quot;font-size: 11pt; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-position: normal; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; - This layer handles interface to legacy application or anything that work against microservice quick and flexible principle. This layer is built in protection wall to your system, by doing the transforming job and translate between two very distinct implementations of the system. &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot;; font-size: 11pt; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Till next time! :) &lt;/span&gt;&lt;/div&gt;
&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/4104806835527013459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1207253639848690946/4104806835527013459' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/4104806835527013459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/4104806835527013459'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/2017/08/organizing-microservices-modern.html' title=' Organizing microservices - Modern Integration'/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh4.googleusercontent.com/iLy8J5--BzZA8uCoP-oYddYILQ5iYI4XmsmfNUOHOhMaDWFv6c3cgpBE1yKPxqn2eoSzaNObGTXeClyGwCyUjNEWEc-e3PLYfko_vescnQMs8_aQJnhEqp7hxCCDbuQLU0MbmpGV=s72-c" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1207253639848690946.post-7369058119512854811</id><published>2017-07-26T00:04:00.000+08:00</published><updated>2017-07-26T00:04:43.610+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="3scale"/><category scheme="http://www.blogger.com/atom/ns#" term="Agile Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="API"/><category scheme="http://www.blogger.com/atom/ns#" term="APM"/><category scheme="http://www.blogger.com/atom/ns#" term="ESB"/><category scheme="http://www.blogger.com/atom/ns#" term="Fuse"/><category scheme="http://www.blogger.com/atom/ns#" term="microservice"/><category scheme="http://www.blogger.com/atom/ns#" term="NoESB"/><title type='text'>Reference architecture of Agile Integration</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;OK. I said it. Integration is still around, but in different form from my last blog post. So what does modern integration looks like? Looking at how agile scrum has taken over traditional waterfall development framework, by enable shorter deliver cycles, faster feedback, and having the flexibility to rapidly adapt changes. I believe it’s time for traditional integration to be agile again. By breaking up traditional ESB into distributed microservices. &lt;/span&gt;&lt;/div&gt;
&lt;b id=&quot;docs-internal-guid-f10f2b3d-7a77-2b69-21cc-e9571ba48362&quot; style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;A little recap of what should be in Agile integration: &lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Distributed Integration &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: circle; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Lightweight, support distributed deployment&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: circle; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Pattern Based Integration&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: circle; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Reusable Connectors&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: circle; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Microservices&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Containers&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: circle; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Cloud native solutions&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: circle; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Lean artifacts, individually deployable&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: circle; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Container based scaling and high availability&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;API&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: circle; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Well defined, re-usable, and well managed end-points &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: circle; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Ecosystem leverage&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghD2MKs8wQsFjo_j84Zi2xH46w0tpbBYNMypzktacbHzx9i8J5ncWKPLGg64fR64HumKTlD_hed6hH9pVPsnhbU62DoYbtunM6kfk_J0J2VJgUcz_8Dl1avRCG-fNOS0temUDWwy92bVg0/s1600/playdough.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;190&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghD2MKs8wQsFjo_j84Zi2xH46w0tpbBYNMypzktacbHzx9i8J5ncWKPLGg64fR64HumKTlD_hed6hH9pVPsnhbU62DoYbtunM6kfk_J0J2VJgUcz_8Dl1avRCG-fNOS0temUDWwy92bVg0/s320/playdough.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Base on these three principle, I was asked to create a reference architecture for it. After giving some thoughts into it, drawing up numerous boxes and diagram, something clicked when I watched a 3 year old playing. And here, this is my answer…&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Yup. That is it! Reference architecture of Agile Integration. Architecture is often needed during the design phase of a software project, it provides a structure and backbone for the software project. Once it’s done, it’s done, any architectural modification will be difficult and can bring disastrous result. &amp;nbsp;We all knew “&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;one thing will never change in software development is Change”&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;. &amp;nbsp;Maybe it’s because regulation requirement, market demands or simply learning more about the business domain. So I started to think, can we build an architecture that is flexible for change, and can be shaped into the needs of a project as needed. So base on that concept, this is my reference architecture for Agile Integration, the modern integration application development that enables flexibility from many angles. &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijxdcHr6ewl_3YCaizVkZy-XKvxwvHFYKazx7NeA0hygZl2YH_L390DTtT5DWdKwFi30VgA9KHWWy5LXF0Il7RdBU6XhpVuMPGC2NHydPSgJQT3Ixxdo4bc-t6RBnhZLReIyyC1B6i-2pN/s1600/Reference+Architecture+-+Agile+Integration+Overall.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijxdcHr6ewl_3YCaizVkZy-XKvxwvHFYKazx7NeA0hygZl2YH_L390DTtT5DWdKwFi30VgA9KHWWy5LXF0Il7RdBU6XhpVuMPGC2NHydPSgJQT3Ixxdo4bc-t6RBnhZLReIyyC1B6i-2pN/s640/Reference+Architecture+-+Agile+Integration+Overall.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;There are the major components in my reference architecture diagram for Agile Integration: &lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;PaaS&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; - Provides a foundation for fast pace software development by allowing developer to self-service, as well as enable automated provision.It will also boost operational efficiencies by making the entire environment DevOps ready. &lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Security/Identity management(IAM) &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;- &amp;nbsp;Handles basic authentication and authorization for application interfaces and platforms.&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Automation&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; - Automates both the processes of building applications, and rolling deployments strategies for upgrades. Together with continuous integration tools, &amp;nbsp;it can achieve continuous delivery of the application softwares. &lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Logging and Tracing&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; - What was suppose to be easy in monolithic world, has now become one of the challenge in distributed microservice architecture for integration. As it has now become harder to have a unified view of how things are doing. It is important to have a way to see logging as a whole. And has tracing capability for different activities. &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Containerized packages&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; - Container technology allows us to build immutable portable lightweight application package, that is language agnostic. The configuration are independent from this builds allowing same package to deploy quickly in multiple environment.&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Container management&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; - In large scale system it is essential to have a convenient management platform to manage all the containers running the applications. Taking care of the monitoring, discovery, recovery and failover of the running containers. &lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Microservices &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;- Large applications/services are broken down into easy maintainable pieces and can be independently develop and deploy in distributed environment. Each of them should be built with failure in mind. Microservices &lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Load Balance/Service discovery/Network management&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &amp;nbsp;- Microservice are built for flexibility, according to current system load, the load should be automatically balance to the each running instance. All services should be registered and can be found in the system without complex setup. Ideally a proxy endpoint for external users to hide away the deployment complexity. &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Layered architecture&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; - &amp;nbsp;Logically organize microservice into a sets of layers, each has it’s own responsibility to avoid duplication of effort and make it easier to replace later on. Currently there are 4 layers &lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Gateway layer - provides simple gateway routing capability such as versioning, dealing with different platform of devices.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Composite layer - important middle tier that handles composition of multiple microservices. The do more complex routing from processing the content data itself and sometimes handle more complex data aggregation or normalization. &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Base layer - like the name which is most likely represents the basic components of the system. Handles data retrieval or business logic processing. &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Anti-corruption layer - This layer handles interface to legacy application or anything that work against microservice quick and flexible principle. This layer is built in protection wall to your system, by doing the transforming job and translate between two very distinct implementation of the system. &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Application domains&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; - This one is more like a pattern then architecture. But since we mention about layers in software I also wanted to touch a little bit on this. Because it’s all about reining the microservice into a more organized way. It’s a good practice to have each application domain defined (using same set of data model). And have other external integration microservice to wire between each domains. One other good thing about microservice is that you have the flexibility to move each small microservice to different domains as which it fits better with. &lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;API management&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; - Managing the APIs by reinforced access policy, collecting statistics around the usage of APIs. Also building a healthy eco-system among the developer and users of APIs. Further to allow direct revenue source from the APIs. &lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;There are certainly some limitation in today’s technology to allow a complete pliable architectural form. But I believe this model can bring flexibility into the system without significant impact to the system when changes occur. I will explain more details in my upcoming posts. &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/7369058119512854811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1207253639848690946/7369058119512854811' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/7369058119512854811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/7369058119512854811'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/2017/07/reference-architecture-of-agile.html' title='Reference architecture of Agile Integration'/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghD2MKs8wQsFjo_j84Zi2xH46w0tpbBYNMypzktacbHzx9i8J5ncWKPLGg64fR64HumKTlD_hed6hH9pVPsnhbU62DoYbtunM6kfk_J0J2VJgUcz_8Dl1avRCG-fNOS0temUDWwy92bVg0/s72-c/playdough.JPG" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1207253639848690946.post-8524900075800644527</id><published>2017-06-06T12:26:00.000+08:00</published><updated>2017-06-06T21:33:59.023+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="3scale"/><category scheme="http://www.blogger.com/atom/ns#" term="Agile Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="AMQ"/><category scheme="http://www.blogger.com/atom/ns#" term="Apache Camel"/><category scheme="http://www.blogger.com/atom/ns#" term="APIM"/><category scheme="http://www.blogger.com/atom/ns#" term="Fuse"/><title type='text'>The rise of Agile Integration, Integration is not DEAD nor LAME! </title><content type='html'>I wanted to blog about this for a very long time, but because of work and being too lazy to turn on my laptop on the weekends, now I finally have a couple of hours to sit down and start blogging.&lt;br /&gt;
&lt;br /&gt;
&quot;Integration is DEAD.&quot;&lt;br /&gt;
&quot;No, no, let&#39;s talk about microservice!!&quot;&lt;br /&gt;
&quot;What is that again? Integration, you mean SOA? It&#39;s lame... &quot;.&lt;br /&gt;
&lt;br /&gt;
These makes the majority of the percentage when I talk about Integration. In fact, if you happen to be in any the software conference, you see the rooms full when it&#39;s about &quot;container&quot; and &quot;microservice.&quot; I understand the nature of a developer, always seeking for the latest and greatest technology out there. BUT!! In my opinion, I don&#39;t think Integration is going AWAY if you containerize your application. Neither does it will DISAPPEAR in a microservice architecture. In fact, Integration just gets more complicated and tricky when you try to break an application into smaller pieces and have them running all over the place in the distributed environment!&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoEemVob4o-UmjB5qjQWzev7C8W_q-Zh4N6kCWNfyDXDrJiv4a5j9_ovfda8jBAD65Fouhj418JQNN4ebRTHXzkp-e-y-CSZDqoGk-cmTDhyphenhyphen4G2Nthf79cWEmbgdDryotjRpuq3kE1qDQQ/s1600/bulls.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;92&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoEemVob4o-UmjB5qjQWzev7C8W_q-Zh4N6kCWNfyDXDrJiv4a5j9_ovfda8jBAD65Fouhj418JQNN4ebRTHXzkp-e-y-CSZDqoGk-cmTDhyphenhyphen4G2Nthf79cWEmbgdDryotjRpuq3kE1qDQQ/s320/bulls.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;It was hard to deal with when we have to orchestrate, choreograph and compose all the coarse-grained services together, and imaging letting tinier, smaller and more refined services talks to each other. Yeah, trying to get an oversized heavy-weight strong bull to co-ordinate and communicate is one thing. I don&#39;t think to have to conduct thousands of small cute duckling, (I know, they are now smaller to handle one by one, light and easy to replace) is going be any easier. :-)&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjwmEftoKbccUHHfDFwfnE6W3j8CFoluarP3S6Y8PDcnQZl7jxhrurSOb9IkMDeeFzp-uUqb8t0eSp-qNMDlTs4NSubk8oEFZQnr1VjeamCpocgnl9bPgxN5qiTyEsXvmeflFY8tCgUOqk/s1600/ducklings.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;83&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjwmEftoKbccUHHfDFwfnE6W3j8CFoluarP3S6Y8PDcnQZl7jxhrurSOb9IkMDeeFzp-uUqb8t0eSp-qNMDlTs4NSubk8oEFZQnr1VjeamCpocgnl9bPgxN5qiTyEsXvmeflFY8tCgUOqk/s320/ducklings.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
Maybe the word Integration was abusively used by too many vendors (Us too ;-D ), &amp;nbsp;and it is too often associated with ESB, which IMHO should be one of the Integration strategies. ESB can be overly complicated with a wrapped around RPCs. &amp;nbsp; Integration is about connecting, composing between services, neglecting integration when implementing microservice architecture (MSA) is going to be disastrous. I am sure a lot of smart people out there designing the MSA has already taken this into account. But they probably did not realize that because Integration is already deeply ingrained into their minds, even in microservice we still want loose coupling. Again, in my opinion, the wall between application development and integration are getting thinner and thinner, by that I mean you do integration in microservice way and apply integration in your microservice. So, yes, integration needs to change, adapt and adjust accordingly but it never goes away:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Current deployment method&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;As now services are updated more frequent than ever before, we need to quickly respond to the change, in the integration layer. We can package it into the container and standardize the deployment method across the company.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Speed and automated delivery&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;A quicker respond to developer, continuous integration and delivery, faster time to markets can be achieved by adopting the DevOps trend. Integration should also be part of this cycle. Not OUTSIDE!&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Flexible for changes&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Making sure the message can be route to the correct service, allowing automatic discovery of services, with load balance capability that shares the load no matter it&#39;s synchronized or event base call. Providing and compose with flexible contracts like APIs between service can also minimize the impact on the changes.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;More robust towards failure&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;In the integration, it&#39;s all about the isolation of failure, and handles the errors, increase service resiliency. Also the ability for it to adopt version changes, and service lifecycle management is also one of the important factors in Integration.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div&gt;
Some concepts of doing integration in MSA comparing with monolithic application are poles apart. For example, continue from the bull and duckling theme. When you try to get a couple stubborn, massive bulls together and adjust position takes a lot of energy, and often you will need to be creative and smart to improve according to their position. Therefore the pipelines have to be smart and do many manipulations. Whereas the ducklings are easy to move around and cheap to replace. If one got sick, naughty or does not have the right color you need, simply toss it and get a newly hatched egg. (Alright, I don&#39;t mean any animal cruelty here, it&#39;s just a metaphor. ). The pipe that brings these microservice can be dumb or simple. Because each duckling is cheap to create.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiB5aWrLzdjiuEZv0pZnjkm9Btzjt291lr747eSiTvSrqIMfMobVXsVSOaXO_AquwvAmTJzioEjKRqMWf42KCL_C4KAvwNjU5nlPtBnY8gsv5i-LZHvTIrI1JAvYYniYvn49sEpLK3kpig/s1600/Screen+Shot+2017-06-05+at+11.57.45+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;906&quot; data-original-width=&quot;1600&quot; height=&quot;181&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiB5aWrLzdjiuEZv0pZnjkm9Btzjt291lr747eSiTvSrqIMfMobVXsVSOaXO_AquwvAmTJzioEjKRqMWf42KCL_C4KAvwNjU5nlPtBnY8gsv5i-LZHvTIrI1JAvYYniYvn49sEpLK3kpig/s320/Screen+Shot+2017-06-05+at+11.57.45+PM.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
In my eye, microservice should never go freely create on wherever and whenever it should be at least logically bound. I call this application domain. By circling these microservice, we will be able to see a much clear picture of inbound microservice integration and outbound microservice integration.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The inbound microservices integration will be a lot more flexible in protocols, data formats because of the possibility to connect to various datasources and SaaS application. Since they are bounded within the same application domain, it&#39;s likely the data models are shared between these microservices. They tend to be more coupled with each other (although service autonomy is where we are trying to get. They are probably handled by the same person.) There will be a couple of microservices responsible for composing some of the other microservices together too. The logic inside should be simple and straight forward. And each of the microservice should easily take care of the protocol and data extract itself.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
On the other hand, the outbound microservices integration should be strictly loosely coupled with inbound microservice. Preferably access commonly managed endpoints from each application domain, yes, I mean APIs. It is mostly device or client bound. As it often required to put together a more coarse-grain service like the old ESB days for the client application or from a process.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
Both inbound and outbound integration can be synchronous and asynchronous, all depends on the need of your system. So don&#39;t limit yourself to just one option. I strongly recommend the Enterprise Integration Pattern Book, as I said, the integration problem is still there. The patterns are extremely useful in this manner.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Agile Integration is Red Hat&#39;s opinionated way of doing the integration. And most importantly it&#39;s backed up by Fuse (Apache Camel) and OpenShift.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
It talks about 3 main pillars, which resonate my integration believes in MSA world.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Distributed Integration&amp;nbsp;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Lightweight, support distributed deployment&lt;/li&gt;
&lt;li&gt;Pattern Based Integration&lt;/li&gt;
&lt;li&gt;Reusable Connectors&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Containers&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Cloud native solutions&lt;/li&gt;
&lt;li&gt;Lean artifacts, individually deployable&lt;/li&gt;
&lt;li&gt;Container based scaling and high availability&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;API&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Well defined, re-usable, and well managed end-points&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Ecosystem leverage&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
So! I hope my murmur on this blog post will at least makes you think &quot;&lt;b&gt;Integration is NOT LAME&lt;/b&gt;&quot;. And start thinking about it when next time you create your next microservice.</content><link rel='replies' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/8524900075800644527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1207253639848690946/8524900075800644527' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/8524900075800644527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/8524900075800644527'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/2017/06/the-raise-of-agile-integration.html' title='The rise of Agile Integration, Integration is not DEAD nor LAME! '/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoEemVob4o-UmjB5qjQWzev7C8W_q-Zh4N6kCWNfyDXDrJiv4a5j9_ovfda8jBAD65Fouhj418JQNN4ebRTHXzkp-e-y-CSZDqoGk-cmTDhyphenhyphen4G2Nthf79cWEmbgdDryotjRpuq3kE1qDQQ/s72-c/bulls.png" height="72" width="72"/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1207253639848690946.post-954832874282294601</id><published>2017-01-12T01:07:00.000+08:00</published><updated>2017-01-12T01:15:03.841+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agile Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="Apache Camel"/><category scheme="http://www.blogger.com/atom/ns#" term="API"/><category scheme="http://www.blogger.com/atom/ns#" term="Fuse Integration Service"/><category scheme="http://www.blogger.com/atom/ns#" term="Fuse Integration Service 2.0"/><category scheme="http://www.blogger.com/atom/ns#" term="Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="JBoss Fuse"/><category scheme="http://www.blogger.com/atom/ns#" term="NoESB"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenShift"/><category scheme="http://www.blogger.com/atom/ns#" term="sa"/><title type='text'>Red Hat JBoss Fuse - Applying API Best Practices in Fuse</title><content type='html'>API plays a huge part in modern integration architecture design, a good design will allow your application to thrive, a bad design will end up on the cold stone bench and eventually vanishes :(....&lt;br /&gt;
Well, to avoid this tragic happens to our APIs, there are certain guidelines that we might want to consider to follow, I know there are lots of debates out there on the best practice of API design, and I don&#39;t think it will ever end. It is really depending on many different factors, mostly dominate by the size and complexity of the integration solution, and the company culture. And many of them are related to how to manage it instead of designing. (Of course there are many others like API security, how to do versioning and all these sorts of things. These are more closely related to API management, that I will not cover in this post. )&lt;br /&gt;
&lt;br /&gt;
This is what I think is a good API,&lt;br /&gt;
&lt;br /&gt;
1. &lt;b&gt;Intuitive&lt;/b&gt;- &amp;nbsp;It must be easy to understand and use &lt;i&gt;without documentations&lt;/i&gt;.&lt;br /&gt;
2. &lt;b&gt;Stable&lt;/b&gt;- &amp;nbsp;Not only it should be running but with &lt;i&gt;good performance&lt;/i&gt; too.&lt;br /&gt;
3. &lt;b&gt;Demands&lt;/b&gt; - &amp;nbsp;Creating &lt;i&gt;useful functionally&lt;/i&gt;, no matter how nicely your API is documented, how easy it is to use, it people don&#39;t need it, they won&#39;t call it.&lt;br /&gt;
&lt;br /&gt;
The second one, is mostly depend on how robust your code is, the DEVOPS process, how the IT infrastructure is built and so on. And third one is a much harder question to answer, so I am going to skip these two first and focus on ONE,&amp;nbsp;&lt;b&gt;Intuitive&lt;/b&gt;. Here are just couple of best practices of that I think that can make APIs more intuitive&amp;nbsp;, and how it&#39;s done in Camel. (RESTFul API for strictly speaking, the technology the most people use is the standard.)&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Simply but concrete naming for the URI.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Common rules, use nouns instead of verbs, that describe the content the API is providing, such as customer, account and product etc. &amp;nbsp;In Camel the place to define it is in the REST DSL, it allows developer to define REST services in it&#39;s application. Define the name of the API in the URI and have several layers of API description.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s3&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;s1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;uri&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color: red;&quot;&gt;customer&lt;/span&gt;/{customerid}&quot;&lt;span class=&quot;s1&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;s1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;uri&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;=&lt;/span&gt;&quot;direct:getCustomerinfo&quot;&lt;span class=&quot;s1&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;uri&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color: red;&quot;&gt;product&lt;/span&gt;/{id}&quot;&lt;span class=&quot;s1&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;s1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;uri&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;=&lt;/span&gt;&quot;direct:productInventory&quot;&lt;span class=&quot;s1&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;uri&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color: red;&quot;&gt;account/profile/&lt;/span&gt;{acctid}&quot;&lt;span class=&quot;s1&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;uri&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;=&lt;/span&gt;&quot;direct:getprofile&quot;&lt;span class=&quot;s1&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;From the architectural stand point, one of the good thing about Camel and Fuse/Fuse Integration Service. You naturally create these independent chunks of service, that either connects to a datasource (or multiple if you want, but that does not quite fit in the sprits of doing microservices.) and then becomes a microservice. Or you can use it to create a service that compose/orchestrate APIs for the consumer.&amp;nbsp;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgakR-Vvf-fV0mxQfb9j-nf3rc9bRF79VvJGMJVPOvF20BgIYaO7c8ZV5oMuVmthWd7jyCQpnkKgRzSmVmBKD4eW22WUs_CNmySYcUTn-_aqciaELdvlAD_qYq5uE8nkmHP4Y9LT1epnnDb/s1600/API01.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgakR-Vvf-fV0mxQfb9j-nf3rc9bRF79VvJGMJVPOvF20BgIYaO7c8ZV5oMuVmthWd7jyCQpnkKgRzSmVmBKD4eW22WUs_CNmySYcUTn-_aqciaELdvlAD_qYq5uE8nkmHP4Y9LT1epnnDb/s400/API01.png&quot; width=&quot;382&quot; /&gt;&lt;/a&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Use HTTP Method for CRUD if possible&amp;nbsp;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Instead of creating four different names with the verbs that we normally do in webservice back in the days, take advantages of the HTTP method, that is ready there and the HTTP header actually maps to different operations that you need to do, In Camel DSL, it is very simple to define it,&amp;nbsp;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;READ -&amp;gt; GET&lt;/li&gt;
&lt;li&gt;CREATE -&amp;gt; PUT&lt;/li&gt;
&lt;li&gt;UPDATE -&amp;gt; POST&lt;/li&gt;
&lt;li&gt;DELETE -&amp;gt; DELETE&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;lt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;s2&quot;&gt;rest&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;=&lt;/span&gt;&quot;/account&quot;&lt;span class=&quot;s1&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;s2&quot; style=&quot;color: red;&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;uri&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;=&lt;/span&gt;&quot;profile/{acctid}&quot;&lt;span class=&quot;s1&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;uri&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;=&lt;/span&gt;&quot;direct:getprofile&quot;&lt;span class=&quot;s1&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;s2&quot; style=&quot;color: red;&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;s2&quot; style=&quot;color: red;&quot;&gt;put&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;uri&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;=&lt;/span&gt;&quot;profile/{acctid}&quot;&lt;span class=&quot;s1&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;uri&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;=&lt;/span&gt;&quot;direct:createprofile&quot;&lt;span class=&quot;s1&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;s2&quot; style=&quot;color: red;&quot;&gt;put&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;s2&quot; style=&quot;color: red;&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;uri&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;=&lt;/span&gt;&quot;transfer/{acctid}/&quot;&lt;span class=&quot;s1&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;uri&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;=&lt;/span&gt;&quot;direct:dotransfer&quot;&lt;span class=&quot;s1&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;s2&quot; style=&quot;color: red;&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;s1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;s2&quot; style=&quot;color: red;&quot;&gt;delete&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;uri&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #3933ff;&quot;&gt;&quot;profile/{acctid}&quot;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;uri&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;=&lt;/span&gt;&quot;direct:deleteprofile&quot;&lt;span class=&quot;s1&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;delete&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;rest&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;Not only it eliminates the whole team to agree upon naming of the actions, and since it&#39;s globally recognized standard, consumers will find it easier to understand. &amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;/ul&gt;
&lt;li&gt;Make the most out of HTTP Errors,&amp;nbsp;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Wrapping your own error is good, but think about this, when a consumer gets response from the API, what is the first content it get? The HTTP response header, instead of processing the entire payload (not restricting to error, there are several successful status code too). &amp;nbsp;&lt;/li&gt;
&lt;li&gt;Here are the list of &lt;a href=&quot;https://en.wikipedia.org/wiki/List_of_HTTP_status_codes&quot;&gt;http status codes&lt;/a&gt;, there are a couple of then that are commonly used in RESTApi, For instance,  here are some of the common one used in RESTFul API&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;background: white; border-collapse: collapse; border: none; mso-border-alt: solid #D9D9D9 .75pt; mso-yfti-tbllook: 1184;&quot;&gt;&lt;thead&gt;
&lt;tr&gt;&lt;td style=&quot;padding: 2.4pt 4.8pt;&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;HTTP Code&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;padding: 2.4pt 4.8pt;&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;HTTP Methods&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;padding: 2.4pt 4.8pt;&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;Description (From Wiki page)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;200&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;GET,&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;DELETE&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #252525; font-family: &amp;quot;helvetica&amp;quot;; font-size: 10.5pt;&quot;&gt;Standard response for successful HTTP requests. The actual response will depend on the request method used.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;201 Created&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;PUT,&amp;nbsp;&lt;/span&gt;POST&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #252525; font-family: &amp;quot;helvetica&amp;quot;; font-size: 10.5pt;&quot;&gt;The request has been fulfilled, resulting in the creation of a new resource&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;times&amp;quot;; font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;202 Accepted&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;POST,&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;PUT,&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;DELETE&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #252525; font-family: &amp;quot;helvetica&amp;quot;; font-size: 10.5pt;&quot;&gt;The request has been accepted for processing, but the processing has not been completed.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;400 Bad Request&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;GET,&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;POST,&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;PUT,&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;DELETE&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #252525; font-family: &amp;quot;helvetica&amp;quot;; font-size: 10.5pt;&quot;&gt;The server cannot or will not process the request due to an apparent client error&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;401 Unauthorized&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;GET,&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;POST,&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;PUT,&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;DELETE&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #252525; font-family: &amp;quot;helvetica&amp;quot;; font-size: 10.5pt;&quot;&gt;Similar to&amp;nbsp;&lt;i&gt;403 Forbidden&lt;/i&gt;, but specifically for use when authentication is required and has failed or has not yet been provided.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;times&amp;quot;; font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;403 Forbidden&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;GET,&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;POST,&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;PUT,&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;DELETE&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #252525; font-family: &amp;quot;helvetica&amp;quot;; font-size: 10.5pt;&quot;&gt;The request was a valid request, but the server is refusing to respond to it.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;404 Not Found&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;GET,&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;POST,&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;PUT,&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;DELETE&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #252525; font-family: &amp;quot;helvetica&amp;quot;; font-size: 10.5pt;&quot;&gt;The requested resource could not be found.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;408 Request Timeout&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;GET,&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;POST,&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;PUT,&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;DELETE&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #252525; font-family: &amp;quot;helvetica&amp;quot;; font-size: 10.5pt;&quot;&gt;The server timed out waiting for the request.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;times&amp;quot;; font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;409 Conflict&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;PUT&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;PUT&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;DELETE&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #252525; font-family: &amp;quot;helvetica&amp;quot;; font-size: 10.5pt;&quot;&gt;Indicates that the request could not be processed because of conflict in the request&lt;/span&gt;&lt;span style=&quot;color: #252525; font-family: &amp;quot;helvetica&amp;quot;; font-size: 10.5pt;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;times&amp;quot;; font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;500 Server Error&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;GET,&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;POST,&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;PUT,&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;DELETE&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #252525; font-family: &amp;quot;helvetica&amp;quot;; font-size: 10.5pt;&quot;&gt;A generic error message, given when an unexpected condition was encountered and no more specific message is suitable.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;times&amp;quot;; font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #252525; font-family: &amp;quot;helvetica&amp;quot;; font-size: 10.5pt;&quot;&gt;503 Service Unavailable&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;times&amp;quot;; font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;GET,&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;POST,&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;PUT,&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;arial&amp;quot;; font-size: 10pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;courier&amp;quot;; font-size: 10pt;&quot;&gt;DELETE&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border: none; padding: 2.4pt 4.8pt;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;color: #252525; font-family: &amp;quot;helvetica&amp;quot;; font-size: 10.5pt;&quot;&gt;The server is currently unavailable (because it is overloaded or down for maintenance). Generally, this is a temporary state.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;ul&gt;&lt;ul&gt;
&lt;li&gt;In Camel, you can&amp;nbsp;set the value in header to return the HTTP status code&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;                &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;lt;setHeader headerName=&quot;&lt;span style=&quot;color: red;&quot;&gt;&lt;i&gt;camelhttpresponsecode&lt;/i&gt;&lt;/span&gt;&quot;&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;constant&amp;gt;400&amp;lt;/constant &amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/setHeader&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;!--EndFragment--&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Setting the right granularity of data and use common data format, &lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;I don&#39;t believe in ONE SIZE FITS ALL data model when it comes to providing information to various consumer, the amount of information can be shown in a mobile device screen, an smart watch or a desktop computer is definitely different.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Camel has capability for you to automatically transform the data from POJO into the format that you wanted by specifying the output, or you can simple so marshaling with various data format Camel supported or do a little extra processing with the Data Mapper transform component.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;The binding mode:&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span class=&quot;s1&quot; style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span class=&quot;s2&quot; style=&quot;font-size: x-small;&quot;&gt;restConfiguration&lt;/span&gt;&lt;b style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span class=&quot;s3&quot; style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;bindingMode&lt;/span&gt;&lt;span class=&quot;s3&quot; style=&quot;font-size: x-small;&quot;&gt;=&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;s4&quot; style=&quot;font-size: x-small;&quot;&gt;&lt;b&gt;&quot;json&quot;&lt;/b&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;table-wrap&quot;&gt;
&lt;table class=&quot;confluenceTable&quot; style=&quot;border-collapse: collapse; color: black; font-family: verdana, arial, helvetica, sans-serif; font-size: 10px; margin: 5px;&quot;&gt;&lt;tbody&gt;
&lt;tr style=&quot;line-height: normal;&quot;&gt;&lt;th class=&quot;confluenceTh&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;background-color: #f0f0f0; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; padding: 3px 4px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: x-small;&quot;&gt;Binding Mode&lt;/span&gt;&lt;/th&gt;&lt;th class=&quot;confluenceTh&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;background-color: #f0f0f0; border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; padding: 3px 4px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: x-small;&quot;&gt;Description&lt;/span&gt;&lt;/th&gt;&lt;/tr&gt;
&lt;tr style=&quot;line-height: normal;&quot;&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; line-height: normal; padding: 3px 4px;&quot;&gt;&lt;div style=&quot;margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: x-small;&quot;&gt;off&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; line-height: normal; padding: 3px 4px;&quot;&gt;&lt;div style=&quot;margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: x-small;&quot;&gt;Binding is turned off. This is the default option.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style=&quot;line-height: normal;&quot;&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; line-height: normal; padding: 3px 4px;&quot;&gt;&lt;div style=&quot;margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: x-small;&quot;&gt;auto&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; line-height: normal; padding: 3px 4px;&quot;&gt;&lt;div style=&quot;margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: x-small;&quot;&gt;Binding is enabled and Camel is relaxed and support json, xml or both if the needed data formats are included in the classpath. Notice that if for example&amp;nbsp;&lt;code&gt;camel-jaxb&lt;/code&gt;&amp;nbsp;is not on the classpath, then XML binding is not enabled.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style=&quot;line-height: normal;&quot;&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; line-height: normal; padding: 3px 4px;&quot;&gt;&lt;div style=&quot;margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: x-small;&quot;&gt;json&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; line-height: normal; padding: 3px 4px;&quot;&gt;&lt;div style=&quot;margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: x-small;&quot;&gt;Binding to/from json is enabled, and requires a json capabile data format on the classpath. By default Camel will use&amp;nbsp;&lt;code&gt;json-jackson&lt;/code&gt;&amp;nbsp;as the data format. See the INFO box below for more details.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style=&quot;line-height: normal;&quot;&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; line-height: normal; padding: 3px 4px;&quot;&gt;&lt;div style=&quot;margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: x-small;&quot;&gt;xml&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; line-height: normal; padding: 3px 4px;&quot;&gt;&lt;div style=&quot;margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: x-small;&quot;&gt;Binding to/from xml is enabled, and requires&amp;nbsp;&lt;code&gt;camel-jaxb&lt;/code&gt;&amp;nbsp;on the classpath.&amp;nbsp;See the INFO box below for more details.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style=&quot;line-height: normal;&quot;&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; line-height: normal; padding: 3px 4px;&quot;&gt;&lt;div style=&quot;margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: x-small;&quot;&gt;json_xml&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td class=&quot;confluenceTd&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot; style=&quot;border-color: rgb(204, 204, 204); border-style: solid; border-width: 1px; line-height: normal; padding: 3px 4px;&quot;&gt;&lt;div style=&quot;margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: x-small;&quot;&gt;Biding to/from json and xml is enabled and requires both data formats to be on the classpath.&amp;nbsp;See the INFO box below for more details.&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;s4&quot; style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class=&quot;s4&quot; style=&quot;font-size: xx-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;s4&quot; style=&quot;font-size: xx-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Or DataFormat Marshaling (Don&#39;t forget to add the dependency of the converting libraries)&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;s4&quot; style=&quot;font-size: xx-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s1&quot; style=&quot;font-family: &amp;quot;menlo&amp;quot;; font-size: 11px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s2&quot; style=&quot;font-family: &amp;quot;menlo&amp;quot;; font-size: 11px;&quot;&gt;&amp;lt;marshal &lt;/span&gt;&lt;span class=&quot;s3&quot; style=&quot;font-family: &amp;quot;menlo&amp;quot;; font-size: 11px;&quot;&gt;ref&lt;/span&gt;&lt;span class=&quot;s2&quot; style=&quot;font-family: &amp;quot;menlo&amp;quot;; font-size: 11px;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s4&quot; style=&quot;color: #d12f1b; font-family: &amp;quot;menlo&amp;quot;; font-size: 11px;&quot;&gt;&quot;transform-json&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot; style=&quot;font-family: &amp;quot;menlo&amp;quot;; font-size: 11px;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;style type=&quot;text/css&quot;&gt;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d12f1b}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #ba2da2}
span.s1 {font-variant-ligatures: no-common-ligatures; color: #000000}
span.s2 {font-variant-ligatures: no-common-ligatures; color: #ba2da2}
span.s3 {font-variant-ligatures: no-common-ligatures; color: #957e35}
span.s4 {font-variant-ligatures: no-common-ligatures}
&lt;/style&gt;



&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;lt;json &lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;library&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;&quot;Jackson&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;span class=&quot;s1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;&amp;lt;/marshal&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;s4&quot; style=&quot;font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;s4&quot; style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s4&quot; style=&quot;font-size: xx-small;&quot;&gt; Or&amp;nbsp;&lt;/span&gt;Data Mapper transform (Dozer)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://wei-meilin.blogspot.tw/2015/03/jboss-fuse-fuse-workshop-101-part-two.html&quot;&gt;See my previous posts&lt;/a&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Automatic generated documentation.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;One of the nice handy little tricks when doing API in Camel with REST DSL, you can simply integrate it with Camel swagger java components. It will expose the API in swagger format.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;In Camel, don&#39;t forget to first to add the dependency in your maven pom, &amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; color: black; float: none !important; font-family: monospace !important; font-size: 11px; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: 1312px;&quot;&gt;&lt;tbody style=&quot;background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;&quot;&gt;
&lt;tr style=&quot;background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: 1312px;&quot;&gt;&lt;div class=&quot;container&quot; style=&quot;background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: relative !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;&quot;&gt;
&lt;div class=&quot;line number1 index0 alt2&quot; style=&quot;background: none rgb(240, 240, 240) !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;&quot;&gt;
&lt;code class=&quot;java plain&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;&quot;&gt;      &amp;lt;dependency&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot; style=&quot;background: none rgb(240, 240, 240) !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;&quot;&gt;
&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;      &lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;&quot;&gt;&amp;lt;groupId&amp;gt;org.apache.camel&amp;lt;/groupId&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot; style=&quot;background: none rgb(240, 240, 240) !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;&quot;&gt;
&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;      &lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;&quot;&gt;&amp;lt;artifactId&amp;gt;camel-swagger-java&amp;lt;/artifactId&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot; style=&quot;background: none rgb(240, 240, 240) !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;&quot;&gt;
&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;      &lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;&quot;&gt;&amp;lt;version&amp;gt;x.x.x&amp;lt;/version&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot; style=&quot;background: none rgb(240, 240, 240) !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;&quot;&gt;
&lt;code class=&quot;java spaces&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;      &lt;/code&gt;&lt;code class=&quot;java plain&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;&quot;&gt;&amp;lt;!-- use the same version as your Camel core version --&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot; style=&quot;background: none rgb(240, 240, 240) !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;&quot;&gt;
&lt;code class=&quot;java plain&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;&quot;&gt;      &amp;lt;/dependency&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot; style=&quot;background: none rgb(240, 240, 240) !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;&quot;&gt;
&lt;code class=&quot;java plain&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; font-size: 1em !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;&quot;&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot; style=&quot;background: none rgb(240, 240, 240) !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0em !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; white-space: pre !important; width: auto !important;&quot;&gt;
&lt;code class=&quot;java plain&quot; style=&quot;background: none !important; border-radius: 0px !important; border: 0px !important; bottom: auto !important; box-sizing: content-box !important; float: none !important; height: auto !important; left: auto !important; line-height: 1.1em !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: small;&quot;&gt;     &lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;times&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: small;&quot;&gt;And inside the Camel context, when setting up the rest configuration, simply add the API related configuration into it. &lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;restConfiguration&lt;/span&gt;&lt;b&gt;&lt;span class=&quot;s3&quot;&gt; &lt;/span&gt;apiContextPath&lt;span class=&quot;s3&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;&quot;api-docs&quot;&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;s3&quot;&gt; &lt;/span&gt;bindingMode&lt;span class=&quot;s3&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;&quot;json&quot;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;component&lt;span class=&quot;s3&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;&quot;servlet&quot;&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt; &lt;/span&gt;contextPath&lt;span class=&quot;s3&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s4&quot;&gt;&quot;/demos&quot;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p2&quot;&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;s1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;apiProperty&lt;/span&gt; &lt;span class=&quot;s5&quot;&gt;key&lt;/span&gt;=&lt;span class=&quot;s4&quot;&gt;&quot;cors&quot;&lt;/span&gt; &lt;span class=&quot;s5&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;s4&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;apiProperty&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s5&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;=&lt;/span&gt;&quot;api.title&quot;&lt;span class=&quot;s3&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s5&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;=&lt;/span&gt;&quot;Healthcare demo clinical API&quot;&lt;span class=&quot;s1&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;p3&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;apiProperty&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s5&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;=&lt;/span&gt;&quot;api.version&quot;&lt;span class=&quot;s3&quot;&gt; &lt;/span&gt;&lt;span class=&quot;s5&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;=&lt;/span&gt;&quot;1.0.0&quot;&lt;span class=&quot;s1&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span class=&quot;s1&quot; style=&quot;font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;restConfiguration&lt;/span&gt;&lt;span class=&quot;s1&quot; style=&quot;font-size: x-small;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
In summary this is the diagram that maps to Camel and best practices,&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRVl5EIlv8CnGD3ImO7U5ditDo5Doq_I4m2vqjXPj7gOThVyCH7iIwpC7RSYqTj-5Lajr9M07uBp2HkTr1CccgjGkQu5CpduS1exanOAms4eln9kIboHtnN4khiX_pi6J1vENz_EjVy3_V/s1600/API02.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;484&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRVl5EIlv8CnGD3ImO7U5ditDo5Doq_I4m2vqjXPj7gOThVyCH7iIwpC7RSYqTj-5Lajr9M07uBp2HkTr1CccgjGkQu5CpduS1exanOAms4eln9kIboHtnN4khiX_pi6J1vENz_EjVy3_V/s640/API02.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Thanks!</content><link rel='replies' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/954832874282294601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1207253639848690946/954832874282294601' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/954832874282294601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/954832874282294601'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/2017/01/red-hat-jboss-fuse-applying-api-best.html' title='Red Hat JBoss Fuse - Applying API Best Practices in Fuse'/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgakR-Vvf-fV0mxQfb9j-nf3rc9bRF79VvJGMJVPOvF20BgIYaO7c8ZV5oMuVmthWd7jyCQpnkKgRzSmVmBKD4eW22WUs_CNmySYcUTn-_aqciaELdvlAD_qYq5uE8nkmHP4Y9LT1epnnDb/s72-c/API01.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1207253639848690946.post-2487824771324183711</id><published>2017-01-05T06:15:00.003+08:00</published><updated>2017-01-13T23:54:08.218+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agile Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="API"/><category scheme="http://www.blogger.com/atom/ns#" term="Fuse Integration Service"/><category scheme="http://www.blogger.com/atom/ns#" term="Fuse Integration Service 2.0"/><category scheme="http://www.blogger.com/atom/ns#" term="Getting Started"/><category scheme="http://www.blogger.com/atom/ns#" term="Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="NoESB"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Service"/><title type='text'>Red Hat JBoss Fuse - Getting Started with Fuse Integration Service 2.0 Tech preview</title><content type='html'>I just realized that I did not do a getting started for Fuse Integration Service 2.0 Tech preview before I did the pipeline demo, thanks for those of you who reminded me! :)&lt;br /&gt;
&lt;br /&gt;
To get started with FIS 2.0, for people who has just getting to know the technology, here is how I interpret&amp;nbsp;it. Basically, it&#39;s divide into two aspect,&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1. Integration development&lt;/b&gt;, FIS uses Apache Camel as the core technology that creates, orchestrate, compose microservices into a super lightweight thin integration layer, and become the API provider and service orchestrator through exposing RESTful or messaging service endpoints. And you can choose to either package and run it with Spring-Boot or Karaf.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCdnJuqbL0LhyphenhyphenUBJpaOEqbYdFyuP9jS6CCKlx_BSmNBeDFmygUzWIVrxJtS5SbixSEhDFaFJrr1Esf5gqDXkX8B5VeAUmoXujI7Y1lTueCIsDu9uZQcdyH5a0galJT1tolOJm9qjZj4CJy/s1600/Screen+Shot+2017-01-13+at+10.47.01+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;346&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCdnJuqbL0LhyphenhyphenUBJpaOEqbYdFyuP9jS6CCKlx_BSmNBeDFmygUzWIVrxJtS5SbixSEhDFaFJrr1Esf5gqDXkX8B5VeAUmoXujI7Y1lTueCIsDu9uZQcdyH5a0galJT1tolOJm9qjZj4CJy/s640/Screen+Shot+2017-01-13+at+10.47.01+AM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;b&gt;2. Application Deployment and Management&lt;/b&gt;, FIS takes advantages of OpenShift platform, and allows you to separately deploy the micro-integration service among distributed environment, at the same time takes care of the failover, high availability, load balancing and service lookup problem for you.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEils0yab5d3PTYZmy6KALZHXO-l499J73vEe3Eq36Vyd1mRvt_3Xh6sR58ikuAHN24uhAahMMbOVb9sX8BYxtry3pxLWbRQ-_LnuTEfVMPRnj_5wB0B78vPZS4m7bNakmcZnIodmQpdlCfQ/s1600/Screen+Shot+2017-01-13+at+10.53.18+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEils0yab5d3PTYZmy6KALZHXO-l499J73vEe3Eq36Vyd1mRvt_3Xh6sR58ikuAHN24uhAahMMbOVb9sX8BYxtry3pxLWbRQ-_LnuTEfVMPRnj_5wB0B78vPZS4m7bNakmcZnIodmQpdlCfQ/s640/Screen+Shot+2017-01-13+at+10.53.18+AM.png&quot; width=&quot;620&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
So, now we know what is in FIS 2.0, it&#39;s time to take a closer look at how it is done, as a developer, you first have to decide to go with Karaf (OSGi) or Spring-Boot framework, I personally prefer the Spring-Boot, because it&#39;s matches more to the microservice concept of a lighter deployment package. But it is up to you, the developer, after all you are the god and creator of your application. After the framework is chosen, developer will start developing the micro-integration services, composing between microservices or even use it to create a microservice. (With two frameworks, the development experience of the route itself is basically the same, by configuring camel components. )&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyh2-RotpxPAileOhvoyP5PpXueN4pwLZ5YurFrU38sAW2NTWgPoCk4xOa6rakGBmMzQqpbEgT-vUWzr36yIx1kwcA2lXw3ijbz72UKB9CWSqjySaO30ZitMFCvpO1oJ4oQ1m9VKK66Prq/s1600/Screen+Shot+2017-01-04+at+4.40.48+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;459&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyh2-RotpxPAileOhvoyP5PpXueN4pwLZ5YurFrU38sAW2NTWgPoCk4xOa6rakGBmMzQqpbEgT-vUWzr36yIx1kwcA2lXw3ijbz72UKB9CWSqjySaO30ZitMFCvpO1oJ4oQ1m9VKK66Prq/s640/Screen+Shot+2017-01-04+at+4.40.48+PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Once the developer is ready to deploy the integration service, we can then decide how to deploy it onto the OpenShift platform. In FIS 2.0 there are two options, Binary S2i will build the entire application locally, and push it onto OpenShift, so OpenShift platform will use it to create and build the container image that it will run on, and for Source S2i, everything is build on top of OpenShift, so developer need to set the location of the source code in order for OpenShift to retrieve it to build the application and the container image. &lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2ezzZj6pu0co_g_yZe9ll0w7iAeF1DRx_Jaa0qKefZIwsq6XmCoGUqLL3OAWEphioUpLoscyFq-KccTXybSwfa9JrMQuf-HbJ_swRtct_-MKehyphenhyphenUIdLOV_KE6XsKaVtglp5UPON9GsAr6/s1600/Screen+Shot+2017-01-04+at+5.07.20+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;384&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2ezzZj6pu0co_g_yZe9ll0w7iAeF1DRx_Jaa0qKefZIwsq6XmCoGUqLL3OAWEphioUpLoscyFq-KccTXybSwfa9JrMQuf-HbJ_swRtct_-MKehyphenhyphenUIdLOV_KE6XsKaVtglp5UPON9GsAr6/s640/Screen+Shot+2017-01-04+at+5.07.20+PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
And that is all. It is actually much much more powerful, it&#39;s hard to describe it in one go, dive into it, and you will soon find how fascinating the technology is, and how it can help you to resolve your current problems.&lt;br /&gt;
&lt;br /&gt;
Here is a quick video that shows you how to get your first FIS 2.0 running.&lt;br /&gt;
The steps are as follows,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;Install and start up OpenShift on your local machine&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;Install FIS image stream definition into OpenShift (raw.githubusercontent.com/jboss-fuse/application-templates/application-templates-2.0.redhat-000026/fis-image-streams.json)&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;In JBoss developer studio, create a Camel Spring-boot using the new archetype in FIS 2.0&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;(Archetype catalog url: https://maven.repository.redhat.com/earlyaccess/all/io/fabric8/archetypes/archetypes-catalog/2.2.180.redhat-000004/archetypes-catalog-2.2.180.redhat-000004-archetype-catalog.xml)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;Deploy to OpenShift using the Binary S2i tool (maven plugin)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;400&quot; mozallowfullscreen=&quot;&quot; src=&quot;https://player.vimeo.com/video/193962070&quot; webkitallowfullscreen=&quot;&quot; width=&quot;640&quot;&gt;&lt;/iframe&gt;

</content><link rel='replies' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/2487824771324183711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1207253639848690946/2487824771324183711' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/2487824771324183711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/2487824771324183711'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/2017/01/red-hat-jboss-fuse-getting-started-with.html' title='Red Hat JBoss Fuse - Getting Started with Fuse Integration Service 2.0 Tech preview'/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCdnJuqbL0LhyphenhyphenUBJpaOEqbYdFyuP9jS6CCKlx_BSmNBeDFmygUzWIVrxJtS5SbixSEhDFaFJrr1Esf5gqDXkX8B5VeAUmoXujI7Y1lTueCIsDu9uZQcdyH5a0galJT1tolOJm9qjZj4CJy/s72-c/Screen+Shot+2017-01-13+at+10.47.01+AM.png" height="72" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1207253639848690946.post-8877543440558811629</id><published>2016-12-23T02:58:00.001+08:00</published><updated>2016-12-24T09:51:11.524+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Automation"/><category scheme="http://www.blogger.com/atom/ns#" term="CI/CD"/><category scheme="http://www.blogger.com/atom/ns#" term="DEVOPS"/><category scheme="http://www.blogger.com/atom/ns#" term="Fuse"/><category scheme="http://www.blogger.com/atom/ns#" term="Fuse Integration Service"/><category scheme="http://www.blogger.com/atom/ns#" term="Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="JBoss Fuse"/><title type='text'>Red Hat JBoss Fuse - Automate integration CI/CD processes</title><content type='html'>Long time no see :) , for many of you who knows me, I&#39;ve been through a major change in life, moving to another country for couple of years, that is why there are less updates in my blog. But, I am back! Getting back to business. Fuse Integration Service 2.0 Tech preview was out two weeks ago, since this version is base on OpenShift 3.3, which has pipeline capability prebuilt on top of it (Tech preview on OpenShift as well). This get it one step closer to a more automated and agile continuous integration, and deployment one-stop platform for us, the integration developer.&lt;br /&gt;
&lt;br /&gt;
For the pipeline to work on OpenShift, you will need Jenkins installed and running. OpenShift uses it to build, process and handle all the workflows. If you are familiar with developing in openshift, to build the pipeline is pretty simple and straight-forward. The pipeline is defined as a build configuration in OpenShift, just create a build config then import it to the namespace you want it to be in. And that is it.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinba2buYQMoJhamiQvdRNh442Ht_EG-ITKH2mFb4gJH7g92S28_OyzPjZq2SjpmMu8s1Uhjcp-j_VL9JxG_ZIFOFrmyMaxx5mdq2o9C0H61j6n29OaCpPP3Cb-Ec6KHsnLBqS1vUN5FIms/s1600/pipeline01.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;283&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinba2buYQMoJhamiQvdRNh442Ht_EG-ITKH2mFb4gJH7g92S28_OyzPjZq2SjpmMu8s1Uhjcp-j_VL9JxG_ZIFOFrmyMaxx5mdq2o9C0H61j6n29OaCpPP3Cb-Ec6KHsnLBqS1vUN5FIms/s320/pipeline01.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
This is what the build config looks like, note the strategy type is called JenkinsPipeline, this will trigger the interaction with Jenkins, and pushes the defined Jenkinsfile onto the server itself. The Jenkins Server will then interact with openshift and start the automated CI/CD process.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;kind: &lt;b&gt;BuildConfig&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;apiVersion: v1&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;metadata:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; name: &lt;i&gt;pipelinename&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; labels:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; name: &lt;i&gt;pipelinename&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;spec:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; triggers:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; - type: GitHub&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; github:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; secret: secret101&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; - type: Generic&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; generic:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; secret: secret101&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; strategy:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; type: &lt;b&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;JenkinsPipeline&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; jenkinsPipelineStrategy:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;jenkinsfile&lt;/b&gt;: &quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; node(&#39;maven&#39;) {&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; stage(&#39;build&#39;) {&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &#39;build&#39;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; openshiftBuild(buildConfig: &#39;&lt;i&gt;buildconfigname&lt;/i&gt;&#39;, showBuildLogs: &#39;true&#39;)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; stage(&#39;staging&#39;) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print &#39;stage&#39;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; openshiftDeploy(deploymentConfig: &#39;&lt;i&gt;deploymentconfigame&lt;/i&gt;&#39;) &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&quot;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
As you can see on the above Jenkinsfile in the build configuration, it&#39;s interacting with the openshift itself through the OpenShift and Jenkins plugin. For instance, you could trigger to build an image, deploy the application through calling the deployment config, tag an image or even scale up and down the number of containers. &lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdAajzEIftlyIAtDPTvllz1ghcxJx-JIW4pdsq0Jpnjapy4mua0hne70ihD41sVY4ttkd_4UVYfvudI3lCpyPy7nRkwt64mtg-Hq5of6nGDvJDJiELJQerQc-25fRz5ZJQ5rStXeb6mfu0/s1600/pipeline02.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;395&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdAajzEIftlyIAtDPTvllz1ghcxJx-JIW4pdsq0Jpnjapy4mua0hne70ihD41sVY4ttkd_4UVYfvudI3lCpyPy7nRkwt64mtg-Hq5of6nGDvJDJiELJQerQc-25fRz5ZJQ5rStXeb6mfu0/s400/pipeline02.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
This upper part of the blog is pretty generic to most of the application running on OpenShift, but, HEY, Fuse Integration Service is just another application running on top of it. But this application just simply contains PATTERN BASE integration technology that has 160+ built-in components in it, so we smart developer don&#39;t have to waste time and energy on repetitive stuff, no big deal. :)&lt;br /&gt;
No matter what version you are using, this pipeline capability can help you automate your integration microservice.&lt;br /&gt;
&lt;br /&gt;
Here is a small demo video that takes you through the entire process.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;400&quot; mozallowfullscreen=&quot;&quot; src=&quot;https://player.vimeo.com/video/196763352&quot; webkitallowfullscreen=&quot;&quot; width=&quot;640&quot;&gt;&lt;/iframe&gt;

&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/8877543440558811629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1207253639848690946/8877543440558811629' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/8877543440558811629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/8877543440558811629'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/2016/12/red-hat-jboss-fuse-automate-integration.html' title='Red Hat JBoss Fuse - Automate integration CI/CD processes'/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinba2buYQMoJhamiQvdRNh442Ht_EG-ITKH2mFb4gJH7g92S28_OyzPjZq2SjpmMu8s1Uhjcp-j_VL9JxG_ZIFOFrmyMaxx5mdq2o9C0H61j6n29OaCpPP3Cb-Ec6KHsnLBqS1vUN5FIms/s72-c/pipeline01.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1207253639848690946.post-1405294209309099597</id><published>2016-10-06T23:00:00.000+08:00</published><updated>2016-10-06T23:00:21.484+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ESB"/><category scheme="http://www.blogger.com/atom/ns#" term="Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="JBoss Fuse"/><category scheme="http://www.blogger.com/atom/ns#" term="SOA"/><category scheme="http://www.blogger.com/atom/ns#" term="Tools"/><title type='text'>Red Hat JBoss Fuse/A-MQ - Fuse and A-MQ Version 6.3 GA is released! </title><content type='html'>Fuse and A-MQ 6.3 GA has just went out. Maybe, you would think this is just only a minor version release why should I care? Hold your thoughts on that! Because they have done a lot of improvements and also added many new features into this release.&lt;br /&gt;
&lt;br /&gt;
Besides various bug fixes and making sure Fuse Fabric is much more stable. There are two major change in this version update:&lt;br /&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;New Tooling in JBoss Developer Studio (JBDS) 9.1 GA.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Newer Apache Camel version – Camel v2.17.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
I was really impressed by the work put in to make developing Camel application much simpler. First is the installation of tooling itself. Now it has a all-in-one installer so you don&#39;t need to worry about which plugins you need to check. See the videos below to see the new &quot;Getting Started&quot; of Fuse 6.3.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;133&quot; mozallowfullscreen=&quot;&quot; src=&quot;https://player.vimeo.com/video/183851396&quot; webkitallowfullscreen=&quot;&quot; width=&quot;212&quot;&gt;&lt;/iframe&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;133&quot; mozallowfullscreen=&quot;&quot; src=&quot;https://player.vimeo.com/video/183852576&quot; webkitallowfullscreen=&quot;&quot; width=&quot;212&quot;&gt;&lt;/iframe&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;133&quot; mozallowfullscreen=&quot;&quot; src=&quot;https://player.vimeo.com/video/183852576&quot; webkitallowfullscreen=&quot;&quot; width=&quot;212&quot;&gt;&lt;/iframe&gt;
&lt;br /&gt;
&lt;br /&gt;
And If you notice from the above video, the presentation of camel route in JBDS has also updated. It fixed some of the miss representation of logic and making it easier to read.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;Old Camel Route&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrtb9sBiMa03vHJF9C4OH-tmUeyHxv9xOJJnC1RiZe7ylxQWB02K1X7_MYiyQBFkkgA1mMdOHCyCwFIosfM8V0eglk2kr6lnuwQSnumJ-p9BlwnBNZrJz6N4ayYE1jT8mIBZEaOtK-sV9Z/s1600/Screen+Shot+2016-09-27+at+%25E4%25B8%258B%25E5%258D%25883.17.23.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;233&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrtb9sBiMa03vHJF9C4OH-tmUeyHxv9xOJJnC1RiZe7ylxQWB02K1X7_MYiyQBFkkgA1mMdOHCyCwFIosfM8V0eglk2kr6lnuwQSnumJ-p9BlwnBNZrJz6N4ayYE1jT8mIBZEaOtK-sV9Z/s400/Screen+Shot+2016-09-27+at+%25E4%25B8%258B%25E5%258D%25883.17.23.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;b style=&quot;text-align: start;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;b style=&quot;text-align: start;&quot;&gt;New Camel Route&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7VFopwiHXycApegDvsZvJHDkn-R7c13WFM7DQ2fh2S8rnHsFZJXQdf5byc_5pU4lD_NcusEBvZ_CrQUPzoP_4eVdMj-VtfsKVMnDlOMA9WuzQTvLAqRrit676QqLG5FgZMTf2VfS4xYkg/s1600/Screen+Shot+2016-09-27+at+%25E4%25B8%258B%25E5%258D%25883.17.16.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;289&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7VFopwiHXycApegDvsZvJHDkn-R7c13WFM7DQ2fh2S8rnHsFZJXQdf5byc_5pU4lD_NcusEBvZ_CrQUPzoP_4eVdMj-VtfsKVMnDlOMA9WuzQTvLAqRrit676QqLG5FgZMTf2VfS4xYkg/s400/Screen+Shot+2016-09-27+at+%25E4%25B8%258B%25E5%258D%25883.17.16.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
On the right hand side, there are more components added to the component palette.&lt;br /&gt;
&lt;br /&gt;
In this new GA version, it has supported couple of new connectors,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;ServiceNow&amp;nbsp;&lt;/b&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;ServiceNow offers everything-as-a-service cloud computing, Camel provides access to all of ServiceNow REST API. You can manage and automate your IT service with Fuse.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;Kafka&lt;/b&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Apache Kafka is publish-subscribe&amp;nbsp;distributed&amp;nbsp;messaging broker, a very popular messaging alternative, with Fuse&#39;s new component can now listen and put data into Kafka.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;Spark&lt;/b&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Apache Spark&amp;nbsp;is an cluster computing framework, provides programmers with a centered application programming interface.And a read-only multiset of data items distributed over a cluster of machines, and maintained in a fault-tolerant way. To integrate with&amp;nbsp;Spark, Fuse provide a bridge between Camel connectors and Spark tasks, and&amp;nbsp;dynamically choose a task to execute.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;Paho&lt;/b&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Eclipse Paho project provides open-source client implementations of MQTT messaging protocols, this connector integrate to this client using the Eclipse Paho library.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;Slack&lt;/b&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Slack is a cloud-based team collaboration tool, it&#39;s has IRC-like features, persistent chat rooms (channels) organized by topic, private groups and direct messaging. The connector allows you to connect to an instance of Slack and delivers a message contained in the message body via a pre established Slack incoming webhook.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;Kubernetes&lt;/b&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Kubernetes is implemented as container cluster manager, provides mechanisms for deploying, maintaining, and scaling applications on Docker. This connector allow you to interact with&amp;nbsp;Kubernetes operation, and use it to manage and integrate with your containers.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;PDF Documents&lt;/b&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;This components provides the ability to create, modify or extract content from PDF documents. This component uses Apache PDFBox as underlying library to work with PDF documents.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;
Also with mentioning is the addition of swagger-java&amp;nbsp;module, with the REST DSL in Camel, we will now be able to build a complete, flexible API-Based application with Camel being the API connector base technology. Using swagger-java&amp;nbsp;module to automatic generate the documentation.&lt;br /&gt;
&lt;br /&gt;
Take a look and play with the new &lt;a href=&quot;https://developers.redhat.com/products/fuse/overview/&quot;&gt;Fuse 6.3&lt;/a&gt;!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/1405294209309099597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1207253639848690946/1405294209309099597' title='44 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/1405294209309099597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/1405294209309099597'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/2016/10/red-hat-jboss-fusea-mq-fuse-and-mq.html' title='Red Hat JBoss Fuse/A-MQ - Fuse and A-MQ Version 6.3 GA is released! '/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrtb9sBiMa03vHJF9C4OH-tmUeyHxv9xOJJnC1RiZe7ylxQWB02K1X7_MYiyQBFkkgA1mMdOHCyCwFIosfM8V0eglk2kr6lnuwQSnumJ-p9BlwnBNZrJz6N4ayYE1jT8mIBZEaOtK-sV9Z/s72-c/Screen+Shot+2016-09-27+at+%25E4%25B8%258B%25E5%258D%25883.17.23.png" height="72" width="72"/><thr:total>44</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1207253639848690946.post-5475827084637044275</id><published>2016-07-15T21:41:00.001+08:00</published><updated>2016-07-15T21:43:55.958+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="A-MQ"/><category scheme="http://www.blogger.com/atom/ns#" term="A-MQ 7"/><category scheme="http://www.blogger.com/atom/ns#" term="JBoss Messaging"/><category scheme="http://www.blogger.com/atom/ns#" term="Messaging"/><category scheme="http://www.blogger.com/atom/ns#" term="Queue"/><title type='text'>Red Hat JBoss A-MQ - A-MQ 7 alpha is ready! </title><content type='html'>I am sure this is the moment we have all been waiting for a long time, JBoss A-MQ 7 is finally out and is currently in Alpha. A-MQ is a fast and flexible messaging platform that reliably delivers information and easily integrates the various components in your application environments.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiu4FyHBs6ZBcE6AlbeTknKxq0JwXG8araZKuxgNj9gYd4MCIWIONXj7rmCu01RxopLS9Xz-iwNa0q0tSWTqzz7U_48vE6j8UswXv-8Y77Php29yZHcnLW0Oiv86e55sdAW8oOTjbbRhjtT/s1600/Screen+Shot+2016-07-15+at+%25E4%25B8%258B%25E5%258D%25889.40.14.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;212&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiu4FyHBs6ZBcE6AlbeTknKxq0JwXG8araZKuxgNj9gYd4MCIWIONXj7rmCu01RxopLS9Xz-iwNa0q0tSWTqzz7U_48vE6j8UswXv-8Y77Php29yZHcnLW0Oiv86e55sdAW8oOTjbbRhjtT/s320/Screen+Shot+2016-07-15+at+%25E4%25B8%258B%25E5%258D%25889.40.14.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;A-MQ 7 consists of several new components and features, it is base on Project Apache ActiveMQ Artemis. The code base was donated by HornetQ. Having high performance journal base on NIO implementation, allows A-MQ 7 to become a fast , high performance and reliable messaging platform. &amp;nbsp;Rather than relying other persistence storage it is very highly optimized for general message use cases. The message broker as always allows you to balance load across a cluster of brokers, the balancing of the message not only distributed the incoming message to brokers sequentially but also takes into the account of the number of consumers and selectors in the broker so the performance can achieved even distribution of the load.&lt;br /&gt;
&lt;br /&gt;
The support for&amp;nbsp;Cross-language and Multi-protocol in A-MQ 7&amp;nbsp;allows many more native connectivity from applications written in&amp;nbsp;Java (JMS), C++, Python, JavaScript/Node.js, .NET.&amp;nbsp;Multiple transport protocols for exchanging data with AMQP 1.0, MQTT, STOMP, OpenWire, HornetQ Core.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7Y2iKlh079s9KLI1lKMEzL3GmIkW7TmWwFgBtKvb8c9tpZGTPxIjRNKUGDTKMAhjbelChsgojC563w4cIPDWcN0AnOZKZl1p7dsxLH4APWISEV3TVJik1M_7pU9QkTTohUJzGF2hwW06v/s1600/Management.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;223&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7Y2iKlh079s9KLI1lKMEzL3GmIkW7TmWwFgBtKvb8c9tpZGTPxIjRNKUGDTKMAhjbelChsgojC563w4cIPDWcN0AnOZKZl1p7dsxLH4APWISEV3TVJik1M_7pU9QkTTohUJzGF2hwW06v/s400/Management.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;One of the bigger innovation of A-MQ 7 is the introduction of Interconnects, Interconnect is a message router you can use to build large-scale messaging networks. A-MQ Interconnect uses the AMQP protocol to create a redundant application-level messaging network. It works as an interconnect layer between messaging clients and their brokers. And why do we need it? The beauty of the interconnect allows you to solve the good old problems when we only have multiple brokers, there could be too many clients trying to connect to to a single point of brokers, one broker could have too many queues create, one of a broker handling too much throughput comparing with the others, have interconnect is to add another routing layer before your broker, it is flexible nature allows messages to flow through it and evenly spread the load. It automatically find the fasting routing path so the message will arrive efficiently. And since it&#39;s base on AMQP protocols, you can set your own selector on it base on your messaging routing logic.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF6Y2COMba8ODaFW-a7jkR5t9U7wRZC8n9nSA95i57EvGUbIjiYZttmZSWYU5T9yR_6XZfv2EQ3y_r0AX5EYMdGzvOeCQRdn85uusNdjVG8mLlsWPkieZ3LJfelLsLLk0h7sOuQ5i_rU2_/s1600/amq7.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;181&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF6Y2COMba8ODaFW-a7jkR5t9U7wRZC8n9nSA95i57EvGUbIjiYZttmZSWYU5T9yR_6XZfv2EQ3y_r0AX5EYMdGzvOeCQRdn85uusNdjVG8mLlsWPkieZ3LJfelLsLLk0h7sOuQ5i_rU2_/s320/amq7.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
And as always, we still have Hawtio as the management tooling, where you can see the details of how the brokers are doing now.&lt;br /&gt;
&lt;br /&gt;
For those of you who uses the old version of A-MQ or HornetQ, A-MQ 7 support both A-MQ 6.x and HornetQ clients for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To get your hands on the latest Alpha version of JBoss A-MQ 7, please go to &lt;a href=&quot;http://developers.redhat.com/products/amq/download/&quot;&gt;http://developers.redhat.com/products/amq/download/&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://wei-meilin.blogspot.com/feeds/5475827084637044275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/1207253639848690946/5475827084637044275' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/5475827084637044275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1207253639848690946/posts/default/5475827084637044275'/><link rel='alternate' type='text/html' href='http://wei-meilin.blogspot.com/2016/07/red-hat-jboss-fuse-mq-7-alpha-is-ready.html' title='Red Hat JBoss A-MQ - A-MQ 7 alpha is ready! '/><author><name>CHRISTINA の J老闆</name><uri>http://www.blogger.com/profile/12533913518030459869</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiu4FyHBs6ZBcE6AlbeTknKxq0JwXG8araZKuxgNj9gYd4MCIWIONXj7rmCu01RxopLS9Xz-iwNa0q0tSWTqzz7U_48vE6j8UswXv-8Y77Php29yZHcnLW0Oiv86e55sdAW8oOTjbbRhjtT/s72-c/Screen+Shot+2016-07-15+at+%25E4%25B8%258B%25E5%258D%25889.40.14.png" height="72" width="72"/><thr:total>7</thr:total></entry></feed>