Your SlideShare is downloading. ×
  • Like
Messaging in Java
Upcoming SlideShare
Loading in...5

Thanks for flagging this SlideShare!

Oops! An error has occurred.


Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Messaging in Java



Published in Technology , Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads


Total Views
On SlideShare
From Embeds
Number of Embeds



Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

    No notes for slide


  • 1. Messaging Approaches in Java (JMS, AMQP) Kirill Afanasjev Riga,Latvia
  • 2. Why Messaging? 1. Start sending binary data with TCP 2. Add queueing 3. Add networking abstraction 4. Add authentification and ACL 5. Add virtual connections 6. Add high avalaibility 7. Add publish/subscribe 8. Result would be very similar :)
  • 3. RPC CORBA, SOAP Web Services, RMI, XML-RPC Synchronous Tight coupling
  • 4. Message oriented middleware Sender and receiver know nothing about each other, only destination and message format Email is for people what messaging is for applications
  • 5. Advantages Asynchronous A client does not have to request messages in order to receive them Sender can fire and forget the message to the broker Reliable It is possible to guarantee message is delivered safely once and only once
  • 6. Disadvantages Extra component in architecture (message transfer agent or message broker) Inter-application communication tend to be synchronous Lack of standarts
  • 7. Point-to-point
  • 8. Point-to-point Message queues, senders and receivers Message is sent to a queue Each message has only one consumer Queue may be configured to persist messages May be used for load balancing
  • 9. Publish-subscribe
  • 10. Publish-subscribe Publishers, subscribers, topics Message may have multiple consumers, or no consumer at all Each message is delivered to every client subscribed to a topic
  • 11. JMS Java Message Oriented Middleware API Part of the Java EE Defined in specification developed under JSR 914 RFC 6167 defines a jms: URI scheme JMS 1.0.2b (June 25, 2001) JMS 1.1 (March 18, 2002) JMS 2 - ?
  • 12. JMS architecture JMS provider (example : ActiveMQ) JMS clients Messages Administered objects (Destinations and connection factories) Native clients
  • 13. JMS API ConnectionFactory Connection Session Message producer Message producer Destination - Queue - Topic Message
  • 14. JMS API
  • 15. JMS message Header Properties (optional) Body (optional)
  • 16. JMS message headers JMSCorrelationId - (String) This header is set by the application for use by other applications. JMSDestination JMSDeliveryMode - (Integer) This header is set by the JMS provider and denotes the delivery mode. JMSExpiration
  • 17. JMS message headers JMSPriority - (Integer) The priority of the message. JMSMessageId JMSTimestamp - (Long) The time the message was sent. JMSReplyTo JMSType JMSRedelivered
  • 18. JMS message delivery modes DeliveryMode.NON_PERSISTENT DeliveryMode.PERSISTENT
  • 19. JMS message selector Message consumer receives only messages whose headers and properties match the selector A message selector cannot select messages on the basis of content of the message body
  • 20. JMS provider implementations Apache ActiveMQ Apache Qpid, using AMQP EMS from TIBCO OpenJMS, from The OpenJMS Group JBoss Messaging and HornetQ from JBoss Open Message Queue, from Sun Microsystems BEA Weblogic and Oracle AQ from Oracle RabbitMQ, using AMQP Solace JMS from Solace Systems SonicMQ from Progress Software StormMQ, using AMQP WebSphere MQ (formerly MQSeries) from IBM
  • 21. Spring JMS support Message-driven POJOs MessageConverter, to convert between Java objects and JMS messages JMSTemplate
  • 22. Sending message with Springpublic class JmsQueueSender { private JmsTemplate jmsTemplate; private Queue queue; public void simpleSend() { this.jmsTemplate.send(this.queue, new MessageCreator(){ public Message createMessage(Session session) { return session.createTextMessage("hello queue world"); } }); }}
  • 23. Receiving message with Spring public class ExampleListener implements MessageListener { public void onMessage(Message message) { if (message instanceof TextMessage) { System.out.println(((TextMessage) message).getText()); } } }
  • 24. Apache ActiveMQ Open source JMS 1.1 message broker Clustering Multiple message stores TCP, UDP, NIO, SSL, VM connectivity OpenWire API for high performance Stomp API for easier implementation REST API Can be used as in-memory JMS provider
  • 25. Why AMQP, not JMS? Bound to Java Other protocols (STOMP, e.t.c) do not offer all the functionality of the broker Single standart for interoperability of brokers (AMQP is Protocol, not API)
  • 26. Why JMS, not AMQP More implementations Better support in Java world Being an API allows for custom protocol implementations (VM connector)
  • 27. AMQP Open standart protocol Support in all major languages Binary wire protocol (JMS defines API only) 1.0 version of protocol published 07 Oct 2011
  • 28. AMQP protocol Defines how clients and brokers talk Data serialization, heartbeat Hidden inside client libraries
  • 29. AMQP model Message broker - server User Connection – physical connection Channel – logical connection Exchanges – named entities, to which messages are sent (may be durable or not) Queues – names entities, that store received messages (may be exclusive)
  • 30. AMQP model P - producer X - exchange C - consumer
  • 31. AMQP model P/C – producer/consumer Ch – channel Conn – connection X - exchange
  • 32. AMQP message Header + content body Immediate – message will be handled as unroutable if there is no client waiting for it Expiration Priority Delivery mode
  • 33. AMQP bindings Relationship between one queue and one exchange Unconditional Conditional on fixed string Conditional on pattern match Conditional on content inspection Conditional on algorithmic comparison
  • 34. Fanout exchange 1:N message delivery pattern Bind a queue to the exchange and messages sent to that exchange get delivered to all the bound queues
  • 35. Direct exchange Queue binds to exchange with string key Publisher sends message with key Message is passed to the queue only if keys are equal
  • 36. AMQP working group Bank of America, N.A. Barclays Bank PLC Cisco Systems, Inc. Credit Suisse Goldman Sachs JPMorgan Chase Bank & Co. Microsoft Corporation Novell Progress Software Red Hat, Inc. Software AG VMware, Inc.
  • 37. AMQP in Java world Grails plug in Java client Scala / Lift support Spring AMQP project 1.0.0.RELEASE (
  • 38. Spring AMQP project Similar to Spring JMS support AMQPTemplate MessageListener Transactions e.t.c
  • 39. Apache QPID JMS interface for AMQP Message broker implemented in Java Version 0.12 :(
  • 40. AMQP future ActiveMQ, HornetQ, e.t.c has plans to support AMQP 1.0 version?
  • 41. RabbitMQ Leading implementation of AMQP Developed by SpringSource division of Vmware Full range of commercial support services Implemented in Erlang Clustering built-in
  • 42. RabbitMQ performance We use it for login data processing Each user login in game = 1 message to the queue Performance depends on persistence/transactions enabled At 20k 1-kilobyte persistent messages per second with sub-millisecond latency RabbitMQ was far from being a bottleneck
  • 43. Book to read Hohpe, Gregor; Bobby Woolf (2003). Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions. ISBN 0-321-20068-3.
  • 44. Book to read ActiveMQ in Action Bruce Snyder, Dejan Bosanac and Rob Davies ISBN 1933988940
  • 45. Book to read RabbitMQ in Action Alvaro Videla and Jason J.W. Williams ISBN: 9781935182979
  • 46. Questions? ?