One day Minnie was walking down a street in Paris when she heard Mickey calling her
Mickey – Hey Minnie, wait!
Minnie – Hi Mickey, what happened
Mickey – I need to talk to you
Minnie – Yes tell me
Mickey – Do you know about JMS
Minnie – Yes I know
Mickey – Can you explain this to me in very simple language from scratch
Minnie – Mickey lets go to the Eiffel Tower and I will tell you a story
Mickey – Great! Let’s Go
(Mickey and Minnie at Eiffel Tower)
Mickey – It feels so good here
Minnie – I know
Mickey – So shall we start
Minnie – Yes to start with JMS = Java Messaging Service
Mickey – I know that
Minnie – JMS is an API that provides the facility to create, send and read messages
Mickey – I do not get this. Why and where is this used? Start from scratch
Minnie – Okay so let us first understand Messaging
Mickey – Okay
Minnie – Messaging is a process to communicate between applications. JMS is used to send and receive messages from one application to another
Mickey – Okay, I got that JMS is used for communication between applications, but why do we need this in the first place
Minnie – Today we use distributed application development. So when you see a product like a website, at the backend there are multiple components or apps working together. Now there needs to be a process of communication between these elements or applications. JMS provides this feature
Mickey – I am getting this
Minnie – And JMS follows the asynchronous method of communication
Mickey – Now what is this new term
Minnie – Okay let us understand Synchronous and Asynchronous method
Mickey – Yes, please
Minnie – Suppose you are working on your computer. You need to take a print. You will give print command. The printer will inform you that printing is in process and you can continue working on other things, while the printing is in process. Once done you will get a message that your document is printed
Mickey – Yes I know this
Minnie – So this is the Asynchronous method. Here the response is sent to the user before the execution completes. This is very useful in long-running background processes. As the response is sent about the status of the process, the user can perform other tasks, while the process is in progress.
Synchronous means things are getting done in sequential order. This means if one process is going on, another one won’t start unless the already running process is finished.
In Synchronous method, the response is sent only after completion of the process
Mickey – Great! Give me a real example
Minnie – Have you noticed, sometimes while browsing, if some request is stuck or not completed, the browser becomes unresponsive and you cannot proceed.
Mickey – Yeah, that used to happen a lot earlier
Minnie – Yes, so that was the classic web application model, that was Synchronous but today we use technologies like AJAX to overcome this
Mickey – So AJAX is asynchronous
Minnie – Yes, but more on that some other day. Let’s focus on JMS today
Mickey – yeah, So I got that JMS is a messaging service for communication between applications and uses the asynchronous method for communication
Minnie – Great
Mickey – But where does this come from. Is it a separate software or application
Minnie – JMS is part of Java EE. So if you have Java Enterprise Edition on your system, you have JMS
Mickey – Okay
Minnie – So it is an API in Java and allows to create, send, receive, and read messages
Mickey – Now how does this message or data of communication look like
Minnie – It can be a text, XML document, JSON data or an Entity (Java Object), etc
Mickey – So is JMS API used to implement Messaging systems in Java-based applications only?
Minnie – That is right
Mickey – Okay Minnie before we go further let me tell you my understanding
- JMS stands for Java Messaging Service
- It is an API included in the Java EE package
- It is used for communication between applications
- It uses Asynchronous method of communication
- Can be used for Java applications only
Minnie – Wow, you summarised well and to add to this
JMS can perform the following tasks
- Create message
- Send message
- Receive message
- Read message
Mickey – Thanks Minnie
Minnie – Now there are to types or model of JMS
- Point-to-point
- Publish/Subscribe
Point-to-point
In the point-to-point message bean, we have one sender and one receiver. It is like a personal chat on mobile, but this messaging is between components. When the sender sends a message, if there is more than one message, then it has to wait in the queue. Once it reaches a receiver, a receiver can consume it and acknowledge it
- There is only one client for each message.
- There is no timing dependency for the sender and receiver of a message.
- The receiver can fetch the message whether it is running or not when the sender sends the message.
- The receiver sends the acknowledgment after receiving the message.
- Queue is used as message-oriented middleware (MOM)
Publish/Subscriber (One-to-Many)
In Pub/Sub model, one message is delivered to all the subscribers. It is like broadcasting.
Publish/subscriber is like Netflix. With Netflix, we have one provider (sender) and many consumers (receiver). Many users can subscribe to Netflix and watch a T.V. show or movie uploaded by Netflix. This is the same way as with the publish/ subscriber; the first component needs to subscribe. After subscribing, the component can consume and acknowledge messages. If there is more than one message, then it has to wait on a topic
- There can be multiple subscribers for a message.
- The publisher and subscribe have a timing dependency. A client that subscribes to a topic can consume only messages published after the client has created a subscription, and the subscriber must continue to be active in order for it to consume messages.
- Topic is used as a message-oriented middleware that is responsible to hold and deliver messages.
Mickey – Great to know this
Minnie – Do you want to go home now
Mickey – No Minnie let us sit here and watch the sunset
Minnie – Sure
Mickey – Thanks, I feel so good now
Minnie – I am always here for you 🙂
about the author | more stories
References
https://www.javatpoint.com/jms-tutorial
https://dzone.com/articles/java-message-service-1
https://howtodoinjava.com/jms/jms-java-message-service-tutorial/#need
https://www.cavisson.com/netstorm-java-messaging-service/