JMS Tutorial
JMS Tutorial
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
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
Need Supplies
Goods Shipped
JMS components
Connection Connection
Session Session
JMS Client
ConnectionFactory
create
JNDI Store
Message
Connection
Server
ConnectionFactories Session
Destinations
Session
Session
JMS message types
Message No body
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
Message
Send Server Consume
message message
Destination
Creating destinations
JMS Client
JNDI Store
Topic Message
ConnectionFactories Server
Destinations lookup
Queue
Producing a message
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
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
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
Durable
PERSISTENT message
Subscriber
Message Or
Producer QueueReceiver
Server
Acknowledge
message
Persistent store
Message removed
after acknowledgment
Persistent and non-persistent messages
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.
Durable
PERSISTENT message Subscriber1
(connected)
Message
Publisher
Server
Durable
Subscriber2
Undelivered messages Persistent store (not
delivered to Subscriber2 connected)
when reconnected
Redelivered messages
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