Những khái niệm cơ bản về JMS (Java Message Service)

Chào mừng các bạn đã trở lại với thachleblog, hôm nay mình sẽ cùng các bạn tìm hiểu một số khái niệm cơ bản của JMS. Nếu các bạn lần đầu nghe về khái niệm JMS thì bài viết này rất thích hợp cho các bạn vì nó sẽ giúp các bạn làm quen với JMS. Đối với các bạn đã có kinh nghiệm về JMS thì có thể đọc  và góp ý giúp mình…

Nào chúng ta cùng bắt đầu nhé.

Trong cuộc sống, để có thể hiểu nhau thì chúng ta cần phải trao đổi thông tin với nhau, chúng ta có thể trao đổi thông tin bằng cách nói chuyện trực tiếp, nói chuyện qua điện thoại, email, chat facebook, skype…

Thì trong phần mềm, các component của chương trình hoặc các chương trình trong một hệ thống cũng cần trao đổi thông tin với nhau để có thể chạy đồng nhất, việc trao đổi thông tin này thông qua message (thông điệp).

Trong Java thì Java cung cấp một API cho phép các ứng dụng Java có thể tạo, gửi, nhận, đọc các message. API này gọi JMS (Java Message Service).

khai niem jms

Hình minh họa trao đổi thông điểm giữa các component trong ứng dụng Java (nguồn internet)

Một số khái niệm của JMS:

JMS Provider
JMS implementations nói chung được gọi là JMS provider. JMS Provider được viết trên chuẩn Java do đó sẽ chạy được trên đa nền tảng (xem lại bài trước)

JMS Client
Là các chương trình độc lập hoặc các components (thành phần) của ứng dụng, được viết bằng Java có khả năng trao đổi message

JMS Message
Là các object dùng để trao đổi giữa các JMS Client

Administered object
Là các JMS object được cấu hình sẵn cho client, có hai loại administered object là destinations và connection factories

JMS message domain
JMS hỗ trợ 2 kiểu trao đổi dữ liệu là P2P (Point to Point) và PubSub (Publisher/Subscriber)
Các kiểu trao đổi thông điệp này gọi là JMS message domain.
Đặc điểm mô hình P2P:
p2p

Hình minh họa cơ chế P2P (nguồn internet)

  • Mỗi message chỉ có 1 consumer (bên nhận)
  • Client1 có thể gửi trước khi client2 start

Đặc điểm mô hình PubSub:PubSub.png

Hình minh họa cơ chế Pub/Sub (nguồn internet)

  • Hệ thống có Queue gọi là topic
  • Mỗi message có thể có nhiều consumer
  • Mỗi Subscriber sẽ chỉ nhận được message từ topic sau khi đã subscription

Đặc điểm của JMS: JMS API cho phép việc trao đổi thông điệp không chỉ loosely coupled (linh động) mà còn:

  • Asynchronous (không đồng bộ): JMS Provider, client có thể gửi và nhận message không đồng bộ
  • Reliable: JMS API có thể đảm bảo một message chỉ được gửi một lần, tránh trường hợp bị mất message hoặc trùng lặp.

Nhược điểm:

JMS sẽ không bao gồm các tính năng:

  • Load Balancing/Fault Tolerance
  • Error/Advisory Notification
  • Administration
  • Security
  • Wire Protocol
  • Message Type Repository

Vì một vài hạn chế của JMS nên đa phần trong các hệ thống distributed sẽ không sử dụng JMS mà sẽ sử dụng các libs được implement dựa trên JMS như Kafka, Zookeeper… các bạn có thể tham khảo thêm. Tuy nhiên, việc nắm được các khái niệm cơ bản của JMS sẽ giúp chúng ta nắm bắt được các third party nhanh chóng hơn.

Vừa rồi là phần trình bày của mình về JMS, rất mong nhận được ý kiến đóng góp của tất cả các bạn và hẹn gặp lại các bạn ở các bài viết sau.

Xin cảm ơn

Tham khảo thêm:
http://docs.oracle.com/javaee/1.3/jms/tutorial/jms_tutorial-1_3_1.pdf
https://www.javacodegeeks.com/2012/07/jms-with-activemq.html

2 thoughts on “Những khái niệm cơ bản về JMS (Java Message Service)

  1. Pingback: Làm quen với Redis – thachleblog | Java Technologies

  2. Pingback: Làm quen với Redis - cài đặt và code minh họa » Thach Le

Tham gia bình luận