title: Is Apache Camel irrelevant when Spring Cloud is used?
body: <p>I am involved in the design of a service that uses Spring Cloud and Apache Camel. I was taken aback today when a colleague asked (maybe advocating would be a better term) whether we really need Apache Camel. From his perspective, most of the downstream systems we talk to are REST-based and therefore, no integration framework should be needed. If my recollection is correct, he also implied that Microservices and Integration Frameworks are incompatible.</p>
  
  <p>I started passionately suggesting that Spring Cloud helps solve a deployment/ops issue while Integration frameworks solve integration issues and that they have orthogonal requirements.</p>
  
  <p>Here are some of the protocols the system will be using to communicate:</p>
  
  <pre><code>REST
  SOAP
  AMQP
  Azure SDK
  AWS SDK (S3, SimpleBD, etc.)
  Dropbox SDK
  Paypal SDK
  Braintree SDK
  Caching (Memcached, EhCache)
  Async (VM, Direct-VM, SEDA, SEDA-VM)
  Facebook
  Twitter
  FTP
  SMTP
  File IO
  SOLR/Elesticsearch
  Quartz
  </code></pre>
  
  <p>Unknown protocols: as we integrate in customers environment we need to integrate with their systems. The communication protocols are yet unknown.</p>
  
  <p>The following statement by Martin Fowler and James Lewis seems to suggest that ESB and Microservices are incompatible: "We can't resist mentioning Jim Webber's statement that ESB stands for "Egregious Spaghetti Box". Now, how far do you think this statement applies to an integration framework such as Apache Camel?</p>
  
  <p>And more generally, does my colleague have a point? Does this mean that integration patterns have no place in microservices?</p>