Messaging in Java
Upcoming SlideShare
Loading in...5

Messaging in Java






Total Views
Views on SlideShare
Embed Views



7 Embeds 164 114 21 12 7 5 4
http://translate.googleusercontent. 1



Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

    Messaging in Java Messaging in Java Presentation Transcript

    • Messaging Approaches in Java (JMS, AMQP) Kirill Afanasjev Riga,Latvia
    • 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 :)
    • RPC CORBA, SOAP Web Services, RMI, XML-RPC Synchronous Tight coupling
    • 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
    • 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
    • Disadvantages Extra component in architecture (message transfer agent or message broker) Inter-application communication tend to be synchronous Lack of standarts
    • Point-to-point
    • 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
    • Publish-subscribe
    • 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
    • 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 - ?
    • JMS architecture JMS provider (example : ActiveMQ) JMS clients Messages Administered objects (Destinations and connection factories) Native clients
    • JMS API ConnectionFactory Connection Session Message producer Message producer Destination - Queue - Topic Message
    • JMS API
    • JMS message Header Properties (optional) Body (optional)
    • 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
    • JMS message headers JMSPriority - (Integer) The priority of the message. JMSMessageId JMSTimestamp - (Long) The time the message was sent. JMSReplyTo JMSType JMSRedelivered
    • JMS message delivery modes DeliveryMode.NON_PERSISTENT DeliveryMode.PERSISTENT
    • 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
    • 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
    • Spring JMS support Message-driven POJOs MessageConverter, to convert between Java objects and JMS messages JMSTemplate
    • 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"); } }); }}
    • Receiving message with Spring public class ExampleListener implements MessageListener { public void onMessage(Message message) { if (message instanceof TextMessage) { System.out.println(((TextMessage) message).getText()); } } }
    • 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
    • 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)
    • Why JMS, not AMQP More implementations Better support in Java world Being an API allows for custom protocol implementations (VM connector)
    • 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
    • AMQP protocol Defines how clients and brokers talk Data serialization, heartbeat Hidden inside client libraries
    • 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)
    • AMQP model P - producer X - exchange C - consumer
    • AMQP model P/C – producer/consumer Ch – channel Conn – connection X - exchange
    • AMQP message Header + content body Immediate – message will be handled as unroutable if there is no client waiting for it Expiration Priority Delivery mode
    • 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
    • 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
    • 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
    • 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.
    • AMQP in Java world Grails plug in Java client Scala / Lift support Spring AMQP project 1.0.0.RELEASE (
    • Spring AMQP project Similar to Spring JMS support AMQPTemplate MessageListener Transactions e.t.c
    • Apache QPID JMS interface for AMQP Message broker implemented in Java Version 0.12 :(
    • AMQP future ActiveMQ, HornetQ, e.t.c has plans to support AMQP 1.0 version?
    • RabbitMQ Leading implementation of AMQP Developed by SpringSource division of Vmware Full range of commercial support services Implemented in Erlang Clustering built-in
    • 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
    • Book to read Hohpe, Gregor; Bobby Woolf (2003). Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions. ISBN 0-321-20068-3.
    • Book to read ActiveMQ in Action Bruce Snyder, Dejan Bosanac and Rob Davies ISBN 1933988940
    • Book to read RabbitMQ in Action Alvaro Videla and Jason J.W. Williams ISBN: 9781935182979
    • Questions? ?