SlideShare a Scribd company logo
1 of 56
Download to read offline
The Future of Messaging:
  RabbitMQ and AMQP
            Eberhard Wolff
Architecture and Technology Manager
        adesso AG, Germany
Overview
•    Why Messaging, AMQP and RabbitMQ
•    Basic AMQP
•    Exchanges
•    More on Spring-AMQP
RPC
•  Predominant approach
  –  RMI, SOAP Web Services, CORBA,
     HttpInvoker, Burlap, Hessian
•  Calls remote methods with parameter
•  …and waits for response
RPC
•  Problems:
  –  Explicitly tells the server what to do i.e.
     tight coupling
  –  What about network failures?
  –  What about long latencies?
Why Messaging?
•  Decoupling
  –  Data, no action i.e. receiver
                                     Component
     can react arbitrarily
  –  Asynchronous i.e. decoupled
     by time
•  Reliable
  –  Message can be stored-and-
                                     Component
     forwarded
                                                 Messages
  –  Redelivery until message
     processed
•  Solves typical problems of
   distributed systems
Why Messaging?
•  But: Requires different architecture
•  Very different from calling remote
   methods
•  Asynchronous
•  AJAX has the same model

•  See for example “Patterns of Enterprise
   Integration”
Why AMQP?
•  Open standard protocol
•  Standard wire protocol
•  i.e. just one client library – no matter which
   implementation you are using
•  Less vendor lock in
•  Efficient
 –  Binary wire protocol
•  Support in all major languages
•  Supported on most OS platforms
What about JMS?
•  JMS has been the default for Java
   messaging system for 10+ years
•  But:
  –  Only standardized on the API level
  –  Less flexible than AMQP
•  Mapping AMQP/JMS is being defined
Why Rabbit?
•    Because it has a kewl name
•    Numerous protocols supported
•    Most popular choice on EC2
•    Foundation for demanding systems e.g.
     NASA’s cloud initiative Nebula
•    Implemented in Erlang
•    Clustering built in
•    Currently in 2.6.1
•    Supports AMQP 0.8, 0.9, 0.9.1
•    1.0 as a prototype Plug In
Broad Support in RabbitMQ
Broad Support in the JVM
           Space
•  Grails Plug In
•  Java Client
•  Scala / Lift support

•  We will discuss Spring support in detail
•  Spring AMQP project 1.0.0
•  http://www.springsource.org/spring-
   amqp
Why Erlang?
•  Originally designed for telephone
   switches by Ericsson
•  Much easier to develop scalable and fault
   tolerant systems
   (by factors)
•  See Motorola presentation:
   http://www.slideshare.net/Arbow/
   comparing-cpp-and-erlang-for-motorola-
   telecoms-software
•  Good tool for reliable and scalable
   systems
Erlang‘s Model
                      Monitor
Link to monitor,
restart



  Light               Light                 Light
  weight    Messages weight     Messages    weight
 process             process               process
   with                with                  with
   state               state                 state
Why Erlang?
•  Let it crash
  –  If a process fails, it can be easily restarted
  –  Different approach to fault tolerance
  –  Otherwise lots of error handling
•  Message Passing in the Core
  –  RabbitMQ is a messaging system…
•  Light-weight process model
  –  Scalabiliy
Very Basic AMQP
•  Queues: Store messages
•  Queues might be
  –  Durable: Survive server restarts
  –  Exclusive: For one connection
  –  autoDelete: Deleted if connection closes
•  Queue usually created by consumer
•  All resources are dynamic
•  Producer sends a message to a Queue
Code
ConnectionFactory conFactory =	
   new CachingConnectionFactory ("localhost");	
RabbitAdmin admin = new RabbitAdmin(conFactory);	
admin.declareQueue(

  new Queue("myQueue", false, true, true));	
	
	
RabbitTemplate template = 	
  new RabbitTemplate(conFactory);	
template.convertAndSend("myQueue", "Hi AMQP!");	
String receive =	
  (String) template.receiveAndConvert("myQueue");	
Assert.assertEquals("Hi AMQP!", receive);
Spring’s RabbitTemplate
•  Send & receive message
•  AmqpTemplate:
   Generic AMQP interface
•  RabbitOperations: Rabbit specific
   interface: (adds just a callback)
•  RabbitTemplate: Implementation
•  Spring might provide support for other
   AMQP implementations later
Spring’s MessageConverter
•  Messages are binary data
•  RabbitTemplate uses
   MessageConverter
   to convert between objects and
   messages
•  Can also send binary data if preferred
Spring’s MessageConverter
•  Default: SimpleMessageConverter
  –  byte[] directly transferred
  –  String converted with configurable encoding
  –  Serializable are serialized
  –  Content type set accordingly
•  JsonMessageConverter converts from / to
   JSON using Jackson
•  MarshallingMessageConverter converts from /
   to XML using Spring's OXM mapping
•  SerializerMessageConverter uses Spring’s
   Serializer abstraction
Spring‘s AdminTemplate
•  Main purpose: Configure the AMQP
   infrastructure
•  E.g. create queues

•  AmpqAdmin: Generic AMQP interface
•  RabbitAdmin: Rabbit specific
Basics of AMQP
•  Sending messages directly to queues is
   not enough
•  What about e.g. pub / sub?

•  Exchange: Route messages (stateless)
•  Messages are byte-streams
•  Example used the default exchange

•  More dynamic, flexible and cleaner than
   JMS
AMQP	
  in	
  a	
  nutshell	
  
Exchange routes message
Stateless
Usually created by producer
No queue: Message discarded
           X

               Binding binds an
               Exchange to a Queue    Queues buffer
                                      messages
                                      Usually created by
                                      consumer
AMQP	
  in	
  a	
  nutshell	
  
Producer and Consumer might be written in Java, C#,
Python, Ruby …

                                                      C
        P          X

                                                      C


        AMQP             RabbitMQ               AMQP
        protocol                                protocol
Exchange: Route Messages                  X




•  The type of Exchange defined the
   routing algorithm used
•  Binding provides selector for routing
•  Exchange is addressed by name

•  Some standard types
•  Can provide additional ones
Fanout Exchange            X




•  Broadcast to all bound queues
•  Fast
•  Simple

•  amq.fanout is mandatory

•  To broadcast information
Fanout Exchange       X




                      C
P     X

                      C
    Fanout
                      C
Queue fanoutQueue = new Queue("fanoutQueue");	
admin.declareQueue(fanoutQueue);	
	
FanoutExchange fanoutExchange=	
  new FanoutExchange("myFanout");	
admin.declareExchange(fanoutExchange);	
	
admin.declareBinding(	
  BindingBuilder.bind(fanoutQueue).	
                 to(fanoutExchange));	
	
template.setExchange("myFanout");	
template.convertAndSend("Hi Fanout!");	
	
String receive = (String)	
   template.receiveAndConvert("fanoutQueue");	
Assert.assertEquals("Hi Fanout!", receive);
Direct Exchange                   X


•  Routing based on one routing key
•  amq.direct and the default Exchange (no
   name) always exist

•  To send work orders to a specific worker
Direct Exchange

normal
express
          Direct
          Exchange                 C
                     express
   P         X

                                   C
                 normal
                                   C
Queue directQueue = new Queue("direct");	
admin.declareQueue(directQueue);	
	
admin.declareBinding(BindingBuilder	
   .bind(directQueue)	
   .to(new DirectExchange("amq.direct"))	
   .with("helloKey"));	
template.setExchange("amq.direct");	
	
template.convertAndSend("amq.direct","dropMe",	
  "I will be dropped!");	
template.convertAndSend("amq.direct","helloKey",	
  "Hi Direct!");	
Assert.assertEquals("Hi Direct!",	
  template.receiveAndConvert("direct"));	
Assert.assertNull(	
  template.receiveAndConvert("direct"));
Topic Exchange                X


•  Routing based on routing pattern
•  amq.topic is mandatory

•  E.g. for public / subscribe scenarios
Topic Exchange	
  

 order.DE
invoice.USD
         Topic
         Exchange
                    order.*
    P      X                         C


               invoice.*
                                     C
Headers Exchange                    X


•  Routing based on one or more headers and
   an expression
•  amqp.match is mandatory

•  Complex routing roles
Other Features
•  Message can be persistent
•  Request / response using correlations
   possible

•  Redelivery / acknowledgement possible

•  Clustering with e.g. Linux HA possible
•  ...or send message through multiple
   channels and drop duplicates
More about
RabbitMQ and Spring
Configuring Rabbit Resources
         with Spring
•  Spring enables decoupling of your
   application code from the underlying
   infrastructure

•  The container provides the resources

•  The application is simply coded against
   the API
Configuring a
             ConnectionFactory
  Create an object
with the given name
      and class
<bean id="connectionFactory"      Call setUsername()
                                   with the given value
       class="org.sfw.amqp.rabbit.connection.CachingConnectionFactory">
  <property name="username" value="guest"/>
  <property name="password" value="guest"/>
   <constructor-arg value="localhost" />
</bean>
       Parameter for the
          constructor

•  Can easily modify configuration options
Using a ConnectionFactory
        from Cloud Foundry
<cloud:rabbit-connection-factory	
  id="rabbitConnectionFactory" />



ConnectionFactory connectionFactory =	
 new RabbitServiceCreator(new CloudEnvironment())	
  .createSingletonService().service;	



•  Will be provided by Cloud Foundry
Defining a RabbitTemplate
                    Bean
 •  Provide a reference to the ConnectionFactory
 •  Optionally provide other references
     –  MessageConverter
     –  Routing key and exchange to be used if none is
        specified
<bean id="rabbitTemplate"
      class="org.springframework.amqp.rabbit.core.RabbitTemplate">
  <constructor-arg ref="connectionFactory" />
  <property name="routingKey" value=”invoice.USD" />
</bean>
The MessageListener
•  So far: Calling receive() on
   RabbitTemplate
•  Needed: Something that is called when
   a new message appears
•  The API defines this interface for
   asynchronous reception of messages
        public interface MessageListener {
          public void onMessage(Message) {
            // handle the message
          }
        }
Spring’s MessageListener
           Container
•  Spring provides lightweight containers
   to call MessageListeners
•  SimpleMessageListenerContainer
•  Advanced scheduling and endpoint
   management options available
•  i.e. thread pools, concurrent consumers,
   transaction handling
Defining a Message Listener
                Container
<bean class="org.sfw.amqp.rabbit.listener.SimpleMessageListenerContainer">
 <property name="connectionFactory" ref="connectionFactory" />
 <property name="queueNames" value="my.amqp.queue" />
 <property name="messageListener" ref="messageListener" />
</bean>

•  Every time a new message appears on
   my.amqp.queue the messageListener is
   called
Spring's message-driven
                    objects
•  MessageListener means the receiver
   depends on Spring API
•  Why not just a POJO?
•  MessageListenerAdapter takes a POJO and
   makes it a MessageListener
•  i.e. calls consume on Bean consumer
<bean id="messageListenerAdapter"
        class="org.sfw.amqp.rabbit.listener.adapter.MessageListenerAdapter">
  <property name="delegate" ref="consumer" />
  <property name="defaultListenerMethod" value="consume" />
  <property name="messageConverter" ref="jsonMessageConverter" />
</bean>
Easier Using Namespaces
<rabbit:listener-container
 connection-factory="connectionFactory“
 message-converter="jsonMessageConverter">
    <rabbit:listener ref="consumer" method="consume"
                     queue-names="my.amqp.queue2" />
</rabbit:listener-container>


•  Results in the same Spring Beans
@Component	  Consumer code
public class Consumer {	
	
  public String consume(String message) {	
     return …;	
  }	
}

•  No dependency on AMQP!
•  But: What about the result of the method?
•  Send to the Reply-To address given in
   message properties with same correlationId
   as original method
Client Code
String response = (String) 	
  rabbitTemplate.convertSendAndReceive(	
    "my.fanout", "", "test");

•  Message sent to destination with routing key
•  Reply-To set to exclusive, autodelete, non-
   durable queue
•  Response received through Reply-To
   converted and returned
•  Easy request-response!
•  Beware of potential latency
Create Environment using
              Namespaces
   •  ...if you don‘t like API calls
<rabbit:fanout-exchange name="my.fanout2">
 <rabbit:bindings>
   <rabbit:binding queue="my.amqp.queue2" />
 </rabbit:bindings>
</rabbit:fanout-exchange>
<rabbit:queue name="my.amqp.queue2" />

<rabbit:admin connection-factory="rabbitConnectionFactory" />
A SHORT GLIMPSE ON
AMQP 1.0
EVERYTHING YOU KNOW IS
WRONG
New Elements
•  Links: unidirectional transport between
   source and target
  –  Flow control
  –  Settling transfers for different semantics (at
     most once etc)
•  Processing nodes have distribution
   modes
  –  Copy: Copy message to each link
  –  Move: Move it to just one link
AMQP: Point to Point
                             Incoming
                             Link        Receiver



                     Node
Sender              mode :               Receiver
         Outgoing    move     Incoming
         Link                 Link

                    Broker
AMQP: Publish / Subscribe
                             Incoming
                             Link        Receiver



                     Node
Sender              mode :               Receiver
         Outgoing    copy     Incoming
         Link                 Link

                    Broker
Conclusion: AMQP
•    Ubiquitous Messaging
•    AMQP: Protocol standard
•    Better scalability
•    Dynamic resources
Conclusion: Spring AMQP
•    Easy to use
•    Flexible (e.g. message encoding)
•    Allows scalable message handling
•    Full support for AMQP and RabbitMQ
More
•  http://springsource.org/spring-amqp
•  Also a .NET version available
•  …and support Spring Integration
•  http://blog.springsource.com/
   2011/04/01/routing-topologies-for-
   performance-and-scalability-with-
   rabbitm
•  Transaction support
Questions?
 @ewolff

More Related Content

What's hot

Rabbit MQ introduction
Rabbit MQ introductionRabbit MQ introduction
Rabbit MQ introductionShirish Bari
 
Rabbitmq an amqp message broker
Rabbitmq an amqp message brokerRabbitmq an amqp message broker
Rabbitmq an amqp message brokerANASYS
 
What we've learned from running thousands of production RabbitMQ clusters - L...
What we've learned from running thousands of production RabbitMQ clusters - L...What we've learned from running thousands of production RabbitMQ clusters - L...
What we've learned from running thousands of production RabbitMQ clusters - L...RabbitMQ Summit
 
Message Oriented Middleware (MOM)
Message Oriented Middleware (MOM)Message Oriented Middleware (MOM)
Message Oriented Middleware (MOM)drewenut
 
Rabbitmq & Kafka Presentation
Rabbitmq & Kafka PresentationRabbitmq & Kafka Presentation
Rabbitmq & Kafka PresentationEmre Gündoğdu
 
IBM MQ Overview (IBM Message Queue)
IBM MQ Overview (IBM Message Queue)IBM MQ Overview (IBM Message Queue)
IBM MQ Overview (IBM Message Queue)Juarez Junior
 
Message queues
Message queuesMessage queues
Message queuesMax Bodnar
 
[@NaukriEngineering] Messaging Queues
[@NaukriEngineering] Messaging Queues[@NaukriEngineering] Messaging Queues
[@NaukriEngineering] Messaging QueuesNaukri.com
 
MQTT IOT Protocol Introduction
MQTT IOT Protocol IntroductionMQTT IOT Protocol Introduction
MQTT IOT Protocol IntroductionPrem Sanil
 
IBM WebSphere MQ: Managing Workloads, Scaling and Availability with MQ Clusters
IBM WebSphere MQ: Managing Workloads, Scaling and Availability with MQ ClustersIBM WebSphere MQ: Managing Workloads, Scaling and Availability with MQ Clusters
IBM WebSphere MQ: Managing Workloads, Scaling and Availability with MQ ClustersDavid Ware
 
IBM Web Shpere MQ ppt
IBM Web Shpere MQ pptIBM Web Shpere MQ ppt
IBM Web Shpere MQ pptParth Shah
 
RabbitMQ interview Questions and Answers
RabbitMQ interview Questions and AnswersRabbitMQ interview Questions and Answers
RabbitMQ interview Questions and Answersjeetendra mandal
 

What's hot (20)

Rabbitmq basics
Rabbitmq basicsRabbitmq basics
Rabbitmq basics
 
Rabbit MQ introduction
Rabbit MQ introductionRabbit MQ introduction
Rabbit MQ introduction
 
Rabbitmq an amqp message broker
Rabbitmq an amqp message brokerRabbitmq an amqp message broker
Rabbitmq an amqp message broker
 
RabbitMQ
RabbitMQ RabbitMQ
RabbitMQ
 
RabbitMQ.ppt
RabbitMQ.pptRabbitMQ.ppt
RabbitMQ.ppt
 
What we've learned from running thousands of production RabbitMQ clusters - L...
What we've learned from running thousands of production RabbitMQ clusters - L...What we've learned from running thousands of production RabbitMQ clusters - L...
What we've learned from running thousands of production RabbitMQ clusters - L...
 
A Closer Look at RabbitMQ
A Closer Look at RabbitMQA Closer Look at RabbitMQ
A Closer Look at RabbitMQ
 
Message Broker System and RabbitMQ
Message Broker System and RabbitMQMessage Broker System and RabbitMQ
Message Broker System and RabbitMQ
 
Message Oriented Middleware (MOM)
Message Oriented Middleware (MOM)Message Oriented Middleware (MOM)
Message Oriented Middleware (MOM)
 
Rabbitmq & Kafka Presentation
Rabbitmq & Kafka PresentationRabbitmq & Kafka Presentation
Rabbitmq & Kafka Presentation
 
IBM MQ Overview (IBM Message Queue)
IBM MQ Overview (IBM Message Queue)IBM MQ Overview (IBM Message Queue)
IBM MQ Overview (IBM Message Queue)
 
Message queues
Message queuesMessage queues
Message queues
 
[@NaukriEngineering] Messaging Queues
[@NaukriEngineering] Messaging Queues[@NaukriEngineering] Messaging Queues
[@NaukriEngineering] Messaging Queues
 
Amqp Basic
Amqp BasicAmqp Basic
Amqp Basic
 
Understanding of MQTT for IoT Projects
Understanding of MQTT for IoT ProjectsUnderstanding of MQTT for IoT Projects
Understanding of MQTT for IoT Projects
 
MQTT IOT Protocol Introduction
MQTT IOT Protocol IntroductionMQTT IOT Protocol Introduction
MQTT IOT Protocol Introduction
 
IBM WebSphere MQ: Managing Workloads, Scaling and Availability with MQ Clusters
IBM WebSphere MQ: Managing Workloads, Scaling and Availability with MQ ClustersIBM WebSphere MQ: Managing Workloads, Scaling and Availability with MQ Clusters
IBM WebSphere MQ: Managing Workloads, Scaling and Availability with MQ Clusters
 
IBM Web Shpere MQ ppt
IBM Web Shpere MQ pptIBM Web Shpere MQ ppt
IBM Web Shpere MQ ppt
 
RabbitMQ interview Questions and Answers
RabbitMQ interview Questions and AnswersRabbitMQ interview Questions and Answers
RabbitMQ interview Questions and Answers
 
Overview of Message Queues
Overview of Message QueuesOverview of Message Queues
Overview of Message Queues
 

Viewers also liked

Dissecting the rabbit: RabbitMQ Internal Architecture
Dissecting the rabbit: RabbitMQ Internal ArchitectureDissecting the rabbit: RabbitMQ Internal Architecture
Dissecting the rabbit: RabbitMQ Internal ArchitectureAlvaro Videla
 
High powered messaging with RabbitMQ
High powered messaging with RabbitMQHigh powered messaging with RabbitMQ
High powered messaging with RabbitMQJames Carr
 
Distributed messaging with AMQP
Distributed messaging with AMQPDistributed messaging with AMQP
Distributed messaging with AMQPWee Keat Chin
 
Event Driven Architecture - MeshU - Ilya Grigorik
Event Driven Architecture - MeshU - Ilya GrigorikEvent Driven Architecture - MeshU - Ilya Grigorik
Event Driven Architecture - MeshU - Ilya GrigorikIlya Grigorik
 
The Future of Messaging: RabbitMQ and AMQP
The Future of Messaging: RabbitMQ and AMQP The Future of Messaging: RabbitMQ and AMQP
The Future of Messaging: RabbitMQ and AMQP Eberhard Wolff
 
Rabbitmq, amqp Intro - Messaging Patterns
Rabbitmq, amqp Intro - Messaging PatternsRabbitmq, amqp Intro - Messaging Patterns
Rabbitmq, amqp Intro - Messaging PatternsJavier Arias Losada
 
RabbitMQ And Nanite
RabbitMQ And NaniteRabbitMQ And Nanite
RabbitMQ And Nanitemattmatt
 
Easy enterprise application integration with RabbitMQ and AMQP
Easy enterprise application integration with RabbitMQ and AMQPEasy enterprise application integration with RabbitMQ and AMQP
Easy enterprise application integration with RabbitMQ and AMQPRabbit MQ
 
Cloud architectural patterns and Microsoft Azure tools
Cloud architectural patterns and Microsoft Azure toolsCloud architectural patterns and Microsoft Azure tools
Cloud architectural patterns and Microsoft Azure toolsPushkar Chivate
 
DDS Interoperability Demo 2013 (Washington DC)
DDS Interoperability Demo 2013 (Washington DC)DDS Interoperability Demo 2013 (Washington DC)
DDS Interoperability Demo 2013 (Washington DC)Gerardo Pardo-Castellote
 
Messaging in the Cloud - AMQP, RabbitMQ and Spring
Messaging in the Cloud - AMQP, RabbitMQ and SpringMessaging in the Cloud - AMQP, RabbitMQ and Spring
Messaging in the Cloud - AMQP, RabbitMQ and SpringEberhard Wolff
 
Atlanta OpenStack 2014 Chef for OpenStack Deployment Workshop
Atlanta OpenStack 2014 Chef for OpenStack Deployment WorkshopAtlanta OpenStack 2014 Chef for OpenStack Deployment Workshop
Atlanta OpenStack 2014 Chef for OpenStack Deployment WorkshopMatt Ray
 
Inter-Process/Task Communication With Message Queues
Inter-Process/Task Communication With Message QueuesInter-Process/Task Communication With Message Queues
Inter-Process/Task Communication With Message Queueswamcvey
 
OWASP Ireland June Chapter Meeting - Paul Mooney on ARMOR & CSRF
OWASP Ireland June Chapter Meeting - Paul Mooney on ARMOR & CSRFOWASP Ireland June Chapter Meeting - Paul Mooney on ARMOR & CSRF
OWASP Ireland June Chapter Meeting - Paul Mooney on ARMOR & CSRFPaul Mooney
 
Modern Web App Development using ClojureScript & React.js / Baishampayan “BG”...
Modern Web App Development using ClojureScript & React.js / Baishampayan “BG”...Modern Web App Development using ClojureScript & React.js / Baishampayan “BG”...
Modern Web App Development using ClojureScript & React.js / Baishampayan “BG”...Ontico
 
OpenStack Deployment with Chef Workshop
OpenStack Deployment with Chef WorkshopOpenStack Deployment with Chef Workshop
OpenStack Deployment with Chef WorkshopMatt Ray
 

Viewers also liked (20)

Dissecting the rabbit: RabbitMQ Internal Architecture
Dissecting the rabbit: RabbitMQ Internal ArchitectureDissecting the rabbit: RabbitMQ Internal Architecture
Dissecting the rabbit: RabbitMQ Internal Architecture
 
High powered messaging with RabbitMQ
High powered messaging with RabbitMQHigh powered messaging with RabbitMQ
High powered messaging with RabbitMQ
 
AMQP 1.0 introduction
AMQP 1.0 introductionAMQP 1.0 introduction
AMQP 1.0 introduction
 
Distributed messaging with AMQP
Distributed messaging with AMQPDistributed messaging with AMQP
Distributed messaging with AMQP
 
Event Driven Architecture - MeshU - Ilya Grigorik
Event Driven Architecture - MeshU - Ilya GrigorikEvent Driven Architecture - MeshU - Ilya Grigorik
Event Driven Architecture - MeshU - Ilya Grigorik
 
The Future of Messaging: RabbitMQ and AMQP
The Future of Messaging: RabbitMQ and AMQP The Future of Messaging: RabbitMQ and AMQP
The Future of Messaging: RabbitMQ and AMQP
 
AMQP for phpMelb
AMQP for phpMelbAMQP for phpMelb
AMQP for phpMelb
 
Rabbitmq, amqp Intro - Messaging Patterns
Rabbitmq, amqp Intro - Messaging PatternsRabbitmq, amqp Intro - Messaging Patterns
Rabbitmq, amqp Intro - Messaging Patterns
 
RabbitMQ And Nanite
RabbitMQ And NaniteRabbitMQ And Nanite
RabbitMQ And Nanite
 
Easy enterprise application integration with RabbitMQ and AMQP
Easy enterprise application integration with RabbitMQ and AMQPEasy enterprise application integration with RabbitMQ and AMQP
Easy enterprise application integration with RabbitMQ and AMQP
 
Cloud architectural patterns and Microsoft Azure tools
Cloud architectural patterns and Microsoft Azure toolsCloud architectural patterns and Microsoft Azure tools
Cloud architectural patterns and Microsoft Azure tools
 
Message oriented middleware
Message oriented middlewareMessage oriented middleware
Message oriented middleware
 
DDS Interoperability Demo 2013 (Washington DC)
DDS Interoperability Demo 2013 (Washington DC)DDS Interoperability Demo 2013 (Washington DC)
DDS Interoperability Demo 2013 (Washington DC)
 
Messaging in the Cloud - AMQP, RabbitMQ and Spring
Messaging in the Cloud - AMQP, RabbitMQ and SpringMessaging in the Cloud - AMQP, RabbitMQ and Spring
Messaging in the Cloud - AMQP, RabbitMQ and Spring
 
Atlanta OpenStack 2014 Chef for OpenStack Deployment Workshop
Atlanta OpenStack 2014 Chef for OpenStack Deployment WorkshopAtlanta OpenStack 2014 Chef for OpenStack Deployment Workshop
Atlanta OpenStack 2014 Chef for OpenStack Deployment Workshop
 
Inter-Process/Task Communication With Message Queues
Inter-Process/Task Communication With Message QueuesInter-Process/Task Communication With Message Queues
Inter-Process/Task Communication With Message Queues
 
OWASP Ireland June Chapter Meeting - Paul Mooney on ARMOR & CSRF
OWASP Ireland June Chapter Meeting - Paul Mooney on ARMOR & CSRFOWASP Ireland June Chapter Meeting - Paul Mooney on ARMOR & CSRF
OWASP Ireland June Chapter Meeting - Paul Mooney on ARMOR & CSRF
 
Modern Web App Development using ClojureScript & React.js / Baishampayan “BG”...
Modern Web App Development using ClojureScript & React.js / Baishampayan “BG”...Modern Web App Development using ClojureScript & React.js / Baishampayan “BG”...
Modern Web App Development using ClojureScript & React.js / Baishampayan “BG”...
 
OpenStack Deployment with Chef Workshop
OpenStack Deployment with Chef WorkshopOpenStack Deployment with Chef Workshop
OpenStack Deployment with Chef Workshop
 
Introduction to Apache Synapse
Introduction to Apache SynapseIntroduction to Apache Synapse
Introduction to Apache Synapse
 

Similar to Architecture | The Future of Messaging: RabbitMQ and AMQP | Eberhard Wolff

Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...Ontico
 
Enterprise Messaging With ActiveMQ and Spring JMS
Enterprise Messaging With ActiveMQ and Spring JMSEnterprise Messaging With ActiveMQ and Spring JMS
Enterprise Messaging With ActiveMQ and Spring JMSBruce Snyder
 
CBDW2014 - Down the RabbitMQ hole with ColdFusion
CBDW2014 - Down the RabbitMQ hole with ColdFusionCBDW2014 - Down the RabbitMQ hole with ColdFusion
CBDW2014 - Down the RabbitMQ hole with ColdFusionOrtus Solutions, Corp
 
TS 4839 - Enterprise Integration Patterns in Practice
TS 4839 - Enterprise Integration Patterns in PracticeTS 4839 - Enterprise Integration Patterns in Practice
TS 4839 - Enterprise Integration Patterns in Practiceaegloff
 
quickguide-einnovator-3-rabbitmq
quickguide-einnovator-3-rabbitmqquickguide-einnovator-3-rabbitmq
quickguide-einnovator-3-rabbitmqjorgesimao71
 
Integrating PostgreSql with RabbitMQ
Integrating PostgreSql with RabbitMQIntegrating PostgreSql with RabbitMQ
Integrating PostgreSql with RabbitMQGavin Roy
 
RabbitMQ and AMQP with .net client library
RabbitMQ and AMQP with .net client libraryRabbitMQ and AMQP with .net client library
RabbitMQ and AMQP with .net client libraryMohammed Shaban
 
Building scalable flexible messaging systems using qpid
Building scalable flexible messaging systems using qpidBuilding scalable flexible messaging systems using qpid
Building scalable flexible messaging systems using qpidJack Gibson
 
ITB2019 Multi-language / multi-OS communication using RabbitMQ - Wil de Bruin
ITB2019 Multi-language / multi-OS communication using RabbitMQ - Wil de BruinITB2019 Multi-language / multi-OS communication using RabbitMQ - Wil de Bruin
ITB2019 Multi-language / multi-OS communication using RabbitMQ - Wil de BruinOrtus Solutions, Corp
 
Multi-language/multi-OS communication using RabbitMQ
Multi-language/multi-OS communication using RabbitMQMulti-language/multi-OS communication using RabbitMQ
Multi-language/multi-OS communication using RabbitMQWil de Bruin
 
Rabbit MQ introduction
Rabbit MQ introductionRabbit MQ introduction
Rabbit MQ introductionSitg Yao
 

Similar to Architecture | The Future of Messaging: RabbitMQ and AMQP | Eberhard Wolff (20)

Follow the White Rabbit - Message Queues with PHP
Follow the White Rabbit - Message Queues with PHPFollow the White Rabbit - Message Queues with PHP
Follow the White Rabbit - Message Queues with PHP
 
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
Построение распределенной системы сбора данных с помощью RabbitMQ, Alvaro Vid...
 
Enterprise Messaging With ActiveMQ and Spring JMS
Enterprise Messaging With ActiveMQ and Spring JMSEnterprise Messaging With ActiveMQ and Spring JMS
Enterprise Messaging With ActiveMQ and Spring JMS
 
Spring RabbitMQ
Spring RabbitMQSpring RabbitMQ
Spring RabbitMQ
 
Spring RabbitMQ
Spring RabbitMQSpring RabbitMQ
Spring RabbitMQ
 
CBDW2014 - Down the RabbitMQ hole with ColdFusion
CBDW2014 - Down the RabbitMQ hole with ColdFusionCBDW2014 - Down the RabbitMQ hole with ColdFusion
CBDW2014 - Down the RabbitMQ hole with ColdFusion
 
RabbitMQ and AMQP Model
RabbitMQ and AMQP ModelRabbitMQ and AMQP Model
RabbitMQ and AMQP Model
 
Spring integration
Spring integrationSpring integration
Spring integration
 
TS 4839 - Enterprise Integration Patterns in Practice
TS 4839 - Enterprise Integration Patterns in PracticeTS 4839 - Enterprise Integration Patterns in Practice
TS 4839 - Enterprise Integration Patterns in Practice
 
AMQP
AMQPAMQP
AMQP
 
quickguide-einnovator-3-rabbitmq
quickguide-einnovator-3-rabbitmqquickguide-einnovator-3-rabbitmq
quickguide-einnovator-3-rabbitmq
 
Integrating PostgreSql with RabbitMQ
Integrating PostgreSql with RabbitMQIntegrating PostgreSql with RabbitMQ
Integrating PostgreSql with RabbitMQ
 
RabbitMQ and AMQP with .net client library
RabbitMQ and AMQP with .net client libraryRabbitMQ and AMQP with .net client library
RabbitMQ and AMQP with .net client library
 
Building scalable flexible messaging systems using qpid
Building scalable flexible messaging systems using qpidBuilding scalable flexible messaging systems using qpid
Building scalable flexible messaging systems using qpid
 
Enterprise messaging
Enterprise messagingEnterprise messaging
Enterprise messaging
 
ITB2019 Multi-language / multi-OS communication using RabbitMQ - Wil de Bruin
ITB2019 Multi-language / multi-OS communication using RabbitMQ - Wil de BruinITB2019 Multi-language / multi-OS communication using RabbitMQ - Wil de Bruin
ITB2019 Multi-language / multi-OS communication using RabbitMQ - Wil de Bruin
 
Multi-language/multi-OS communication using RabbitMQ
Multi-language/multi-OS communication using RabbitMQMulti-language/multi-OS communication using RabbitMQ
Multi-language/multi-OS communication using RabbitMQ
 
Pg amqp
Pg amqpPg amqp
Pg amqp
 
PostgreSQL: meet your queue
PostgreSQL: meet your queuePostgreSQL: meet your queue
PostgreSQL: meet your queue
 
Rabbit MQ introduction
Rabbit MQ introductionRabbit MQ introduction
Rabbit MQ introduction
 

More from JAX London

Java Tech & Tools | Continuous Delivery - the Writing is on the Wall | John S...
Java Tech & Tools | Continuous Delivery - the Writing is on the Wall | John S...Java Tech & Tools | Continuous Delivery - the Writing is on the Wall | John S...
Java Tech & Tools | Continuous Delivery - the Writing is on the Wall | John S...JAX London
 
Java Tech & Tools | Mapping, GIS and Geolocating Data in Java | Joachim Van d...
Java Tech & Tools | Mapping, GIS and Geolocating Data in Java | Joachim Van d...Java Tech & Tools | Mapping, GIS and Geolocating Data in Java | Joachim Van d...
Java Tech & Tools | Mapping, GIS and Geolocating Data in Java | Joachim Van d...JAX London
 
Keynote | Middleware Everywhere - Ready for Mobile and Cloud | Dr. Mark Little
Keynote | Middleware Everywhere - Ready for Mobile and Cloud | Dr. Mark LittleKeynote | Middleware Everywhere - Ready for Mobile and Cloud | Dr. Mark Little
Keynote | Middleware Everywhere - Ready for Mobile and Cloud | Dr. Mark LittleJAX London
 
Spring Day | WaveMaker - Spring Roo - SpringSource Tool Suite: Choosing the R...
Spring Day | WaveMaker - Spring Roo - SpringSource Tool Suite: Choosing the R...Spring Day | WaveMaker - Spring Roo - SpringSource Tool Suite: Choosing the R...
Spring Day | WaveMaker - Spring Roo - SpringSource Tool Suite: Choosing the R...JAX London
 
Spring Day | Behind the Scenes at Spring Batch | Dave Syer
Spring Day | Behind the Scenes at Spring Batch | Dave SyerSpring Day | Behind the Scenes at Spring Batch | Dave Syer
Spring Day | Behind the Scenes at Spring Batch | Dave SyerJAX London
 
Spring Day | Spring 3.1 in a Nutshell | Sam Brannen
Spring Day | Spring 3.1 in a Nutshell | Sam BrannenSpring Day | Spring 3.1 in a Nutshell | Sam Brannen
Spring Day | Spring 3.1 in a Nutshell | Sam BrannenJAX London
 
Spring Day | Identity Management with Spring Security | Dave Syer
Spring Day | Identity Management with Spring Security | Dave SyerSpring Day | Identity Management with Spring Security | Dave Syer
Spring Day | Identity Management with Spring Security | Dave SyerJAX London
 
Spring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard WolffSpring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard WolffJAX London
 
Spring Day | Data Access 2.0? Please Welcome Spring Data! | Oliver Gierke
Spring Day | Data Access 2.0? Please Welcome Spring Data! | Oliver GierkeSpring Day | Data Access 2.0? Please Welcome Spring Data! | Oliver Gierke
Spring Day | Data Access 2.0? Please Welcome Spring Data! | Oliver GierkeJAX London
 
Keynote | The Rise and Fall and Rise of Java | James Governor
Keynote | The Rise and Fall and Rise of Java | James GovernorKeynote | The Rise and Fall and Rise of Java | James Governor
Keynote | The Rise and Fall and Rise of Java | James GovernorJAX London
 
Java Tech & Tools | OSGi Best Practices | Emily Jiang
Java Tech & Tools | OSGi Best Practices | Emily JiangJava Tech & Tools | OSGi Best Practices | Emily Jiang
Java Tech & Tools | OSGi Best Practices | Emily JiangJAX London
 
Java Tech & Tools | Beyond the Data Grid: Coherence, Normalisation, Joins and...
Java Tech & Tools | Beyond the Data Grid: Coherence, Normalisation, Joins and...Java Tech & Tools | Beyond the Data Grid: Coherence, Normalisation, Joins and...
Java Tech & Tools | Beyond the Data Grid: Coherence, Normalisation, Joins and...JAX London
 
Java Tech & Tools | Big Blobs: Moving Big Data In and Out of the Cloud | Adri...
Java Tech & Tools | Big Blobs: Moving Big Data In and Out of the Cloud | Adri...Java Tech & Tools | Big Blobs: Moving Big Data In and Out of the Cloud | Adri...
Java Tech & Tools | Big Blobs: Moving Big Data In and Out of the Cloud | Adri...JAX London
 
Java Tech & Tools | Social Media in Programming in Java | Khanderao Kand
Java Tech & Tools | Social Media in Programming in Java | Khanderao KandJava Tech & Tools | Social Media in Programming in Java | Khanderao Kand
Java Tech & Tools | Social Media in Programming in Java | Khanderao KandJAX London
 
Java Tech & Tools | Just Keep Passing the Message | Russel Winder
Java Tech & Tools | Just Keep Passing the Message | Russel WinderJava Tech & Tools | Just Keep Passing the Message | Russel Winder
Java Tech & Tools | Just Keep Passing the Message | Russel WinderJAX London
 
Java Tech & Tools | Grails in the Java Enterprise | Peter Ledbrook
Java Tech & Tools | Grails in the Java Enterprise | Peter LedbrookJava Tech & Tools | Grails in the Java Enterprise | Peter Ledbrook
Java Tech & Tools | Grails in the Java Enterprise | Peter LedbrookJAX London
 
Java Tech & Tools | Deploying Java & Play Framework Apps to the Cloud | Sande...
Java Tech & Tools | Deploying Java & Play Framework Apps to the Cloud | Sande...Java Tech & Tools | Deploying Java & Play Framework Apps to the Cloud | Sande...
Java Tech & Tools | Deploying Java & Play Framework Apps to the Cloud | Sande...JAX London
 
Java EE | Modular EJBs for Enterprise OSGi | Tim Ward
Java EE | Modular EJBs for Enterprise OSGi | Tim WardJava EE | Modular EJBs for Enterprise OSGi | Tim Ward
Java EE | Modular EJBs for Enterprise OSGi | Tim WardJAX London
 
Java EE | Apache TomEE - Java EE Web Profile on Tomcat | Jonathan Gallimore
Java EE | Apache TomEE - Java EE Web Profile on Tomcat | Jonathan GallimoreJava EE | Apache TomEE - Java EE Web Profile on Tomcat | Jonathan Gallimore
Java EE | Apache TomEE - Java EE Web Profile on Tomcat | Jonathan GallimoreJAX London
 
Java Core | Understanding the Disruptor: a Beginner's Guide to Hardcore Concu...
Java Core | Understanding the Disruptor: a Beginner's Guide to Hardcore Concu...Java Core | Understanding the Disruptor: a Beginner's Guide to Hardcore Concu...
Java Core | Understanding the Disruptor: a Beginner's Guide to Hardcore Concu...JAX London
 

More from JAX London (20)

Java Tech & Tools | Continuous Delivery - the Writing is on the Wall | John S...
Java Tech & Tools | Continuous Delivery - the Writing is on the Wall | John S...Java Tech & Tools | Continuous Delivery - the Writing is on the Wall | John S...
Java Tech & Tools | Continuous Delivery - the Writing is on the Wall | John S...
 
Java Tech & Tools | Mapping, GIS and Geolocating Data in Java | Joachim Van d...
Java Tech & Tools | Mapping, GIS and Geolocating Data in Java | Joachim Van d...Java Tech & Tools | Mapping, GIS and Geolocating Data in Java | Joachim Van d...
Java Tech & Tools | Mapping, GIS and Geolocating Data in Java | Joachim Van d...
 
Keynote | Middleware Everywhere - Ready for Mobile and Cloud | Dr. Mark Little
Keynote | Middleware Everywhere - Ready for Mobile and Cloud | Dr. Mark LittleKeynote | Middleware Everywhere - Ready for Mobile and Cloud | Dr. Mark Little
Keynote | Middleware Everywhere - Ready for Mobile and Cloud | Dr. Mark Little
 
Spring Day | WaveMaker - Spring Roo - SpringSource Tool Suite: Choosing the R...
Spring Day | WaveMaker - Spring Roo - SpringSource Tool Suite: Choosing the R...Spring Day | WaveMaker - Spring Roo - SpringSource Tool Suite: Choosing the R...
Spring Day | WaveMaker - Spring Roo - SpringSource Tool Suite: Choosing the R...
 
Spring Day | Behind the Scenes at Spring Batch | Dave Syer
Spring Day | Behind the Scenes at Spring Batch | Dave SyerSpring Day | Behind the Scenes at Spring Batch | Dave Syer
Spring Day | Behind the Scenes at Spring Batch | Dave Syer
 
Spring Day | Spring 3.1 in a Nutshell | Sam Brannen
Spring Day | Spring 3.1 in a Nutshell | Sam BrannenSpring Day | Spring 3.1 in a Nutshell | Sam Brannen
Spring Day | Spring 3.1 in a Nutshell | Sam Brannen
 
Spring Day | Identity Management with Spring Security | Dave Syer
Spring Day | Identity Management with Spring Security | Dave SyerSpring Day | Identity Management with Spring Security | Dave Syer
Spring Day | Identity Management with Spring Security | Dave Syer
 
Spring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard WolffSpring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard Wolff
 
Spring Day | Data Access 2.0? Please Welcome Spring Data! | Oliver Gierke
Spring Day | Data Access 2.0? Please Welcome Spring Data! | Oliver GierkeSpring Day | Data Access 2.0? Please Welcome Spring Data! | Oliver Gierke
Spring Day | Data Access 2.0? Please Welcome Spring Data! | Oliver Gierke
 
Keynote | The Rise and Fall and Rise of Java | James Governor
Keynote | The Rise and Fall and Rise of Java | James GovernorKeynote | The Rise and Fall and Rise of Java | James Governor
Keynote | The Rise and Fall and Rise of Java | James Governor
 
Java Tech & Tools | OSGi Best Practices | Emily Jiang
Java Tech & Tools | OSGi Best Practices | Emily JiangJava Tech & Tools | OSGi Best Practices | Emily Jiang
Java Tech & Tools | OSGi Best Practices | Emily Jiang
 
Java Tech & Tools | Beyond the Data Grid: Coherence, Normalisation, Joins and...
Java Tech & Tools | Beyond the Data Grid: Coherence, Normalisation, Joins and...Java Tech & Tools | Beyond the Data Grid: Coherence, Normalisation, Joins and...
Java Tech & Tools | Beyond the Data Grid: Coherence, Normalisation, Joins and...
 
Java Tech & Tools | Big Blobs: Moving Big Data In and Out of the Cloud | Adri...
Java Tech & Tools | Big Blobs: Moving Big Data In and Out of the Cloud | Adri...Java Tech & Tools | Big Blobs: Moving Big Data In and Out of the Cloud | Adri...
Java Tech & Tools | Big Blobs: Moving Big Data In and Out of the Cloud | Adri...
 
Java Tech & Tools | Social Media in Programming in Java | Khanderao Kand
Java Tech & Tools | Social Media in Programming in Java | Khanderao KandJava Tech & Tools | Social Media in Programming in Java | Khanderao Kand
Java Tech & Tools | Social Media in Programming in Java | Khanderao Kand
 
Java Tech & Tools | Just Keep Passing the Message | Russel Winder
Java Tech & Tools | Just Keep Passing the Message | Russel WinderJava Tech & Tools | Just Keep Passing the Message | Russel Winder
Java Tech & Tools | Just Keep Passing the Message | Russel Winder
 
Java Tech & Tools | Grails in the Java Enterprise | Peter Ledbrook
Java Tech & Tools | Grails in the Java Enterprise | Peter LedbrookJava Tech & Tools | Grails in the Java Enterprise | Peter Ledbrook
Java Tech & Tools | Grails in the Java Enterprise | Peter Ledbrook
 
Java Tech & Tools | Deploying Java & Play Framework Apps to the Cloud | Sande...
Java Tech & Tools | Deploying Java & Play Framework Apps to the Cloud | Sande...Java Tech & Tools | Deploying Java & Play Framework Apps to the Cloud | Sande...
Java Tech & Tools | Deploying Java & Play Framework Apps to the Cloud | Sande...
 
Java EE | Modular EJBs for Enterprise OSGi | Tim Ward
Java EE | Modular EJBs for Enterprise OSGi | Tim WardJava EE | Modular EJBs for Enterprise OSGi | Tim Ward
Java EE | Modular EJBs for Enterprise OSGi | Tim Ward
 
Java EE | Apache TomEE - Java EE Web Profile on Tomcat | Jonathan Gallimore
Java EE | Apache TomEE - Java EE Web Profile on Tomcat | Jonathan GallimoreJava EE | Apache TomEE - Java EE Web Profile on Tomcat | Jonathan Gallimore
Java EE | Apache TomEE - Java EE Web Profile on Tomcat | Jonathan Gallimore
 
Java Core | Understanding the Disruptor: a Beginner's Guide to Hardcore Concu...
Java Core | Understanding the Disruptor: a Beginner's Guide to Hardcore Concu...Java Core | Understanding the Disruptor: a Beginner's Guide to Hardcore Concu...
Java Core | Understanding the Disruptor: a Beginner's Guide to Hardcore Concu...
 

Recently uploaded

Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Hyundai Motor Group
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 

Recently uploaded (20)

Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2Next-generation AAM aircraft unveiled by Supernal, S-A2
Next-generation AAM aircraft unveiled by Supernal, S-A2
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 

Architecture | The Future of Messaging: RabbitMQ and AMQP | Eberhard Wolff

  • 1. The Future of Messaging: RabbitMQ and AMQP Eberhard Wolff Architecture and Technology Manager adesso AG, Germany
  • 2. Overview •  Why Messaging, AMQP and RabbitMQ •  Basic AMQP •  Exchanges •  More on Spring-AMQP
  • 3. RPC •  Predominant approach –  RMI, SOAP Web Services, CORBA, HttpInvoker, Burlap, Hessian •  Calls remote methods with parameter •  …and waits for response
  • 4. RPC •  Problems: –  Explicitly tells the server what to do i.e. tight coupling –  What about network failures? –  What about long latencies?
  • 5. Why Messaging? •  Decoupling –  Data, no action i.e. receiver Component can react arbitrarily –  Asynchronous i.e. decoupled by time •  Reliable –  Message can be stored-and- Component forwarded Messages –  Redelivery until message processed •  Solves typical problems of distributed systems
  • 6. Why Messaging? •  But: Requires different architecture •  Very different from calling remote methods •  Asynchronous •  AJAX has the same model •  See for example “Patterns of Enterprise Integration”
  • 7. Why AMQP? •  Open standard protocol •  Standard wire protocol •  i.e. just one client library – no matter which implementation you are using •  Less vendor lock in •  Efficient –  Binary wire protocol •  Support in all major languages •  Supported on most OS platforms
  • 8. What about JMS? •  JMS has been the default for Java messaging system for 10+ years •  But: –  Only standardized on the API level –  Less flexible than AMQP •  Mapping AMQP/JMS is being defined
  • 9. Why Rabbit? •  Because it has a kewl name •  Numerous protocols supported •  Most popular choice on EC2 •  Foundation for demanding systems e.g. NASA’s cloud initiative Nebula •  Implemented in Erlang •  Clustering built in •  Currently in 2.6.1 •  Supports AMQP 0.8, 0.9, 0.9.1 •  1.0 as a prototype Plug In
  • 10. Broad Support in RabbitMQ
  • 11. Broad Support in the JVM Space •  Grails Plug In •  Java Client •  Scala / Lift support •  We will discuss Spring support in detail •  Spring AMQP project 1.0.0 •  http://www.springsource.org/spring- amqp
  • 12. Why Erlang? •  Originally designed for telephone switches by Ericsson •  Much easier to develop scalable and fault tolerant systems (by factors) •  See Motorola presentation: http://www.slideshare.net/Arbow/ comparing-cpp-and-erlang-for-motorola- telecoms-software •  Good tool for reliable and scalable systems
  • 13. Erlang‘s Model Monitor Link to monitor, restart Light Light Light weight Messages weight Messages weight process process process with with with state state state
  • 14. Why Erlang? •  Let it crash –  If a process fails, it can be easily restarted –  Different approach to fault tolerance –  Otherwise lots of error handling •  Message Passing in the Core –  RabbitMQ is a messaging system… •  Light-weight process model –  Scalabiliy
  • 15. Very Basic AMQP •  Queues: Store messages •  Queues might be –  Durable: Survive server restarts –  Exclusive: For one connection –  autoDelete: Deleted if connection closes •  Queue usually created by consumer •  All resources are dynamic •  Producer sends a message to a Queue
  • 16. Code ConnectionFactory conFactory = new CachingConnectionFactory ("localhost"); RabbitAdmin admin = new RabbitAdmin(conFactory); admin.declareQueue(
 new Queue("myQueue", false, true, true)); RabbitTemplate template = new RabbitTemplate(conFactory); template.convertAndSend("myQueue", "Hi AMQP!"); String receive = (String) template.receiveAndConvert("myQueue"); Assert.assertEquals("Hi AMQP!", receive);
  • 17. Spring’s RabbitTemplate •  Send & receive message •  AmqpTemplate: Generic AMQP interface •  RabbitOperations: Rabbit specific interface: (adds just a callback) •  RabbitTemplate: Implementation •  Spring might provide support for other AMQP implementations later
  • 18. Spring’s MessageConverter •  Messages are binary data •  RabbitTemplate uses MessageConverter to convert between objects and messages •  Can also send binary data if preferred
  • 19. Spring’s MessageConverter •  Default: SimpleMessageConverter –  byte[] directly transferred –  String converted with configurable encoding –  Serializable are serialized –  Content type set accordingly •  JsonMessageConverter converts from / to JSON using Jackson •  MarshallingMessageConverter converts from / to XML using Spring's OXM mapping •  SerializerMessageConverter uses Spring’s Serializer abstraction
  • 20. Spring‘s AdminTemplate •  Main purpose: Configure the AMQP infrastructure •  E.g. create queues •  AmpqAdmin: Generic AMQP interface •  RabbitAdmin: Rabbit specific
  • 21. Basics of AMQP •  Sending messages directly to queues is not enough •  What about e.g. pub / sub? •  Exchange: Route messages (stateless) •  Messages are byte-streams •  Example used the default exchange •  More dynamic, flexible and cleaner than JMS
  • 22. AMQP  in  a  nutshell   Exchange routes message Stateless Usually created by producer No queue: Message discarded X Binding binds an Exchange to a Queue Queues buffer messages Usually created by consumer
  • 23. AMQP  in  a  nutshell   Producer and Consumer might be written in Java, C#, Python, Ruby … C P X C AMQP RabbitMQ AMQP protocol protocol
  • 24. Exchange: Route Messages X •  The type of Exchange defined the routing algorithm used •  Binding provides selector for routing •  Exchange is addressed by name •  Some standard types •  Can provide additional ones
  • 25. Fanout Exchange X •  Broadcast to all bound queues •  Fast •  Simple •  amq.fanout is mandatory •  To broadcast information
  • 26. Fanout Exchange X C P X C Fanout C
  • 27. Queue fanoutQueue = new Queue("fanoutQueue"); admin.declareQueue(fanoutQueue); FanoutExchange fanoutExchange= new FanoutExchange("myFanout"); admin.declareExchange(fanoutExchange); admin.declareBinding( BindingBuilder.bind(fanoutQueue). to(fanoutExchange)); template.setExchange("myFanout"); template.convertAndSend("Hi Fanout!"); String receive = (String) template.receiveAndConvert("fanoutQueue"); Assert.assertEquals("Hi Fanout!", receive);
  • 28. Direct Exchange X •  Routing based on one routing key •  amq.direct and the default Exchange (no name) always exist •  To send work orders to a specific worker
  • 29. Direct Exchange normal express Direct Exchange C express P X C normal C
  • 30. Queue directQueue = new Queue("direct"); admin.declareQueue(directQueue); admin.declareBinding(BindingBuilder .bind(directQueue) .to(new DirectExchange("amq.direct")) .with("helloKey")); template.setExchange("amq.direct"); template.convertAndSend("amq.direct","dropMe", "I will be dropped!"); template.convertAndSend("amq.direct","helloKey", "Hi Direct!"); Assert.assertEquals("Hi Direct!", template.receiveAndConvert("direct")); Assert.assertNull( template.receiveAndConvert("direct"));
  • 31. Topic Exchange X •  Routing based on routing pattern •  amq.topic is mandatory •  E.g. for public / subscribe scenarios
  • 32. Topic Exchange   order.DE invoice.USD Topic Exchange order.* P X C invoice.* C
  • 33. Headers Exchange X •  Routing based on one or more headers and an expression •  amqp.match is mandatory •  Complex routing roles
  • 34. Other Features •  Message can be persistent •  Request / response using correlations possible •  Redelivery / acknowledgement possible •  Clustering with e.g. Linux HA possible •  ...or send message through multiple channels and drop duplicates
  • 36. Configuring Rabbit Resources with Spring •  Spring enables decoupling of your application code from the underlying infrastructure •  The container provides the resources •  The application is simply coded against the API
  • 37. Configuring a ConnectionFactory Create an object with the given name and class <bean id="connectionFactory" Call setUsername() with the given value class="org.sfw.amqp.rabbit.connection.CachingConnectionFactory"> <property name="username" value="guest"/> <property name="password" value="guest"/> <constructor-arg value="localhost" /> </bean> Parameter for the constructor •  Can easily modify configuration options
  • 38. Using a ConnectionFactory from Cloud Foundry <cloud:rabbit-connection-factory id="rabbitConnectionFactory" /> ConnectionFactory connectionFactory = new RabbitServiceCreator(new CloudEnvironment()) .createSingletonService().service; •  Will be provided by Cloud Foundry
  • 39. Defining a RabbitTemplate Bean •  Provide a reference to the ConnectionFactory •  Optionally provide other references –  MessageConverter –  Routing key and exchange to be used if none is specified <bean id="rabbitTemplate" class="org.springframework.amqp.rabbit.core.RabbitTemplate"> <constructor-arg ref="connectionFactory" /> <property name="routingKey" value=”invoice.USD" /> </bean>
  • 40. The MessageListener •  So far: Calling receive() on RabbitTemplate •  Needed: Something that is called when a new message appears •  The API defines this interface for asynchronous reception of messages public interface MessageListener { public void onMessage(Message) { // handle the message } }
  • 41. Spring’s MessageListener Container •  Spring provides lightweight containers to call MessageListeners •  SimpleMessageListenerContainer •  Advanced scheduling and endpoint management options available •  i.e. thread pools, concurrent consumers, transaction handling
  • 42. Defining a Message Listener Container <bean class="org.sfw.amqp.rabbit.listener.SimpleMessageListenerContainer"> <property name="connectionFactory" ref="connectionFactory" /> <property name="queueNames" value="my.amqp.queue" /> <property name="messageListener" ref="messageListener" /> </bean> •  Every time a new message appears on my.amqp.queue the messageListener is called
  • 43. Spring's message-driven objects •  MessageListener means the receiver depends on Spring API •  Why not just a POJO? •  MessageListenerAdapter takes a POJO and makes it a MessageListener •  i.e. calls consume on Bean consumer <bean id="messageListenerAdapter" class="org.sfw.amqp.rabbit.listener.adapter.MessageListenerAdapter"> <property name="delegate" ref="consumer" /> <property name="defaultListenerMethod" value="consume" /> <property name="messageConverter" ref="jsonMessageConverter" /> </bean>
  • 44. Easier Using Namespaces <rabbit:listener-container connection-factory="connectionFactory“ message-converter="jsonMessageConverter"> <rabbit:listener ref="consumer" method="consume" queue-names="my.amqp.queue2" /> </rabbit:listener-container> •  Results in the same Spring Beans
  • 45. @Component Consumer code public class Consumer { public String consume(String message) { return …; } } •  No dependency on AMQP! •  But: What about the result of the method? •  Send to the Reply-To address given in message properties with same correlationId as original method
  • 46. Client Code String response = (String) rabbitTemplate.convertSendAndReceive( "my.fanout", "", "test"); •  Message sent to destination with routing key •  Reply-To set to exclusive, autodelete, non- durable queue •  Response received through Reply-To converted and returned •  Easy request-response! •  Beware of potential latency
  • 47. Create Environment using Namespaces •  ...if you don‘t like API calls <rabbit:fanout-exchange name="my.fanout2"> <rabbit:bindings> <rabbit:binding queue="my.amqp.queue2" /> </rabbit:bindings> </rabbit:fanout-exchange> <rabbit:queue name="my.amqp.queue2" /> <rabbit:admin connection-factory="rabbitConnectionFactory" />
  • 48. A SHORT GLIMPSE ON AMQP 1.0
  • 50. New Elements •  Links: unidirectional transport between source and target –  Flow control –  Settling transfers for different semantics (at most once etc) •  Processing nodes have distribution modes –  Copy: Copy message to each link –  Move: Move it to just one link
  • 51. AMQP: Point to Point Incoming Link Receiver Node Sender mode : Receiver Outgoing move Incoming Link Link Broker
  • 52. AMQP: Publish / Subscribe Incoming Link Receiver Node Sender mode : Receiver Outgoing copy Incoming Link Link Broker
  • 53. Conclusion: AMQP •  Ubiquitous Messaging •  AMQP: Protocol standard •  Better scalability •  Dynamic resources
  • 54. Conclusion: Spring AMQP •  Easy to use •  Flexible (e.g. message encoding) •  Allows scalable message handling •  Full support for AMQP and RabbitMQ
  • 55. More •  http://springsource.org/spring-amqp •  Also a .NET version available •  …and support Spring Integration •  http://blog.springsource.com/ 2011/04/01/routing-topologies-for- performance-and-scalability-with- rabbitm •  Transaction support