Vous êtes sur la page 1sur 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 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

Vous aimerez peut-être aussi