Transcript JMS
Java Messaging Service
• Notes prepared from GBC Professional
Development Seminar :Understanding the
Java Messaging Service David Chappell &
Rick Kuzyk, Sonic Software.
Messaging
• Data exchange requirements between
disparate applications
– B2C components (and clients)
•
•
•
•
•
catalogs
order
payment
fulfillment
support
Messaging
• Data exchange requirements between
disparate applications
– B2B components (and clients)
• wholesaleretail
• accounts payable and receivable
– Disconnected users (mobile, handheld)
• package delivery
• maintenance
• web phones
Messaging
• Data exchange requirements between
disparate applications
– B2B components (and clients)
• wholesaleretail
• accounts payable and receivable
– Disconnected users (mobile, handheld)
• package delivery
• maintenance
• web phones
Enterprise Messaging (MOM)
• Message oriented middleware (MOM)
– Asynchronous messaging; sender need not wait
for reply
– decoupled sender and receiver—no direct
communication
– no persistent connection between parties,
including MOM
Enterprise Message vs RPC
Enterprise Messaging
Asynchronous
Tolerates partial failure
Transparent support for
distributed systems
Indirect communication
through MOM
Applications decoupled
RPC
Synchronous (Req/Rpy)
Partial failure can affect
entire application
Best for single, possibly
n-tiered, system
Direct communication
between processes
Applications coupled
Enterprise messaging
Application A
Messaging API
Messaging Clients
Application A
MOM
Messaging API
Messaging Clients
Tightly coupled RPC
n*(n-1)/2 connections
App A
RPC
infrastructure
App B
RPC
infrastructure
App C
RPC
infrastructure
App D
RPC
infrastructure
JMS Messaging
JMS
Client
JMS
Client
JMS
Client
Router
Local "server"
Message
server
JMS
Client
JMS
Client
JMS
Client
JMS
Client
Hub and spoke
JMS
Client
JMS
Client
Local "server"
Local "server"
Decentralized
(IP multicast)
JMS
• JMS Messaging client
– Uses the JMS API to create, send, receive messages
– Interfaces and classes or the API = client runtime
• JMS Message server
– handles deliver of messages sent by clients to other messaging
clients who register an interest
• JMS provider = JMS client runtime + message server.
– supports the JMS API and reliable delivery
• J2EE provides glue that lets certain objects to run as a JMS
messaging client
JMS and J2EE
• These objects can function as JMS
messaging clients via J2EE
–
–
–
–
enterprise beans (EJB)
servlets
JSP pages
J2EE application client
• message-driven bean: an EJB that can
consume JSP messages
J2EE
Client application
EJB Container
Web Container
Application Client
Container
J2EE platform
JMS Server
JDBC Server
JMS Client classes
Connection
Binds a JMS client to a message
server. multiple per client;
associated with either pub/sub or
PTP
Session
Context for sending/receiving
messages; multiple per Connection
Producer
sends messages to Destinations
Destination
identifier for a message
Message
package sent from a producer to a
consumer
JMS Components
JMS Client
JMS Client
Connection
Connection
Session
Session
Message
server
Producer
Consumer
Destination
Message
Message
JMS Components
JMS Client
JMS Client
Producer
Consumer
Bind to
Destination
Bind to
Destination
Message
server
Destination
Send
Message
Consume
Message
JMS Client objects
• Producer
– Binds to a destination to send messages
– Determines message TTL, priority, persistence
• Consumer
– Binds to a destination to receive messages
– Receives messages asynchronously through a
message listener or synchronously by polling
JMS Client objects
• Messages
– Headers
– Property list (some predefined); Consumers can
select on properties
– Body
JMS Message types
Message type
Body
Message
Empty
TextMessage
Java String
ObjectMessage
Serializable Java object
MapMessage
Name/value pairs
StreamMessage
Stream of Java primitives
BytesMessage
Uninterpreted bytes
Messaging Domains
• Publish and subscribe (pub/sub)
– Many consumers per message
– Messages have a topic that identifies the
relation of publisher to subscriber
• Point-to-point (PTP, p2p)
– One consumer per message
– Messages queued. Consumers can browse
queue without consuming
Pub/Sub model
Publisher
Topic
New books
HW
Subscriber
P2P model
Sender
Que
hw9
hw9
Submit
Receiver
hw9
hw9
hw9
A+
A+
Grade
A+
res
PARTY!
res
A+
A+
res
res
res
Connections and sessions
jndi = new InitialCOntext(env);
tFactory =
(TopicConnectionFactory)jndi.lookup("TopicConnectionFactory");
qFactory =
QueueConnectionFactory)jndi.lookup("QueueConnectionFactory");
tConnect = tFactory.createTopicConnection(unsername, password);
qConnect = qFactory.createQueueConnection(unsername, password);
tSession =
tConnect.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
qSession =
qConnect.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
tConnect.start();
qConnect.start();
Destinations
• Pub/sub topics
– May be predetermined by server
– May be created on a server by a JMS client
Topic hw9Topic = tSession.createTopic("hw9");
– May be looked up in a db via Java Naming and
Directory Interface (JNDI)
Topic hw9Topic (Topic)jndi.lookup("hw9");
Destinations
• P2P queues
– Queue must exist in server
Queue hwQ = tSession.createQueue("HW"); // or
Queue hwQ = (Queue) jndi.lookup("HW");
Creating and populating a
message
Queue Session
qSession
qSession.createTextMessage();
Text Message
textMsg
String thisHW="hw9";
textMsg.createContent("GreatJob on" + thisHW);
JMS message headers
• Assigned by system
–
–
–
–
–
–
JMSDestination
JMSDeliveryMode
JMSMessageID
JMSTimestamp
JMSExpiration
JMS Priority
• Assigned by developer
– JMSReplyTo
– JMSCorrelationID
– JMSType
Message properties
• Name/value pairs assigned by application
• Values must be Java primitives
• Setting:
message.setStringProperty("studentName", "Nemo"); //prop
message.setJMSReplyTo(hw9Q); //header
• Can filter on props or headers
javax.jms.QueueReceiver rcvr =
qSession.createReceiver(hw9Q, "JMSPriority > 10");