You are on page 1of 39

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 MessageOriented Middleware

Application B

Messaging API Messaging Clients

Messaging API Messaging Clients

Tightly Coupled RPC


Business Application A
RPC Client/Server

Business Application B
RPC Client/Server

Business Application D
RPC Client/Server

Requires n * (n-1) / 2 connections

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

Decentralized message server (IP multicast)


Application A JMS Client Local "server" Local "server" JMS Client Application B Local "server" JMS Client Application C Local "server" JMS Client Application D Router

The J2EE platform


Client Application

J2EE Platform Application Client Container

EJB Container

Web Container

JMS Server

JDBC Database

Part 2: JMS Concepts and Coding

Wholesaler and retailer

Retailer 1
Update price (publish)

Wholesaler

Message 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 Connection Session Producer

JMS Client Connection Session

Message Server
Message Destination Message

Consumer

Connections and sessions

JMS Client Connection Session Session Session

A connection connects to a message server. You can create one or more sessions within a connection.

Creating connections and sessions


JMS Client ConnectionFactory
create JNDI Store

Connection
ConnectionFactories Destinations

Message Server

Session Session Session

JMS message types

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

JMS message headers

Automatically assigned headers


JMSDestination JMSDeliveryMode JMSMessageID JMSTimestamp JMSExpiration JMSRedelivered JMSPriority

Developer-assigned headers
JMSReplyTo JMSCorrelationID JMSType

Producers, consumers, and destinations

Producer
Bind to destination Bind to destination

Consumer
Read message

Send message

Message Server
Destination

Consume message

Creating destinations

JNDI Store
ConnectionFactories Destinations

JMS Client Topic


lookup

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

Asynchronous message delivery

MessageListener Message Server


onMessage(message); Incoming messages

acknowledge

Using receive( )

MessageConsumer Message Server


Message receive(); Incoming messages

acknowledge

Filtering with message selector


Publisher
Departments.Sales

JMSPriority = 2 Pipeline = 20000

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

Accessing message content

get<type>(Name);

Message

MapMessage

TextMessage getText();

ObjectMessage

StreamMessage

BytesMessage

getObject();

read<type>();

Part 3: Guaranteed messaging

Guaranteeing message delivery

PERSISTENT message

Producer

Message Server

Durable Subscriber Or QueueReceiver


Acknowledge message

Persistent store

Message removed after acknowledgment

Persistent and non-persistent messages

Message Server

Non-persistent message not guaranteed to survive provider failure

Persistent message guaranteed to survive provider failure

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

I received all messages up to this point.

Where have you been? I have been waiting to delete 50 messages.

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

Message Server Durable Subscriber2 (not connected)

Undelivered messages delivered to Subscriber2 when reconnected

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

Part 4: Transactions and recovery

Transacted session: Producer Before commit( )


Producer
Transacted session

Message Server

Upon commit( )
Message Server Consumer

Transacted session: Consumer Before commit( )


Message Server 1
Deliver messages

Consumer

2
Consume messages

Upon commit( )
2 Message Server
Acknowledge messages

Consumer

Delete messages if all recipients have acknowledged

Distributed transaction support


JMS Client XAConnectionFactory
create JNDI Store

XAConnection
ConnectionFactories Destinations

Message Server

XASession XASession XASession

Recovering from a lost connection

Client runtime Message Server Reconnect ExceptionListener

onException()

Understanding the Java Message Service: Conclusion

You might also like