Professional Documents
Culture Documents
JMS Tutorial
JMS Tutorial
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.
Enterprise messaging
Application B
Business Application B
RPC Client/Server
Business Application D
RPC Client/Server
Business Application C
RPC Client/Server
JMS messaging
Centralized message server (hub and spoke)
JMS Client JMS Client Message Server JMS Client JMS Client JMS Client JMS Client
EJB Container
Web Container
JMS Server
JDBC Database
Retailer 1
Update price (publish)
Wholesaler
Message Server
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
Need Supplies
Goods Shipped
JMS components
Message Server
Message Destination Message
Consumer
A connection connects to a message server. You can create one or more sessions within a connection.
Connection
ConnectionFactories Destinations
Message Server
Message type
Message TextMessage ObjectMessage MapMessage StreamMessage BytesMessage
Message body
No body A standard Java string A serializable Java object A set of name/value pairs where values are Java primitives A stream of Java primitives A stream of uninterpreted bytes
Creating a message
TopicSession
createStreamMessage( );
QueueSession
createTextMessage( );
StreamMessage
TextMessage
Developer-assigned headers
JMSReplyTo JMSCorrelationID JMSType
Producer
Bind to destination Bind to destination
Consumer
Read message
Send message
Message Server
Destination
Consume message
Creating destinations
JNDI Store
ConnectionFactories Destinations
Message Server
Queue
Producing a message
Session
create
create message
Message
Destination
MessageProducer
produce message
Consuming messages
Incoming messages
MessageListener
onMessage(message); acknowledge Incoming messages
Message Server
MessageConsumer
Message receive(); acknowledge
acknowledge
Using receive( )
acknowledge
Subscriber
Departments.Sales Pipeline > 15000
delivered
Message Server
not delivered
Subscriber
Departments.Sales Pipeline > 20000
not delivered
delivered
Subscriber
Departments.Sales JMSPriority > 5
Subscriber
Departments.Sales JMSPriority >= 2 AND Pipeline > 10000
Browsing a queue
Message1 Message2 Message3
nextElement();
QueueBrowser
getEnumeration();
Enumeration
Message4
get<type>(Name);
Message
MapMessage
TextMessage getText();
ObjectMessage
StreamMessage
BytesMessage
getObject();
read<type>();
PERSISTENT message
Producer
Message Server
Persistent store
Message Server
Persistent store
Acknowledgement modes
Consumer
I got another message!
Server
AUTO
It might be easy for you to tell me that for every message, but you are using a lot of bandwidth.
CLIENT
DUPS_OK
Okay, I might seem lazy to you, but it is not important to me if there are some duplicates.
When you are lazy like this, I might have to deliver some messages more than once.
Durable subscribers
Durable Subscriber1 (connected)
PERSISTENT message
Publisher
Persistent store
Redelivered messages Before message server receives acknowledgement: Message server has failed and restarted OR Consumer has failed and restarted
Message Server
Consumer
JMSRedelivered=true
Message Server
Upon commit( )
Message Server Consumer
Consumer
2
Consume messages
Upon commit( )
2 Message Server
Acknowledge messages
Consumer
XAConnection
ConnectionFactories Destinations
Message Server
onException()