Overview
¾ Describe the concepts and
some practical applications
of messaging.
¾ Describe the concepts and
basic structure of JMS.
¾ Write simple JMS messaging
code using the publish and
subscribe and point-to-point
domains.
¾ Discuss advanced JMS issues
such as guaranteed
messaging, transactions,
reliability, and recovery.
Part 1: Enterprise Messaging
and JMS
Enterprise messaging
Application A Application B
Message-
Messaging API Messaging API
Oriented
Messaging Clients Middleware Messaging Clients
Tightly Coupled RPC
Business Business
Application A Application B
RPC RPC
Client/Server Client/Server
Business Business
Application D Application C
Requires n * (n-1) / 2
RPC connections RPC
Client/Server Client/Server
JMS messaging
Centralized message server Decentralized message server
(hub and spoke) (IP multicast)
JMS Application A
Client JMS
JMS Router
JMS Client
Client Client
Local "server"
Message
Server Local "server" Local "server" Local "server"
JMS JMS JMS JMS JMS
Client Client Client Client Client
JMS Application B Application C Application D
Client
The J2EE platform
Client
Application
J2EE Platform
Application
EJB Web
Client
Container Container
Container
JMS
Server JDBC
Database
Part 2: JMS Concepts and
Coding
Wholesaler and retailer
Retailer 1
Update price
(publish) Message
Wholesaler Server Order product
(send)
Retailer 2
JMS features
¾ Standard Java API
¾ Message delivery modes
¾ Two messaging models
¾ Transactions
¾ Reliability levels
¾ Persistent messaging
JMS messaging domains
Publish and subscribe
¾ Many consumers per message
Point-to-point
¾ One consumer per message
Publish and subscribe: Supply chain
management
Publisher Topic Subscriber
Point-to-point: Order and fulfillment
Sender Queue Receiver
Need Supplies
Goods Shipped
JMS components
JMS Client JMS Client
Connection Connection
Session Session
Producer Message Consumer
Server
Message Destination Message
Connections and sessions
JMS Client ¾ A connection connects
Connection to a message server.
Session ¾ You can create one or
more sessions within a
Session
connection.
Session
Creating connections and sessions
JMS Client
ConnectionFactory
create
JNDI Store
Message
Connection
Server
ConnectionFactories Session
Destinations
Session
Session
JMS message types
Message type Message body
Message No body
TextMessage A standard Java string
ObjectMessage A serializable Java object
A set of name/value pairs where values are Java
MapMessage
primitives
StreamMessage A stream of Java primitives
BytesMessage A stream of uninterpreted bytes
Creating a message
TopicSession
createStreamMessage( ); QueueSession
StreamMessage createTextMessage( );
TextMessage
JMS message headers
Automatically Developer-assigned
assigned headers headers
¾ JMSDestination ¾ JMSReplyTo
¾ JMSDeliveryMode ¾ JMSCorrelationID
¾ JMSMessageID ¾ JMSType
¾ JMSTimestamp
¾ JMSExpiration
¾ JMSRedelivered
¾ JMSPriority
Producers, consumers, and destinations
Producer Consumer
Bind to Bind to Read
destination destination message
Message
Send Server Consume
message message
Destination
Creating destinations
JMS Client
JNDI Store
Topic Message
ConnectionFactories Server
Destinations lookup
Queue
Producing a message
Session create message
create Message Destination
MessageProducer
produce message
Consuming messages
Incoming messages
MessageListener
onMessage(message);
acknowledge
Message
Server Incoming messages
MessageConsumer
Message receive();
acknowledge
Asynchronous message delivery
MessageListener
Message onMessage(message);
Server Incoming messages
acknowledge
Using receive( )
MessageConsumer
Message Message receive();
Server Incoming messages
acknowledge
Filtering with message selector
Publisher
Departments.Sales
JMSPriority = 2
Pipeline = 20000
not
Subscriber delivered
delivered Subscriber
Message Departments.Sales
Departments.Sales
Pipeline > 15000 Server Pipeline > 20000
not delivered delivered
Subscriber Subscriber
Departments.Sales Departments.Sales
JMSPriority > 5 JMSPriority >= 2 AND Pipeline > 10000
Browsing a queue
Message1
QueueBrowser
Message2
getEnumeration();
Message3
Enumeration
nextElement();
Message4
Accessing message content
get<type>(Name); Message
MapMessage TextMessage ObjectMessage StreamMessage BytesMessage
getText(); getObject(); read<type>();
Part 3: Guaranteed
messaging
Guaranteeing message delivery
Durable
PERSISTENT message
Subscriber
Message Or
Producer QueueReceiver
Server
Acknowledge
message
Persistent store
Message removed
after acknowledgment
Persistent and non-persistent messages
Message Non-persistent message
Server not guaranteed to
survive provider failure
Persistent message
guaranteed to survive
provider failure Persistent store
Acknowledgement modes
Consumer Server
It might be easy for
you to tell me that
I got another for every message,
AUTO message! but you are using a
lot of bandwidth.
I received all
messages up Where have you been? I
CLIENT have been waiting to
to this point.
delete 50 messages.
Okay, I might seem “lazy” to
When you are lazy like
DUPS_OK you, but it is not important to
this, I might have to
me if there are some duplicates.
deliver some messages
more than once.
Durable subscribers
Durable
PERSISTENT message Subscriber1
(connected)
Message
Publisher
Server
Durable
Subscriber2
Undelivered messages Persistent store (not
delivered to Subscriber2 connected)
when reconnected
Redelivered messages
Before message server receives acknowledgement:
¾Message server has failed and restarted
OR
¾Consumer has failed and restarted
Message Consumer
Server
JMSRedelivered=true
Part 4: Transactions and recovery
Transacted session: Producer
Before commit( )
Message
Producer Server
Transacted
session
Upon commit( )
Message
Server
Consumer
Transacted session: Consumer
Before commit( )
Message 1
Server Consumer 2
Deliver messages
Consume
messages
Upon commit( )
Message
Acknowledge 1 Consumer
2 Server
messages
Delete
messages if all
recipients have
acknowledged
Distributed transaction support
JMS Client
XAConnectionFactory
create
JNDI Store
Message
XAConnection
Server
ConnectionFactories XASession
Destinations
XASession
XASession
Recovering from a lost
connection
Client runtime
ExceptionListener
Message
Server
onException()
Reconnect
Understanding the Java
Message Service: Conclusion