Giới thiệu JMS – Java Message Services

Chúng tôi vui mừng chia sẻ kiến thức về từ khóa Jms la gi để tối ưu hóa nội dung trang web và chiến dịch tiếp thị trực tuyến. Bài viết cung cấp phương pháp tìm kiếm, phân tích và lựa chọn từ khóa phù hợp, cùng với chiến lược và công cụ hữu ích. Hy vọng thông tin này sẽ giúp bạn xây dựng chiến lược thành công và thu hút lưu lượng người dùng. Cảm ơn sự quan tâm và hãy tiếp tục theo dõi blog để cập nhật kiến thức mới nhất.

Nội dung bài viết được sự được cho phép của tác giả Giang Phan

Bạn Đang Xem: Giới thiệu JMS – Java Message Services

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

Trong phần mềm, các component của Khóa học hoặc các Khóa học trong một khối hệ thống cũng cần phải trao đổi thông tin với nhau để sở hữu thể chạy đồng nhất, việc trao đổi thông tin này thông qua message (tin nhắn).

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

Tìm việc làm Java tiên tiến nhất lương up to 2000 USD

Giới thiệu JMS

Message là gì?

Message (Tin nhắn) là một phần thông tin. Nó có thể là một text, XML, JSON hoặc một Entity (đối tượng người tiêu dùng Java), … Message là tài liệu rất hữu ích để giao tiếp giữa các khối hệ thống khác nhau.

Messaging là gì?

Messaging (nhắn tin) là việc trao đổi thông tin giữa các thành phần khác nhau trong cùng một khối hệ thống hoặc các khối hệ thống khác nhau. Nó có thể xẩy ra Theo phong cách đồng bộ hoặc không đồng bộ.

Ưu điểm của nhắn tin là khả năng tích hợp các nền tảng khác nhau, làm giảm ùn tắc khối hệ thống, tăng cường khả năng mở rộng và nâng cao độ tin cậy gửi nhận tin.

Có 2 mô hình nhắn tin: P2P (Point to Point) và Pub/Sub (Publisher/ Subscriber).

JMS là gì?

Java Message Service (JMS) API là một phần của đặc tả kỹ thuật Java Enterprice Edition (Java EE), là một API trung gian hướng thông tin Java (MOM) để gửi tin nhắn nhắn giữa hai hoặc nhiều client.

JMS mô tả các phương thức tạo bởi Khóa học Java cho việc: tạo (Create), gửi (Send), nhận (Receive), đọc (Read) tin nhắn.

JMS được cho phép giao tiếp giữa các thành phần khác nhau của một ứng dụng phân tán được kết nối lỏng lẻo, đáng tin cậy và tương trợ dị đồng bộ.

Giao tiếp giữa các client được tạo ra bởi message broker qua các tiêu chuẩn truyền tin dị đồng bộ như AMQP, MQTT.

Xem Thêm : Fellow là gì ? – Tuan V. Nguyen

JMS API là triển khai để xử lý vấn đề nhà sản xuất-người tiêu dùng.

JMS gồm có 2 thành phần:

  • API : tương trợ chức năng cho tất cả những người phát triển phần mềm.
  • SPI (Service Provider Interface) : được cho phép các Provider tạo ra tool JMS tích hợp, định hướng cho mọi người sử dụng theo phía chuẩn hóa.

Giới thiệu JMS - Java Message Services

Khi tất cả chúng ta phát triển Khối hệ thống nhắn tin Java với JMS API, thì tất cả chúng ta có thể triển khai cùng một ứng dụng trong bất kỳ JMS Provider software nào.

MOM là gì?

MOM (Message-oriented middleware hay MQ – Message Queue) là một ứng dụng trung gian tương trợ gửi và nhận tin nhắn trong các ứng dụng phân tán.

Cơ chế MOM tương tự như database với việc nhận và gửi message, đảm bảo toàn vẹn tài liệu, transaction và cân bằng cho việc gửi nhận tài liệu.

Nơi lưu trữ tài liệu và tương tác với MOM mang tên gọi là Destination.

Một số MOM tiêu biểu:

# JMS PROVIDER ORGANIZATION 1. WebSphere MQ IBM 2. Weblogic Messaging Oracle Corporation 3. Active MQ Apache Foundation 4. Rabbit MQ Rabbit Technologies(acquired by Spring Source) 5. HornetQ JBoss 6. Sonic MQ Progress Software 7. TIBCO EMS TIBCO 8. Open MQ Oracle Corporation 9. SonicMQ Aurea Software

JMS Broker

Để gửi hoặc nhận tin nhắn, trước tiên, JMS Client phải kết nối với JMS message server (còn gọi là JMS Broker – nhà môi giới):

  • Một Connection mở ra một kênh liên lạc giữa client và broker.
  • Tiếp theo, client phải thiết lập một session để tạo, tạo và đọc tin nhắn. Chúng ta cũng có thể nghĩ về session như một luồng thông tin xác định cho một cuộc trò chuyện cụ thể giữa client và broker. Bản thân client là producer hoặc consumer.
  • Transaction được tạo bởi client là transaction giữa producer và broker hoặc giữa broker và consumer, nhưng không bao giờ giữa producer và consumer.
  • Producer gửi tin nhắn nhắn đến destination (đích) mà broker quản lý. Consumer truy cập destination đó để lấy tin nhắn.
  • Tin nhắn gồm có header (tiêu đề), optional properties (tính chất), và body toàn thân (nội dung). Toàn thân chứa tài liệu, header chứa thông tin broker cần định tuyến và quản lý tin nhắn và các tính chất có thể được xác định bởi các ứng dụng client hoặc bởi provider để phục vụ nhu cầu của chính họ trong việc xử lý tin nhắn.
  • Connection, Session, Destination, Message, Producer và Consumer là những đối tượng người tiêu dùng cơ bản tạo nên một ứng dụng JMS.

Giới thiệu JMS - Java Message Services

Các thành phần của JMS

  • JMS Provider :
    • JMS API là một tập hợp các interface, không chứa bất kỳ implementation nào. JMS Provider là một khối hệ thống bên thứ ba, chịu trách nhiệm implement JMS API để cung cấp các tính năng nhắn tin cho khách hàng.
    • JMS Provider còn được gọi là phần mềm MOM. JMS Provider cũng cung cấp một số thành phần UI để quản trị và kiểm soát phần mềm MOM này.
    • JMS Provider được viết trên chuẩn Java do này sẽ chạy được trên đa nền tảng.
  • JMS Client : Là các Khóa học độ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 producer/ publisher : là JMS client tạo và gửi tin nhắn nhắn.
    • JMS consumer/ subscriber : là JMS client nhận tin nhắn.
  • JMS Message : Là các object, định dạng trung gian chứa data để giao tiếp giữa JMS Client và Provider.
  • Administered object : tương trợ cơ chế quản lý và cấu hình cho JMS Object. Gồm có:
    • ConnectionFactory Object: được sử dụng để tạo kết nối giữa ứng dụng Java và JMS Provider. Tương tự như khái niệm truy cập DataSource của kết nối tài liệu.
    • Destination Object: là nơi lưu trữ cho message, là đối tượng người tiêu dùng JMS được JMS Client sử dụng để chỉ định đích của tin nhắn mà nó đang gửi và nguồn tin nhắn mà nó nhận được. Có hai loại Destination: Queue and Topic.
      • JMS Queue : Khu vực chứa các tin nhắn đã được gửi và đang chờ để đọc (chỉ bởi một consumer). Hàng đợi này đảm bảo các tin nhắn được trao theo trật tự gửi và mỗi tin nhắn chỉ được xử lý một lần.
      • JMS Topic : Một cơ chế phân phối để publisher gửi tin nhắn nhắn đến nhiều người đăng ký (subscriber).

Cơ chế giao tiếp JMS

JMS cung cấp cơ chế giao tiếp gồm có:

  • Asynchronous: JMS tự động hóa chuyển message đến người nhận khi message đến.
  • Reliable: một message chỉ được chuyển đến đúng một người nhận mà không có cơ chế nhân văn, do vậy, tín hiệu phản hồi hoàn thành nhận message từ người nhận sẽ gây nên nên xóa sổ thông tin trên middleware object.

Các mô hình JMS

JMS tương trợ 2 mô hình trao đổi tài liệu là P2P (Point to Point) và Pub/Sub (Publisher/ Subscriber). Các mô hình trao đổi này gọi là JMS message domain.

P2P (Point to Point)

Giới thiệu JMS - Java Message Services

  • Có ba thành phần đây là ứng dụng gửi (sender), Queue, ứng dụng nhận (receiver) tin.
  • Sử dụng Queue làm nơi lưu trữ. Queue giữ lại các tin nhắn cho đến lúc client nhận hoặc đến thời kì timout thiết lập.
  • Khái niệm 02 đối tượng người tiêu dùng cho việc gửi và nhận, đó là sender và receiver, và chỉ có một người gửi và một người nhận tin nhắn.
  • Mô hình này message chuyển đi tuần tự (FIFO).
  • Mô hình được cho phép người nhận không cần active tại thời khắc gửi message.
  • Sử dụng tín hiệu acknowledge để kích hoạt cho việc nhận message ở người nhận hoàn thành.
  • Mô hình có tính bảo mật thông tin cao do một người gửi và một người nhận nhưng đôi lúc làm khối hệ thống bị block lại do chờ message đến.

Pub/ Sub (Publisher/ Subscriber)

Xem Thêm : 3 cách khắc phục lỗi điện thoại Samsung bị treo Recovery

Giới thiệu JMS - Java Message Services

  • Cũng luôn tồn tại ba thành phần đây là phía gửi (sender), Topic, và phía nhận (receiver).
  • Mô hình sử dụng Topic làm nơi lưu trữ. Topic thực chất cũng là dạng queue nhưng có nhiều hơn một queue với những queue có đánh độ ưu tiên khác nhau.
  • Mô hình được cho phép 1 người gửi và nhiều người nhận do vậy đối tượng người tiêu dùng được khái niệm là Publisher và Subcriber.
  • Topic sẽ lưu lại toàn bộ tin nhắn mà không mất đi cho đến lúc MOM được reset, hay xóa.
  • Mỗi Subscriber sẽ chỉ nhận được message từ topic sau khoản thời gian đã subscription.
  • Không cần sử dụng thông tin acknowledge và message được chuyển đến những subscriber chỉ là bản copy.
  • Mô hình bảo mật thông tin không tốt do gửi nhiều người nhận nhưng được ưu điểm đó là ứng dụng tiện lợi cho khối hệ thống phân tán.
  • Mô hình Pub/Sub yên cầu đối tượng người tiêu dùng nhận phải active hay listener tại thời khắc gửi nhận message, nếu không message sẽ mất đi (non-durable). Do vậy, để message vẫn không mất đi nhưng được lưu trữ tạm thời trong MOM và được cho phép người dùng truy cập vào MOM với tính xác thực thì chức năng durable phải được kích hoạt.

Cơ chế gửi nhận message trong JMS được chia thành hai thành phần:

  • Synchronous: đối tượng người tiêu dùng nhận và gửi message thông qua thực hiện phương thức receive và phương thức này giữ ứng dụng mong chờ cho đến lúc message tới.
  • Asynchronous: đối tượng người tiêu dùng nhận nên cần phải đăng ký cơ chế lắng tai MessageListener để tiếp nhận message và phương thức được kích hoạt là onMessage để tiếp nhận và xử lý message.

Ưu điểm của JMS

  • Reliability (Độ tin cậy) : Tin nhắn trung gian (Messaging middleware) đảm bảo tin nhắc được phân phối đến người nhận (receiver). Nếu người nhận ngừng hoạt động vì một số lý do, khối hệ thống nhắn tin sẽ lưu trữ tin nhắn cho đến lúc nó hoạt động trở lại. Đả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.
  • Asynchronous (Dị đồng bộ) : JMS Provider, client có thể gửi và nhận message không đồng bộ. Tức thị người gửi và người nhận không cần chờ nhau.
  • Ease of Integration (dễ tích hợp) : Nhiều ứng dụng có thể được viết bằng các tiếng nói lập trình khác nhau hoặc chạy trên các sever khác nhau. Miễn sao chúng sử dụng cùng một giao thức, một phần mềm trung gian nhắn tin có thể được sử dụng để thiết lập liên lạc giữa chúng.
  • Scalability (Khả năng mở rộng): Khối hệ thống nhắn tin giúp truyền bá tin nhắn đến nhiều receiver, giúp mở rộng.
  • Flexibility (Tính linh hoạt) : có thể gán các giao thức khác nhau cho những tin nhắn khác nhau, được cho phép ta linh hoạt trong việc thiết kế kiến trúc của mình.
  • Loosely coupled (Kết nối lỏng lẻo) :
    • JMS API là đặc tả kỹ thuật nên được triển khai bởi tất cả những JMS Provider. Vì vậy tất cả chúng ta có thể thay đổi Provider ngày nay sang Provider mới với ít thay đổi (có tức thị chỉ cấu hình) hoặc không thay đổi mã ứng dụng JMS.
    • Tách biệt người gửi và người nhận, và người truyền tin trung gian sẽ lưu tin nhắn đến khi người nhận có thể xử lý.
  • Interoperability (Khả năng tương tác) : JMS API được cho phép khả năng tương tác giữa các tiếng nói nền tảng Java khác ví như Scala và Groovy.

Nhược điểm JMS

JMS sẽ không còn gồm có các tính năng sau, bởi vì JMS chỉ là khối hệ thống gởi nhận tin:

  • 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 khối hệ thống distributed sẽ không còn sử dụng JMS mà sẽ sử dụng các libs được implement dựa trên JMS như Kafka, Zookeeper… các chúng ta cũng có thể tham khảo thêm. Tuy nhiên, việc nắm được những khái niệm cơ bản của JMS sẽ giúp tất cả chúng ta nắm bắt được những third party nhanh chóng hơn.

JMS vs Socket

Ưu điểm của JMS:

  • Người gửi và người nhận không cần hiểu rõ nhau.
  • Có thể dễ dàng đăng ký và hủy đăng ký
  • Hữu ích cho việc lưu trữ thông tin offline và update số lượng lớn. Vì vậy, người nhận có thể xử lý từng cái một.
  • Người gửi / người nhận có thể thao tác dị đồng bộ.

Ưu điểm Socket:

  • Socket cung cấp một kết nối trực tiếp.
  • Độ trễ thấp, vì không có sever ở giữa (không có MoM)
  • Socket hoạt động ở lớp TCP để truyền tài liệu thấp hơn.

Trường hợp sử dụng JMS?

Một số trường hợp có thể sử dụng JMS:

  • Mong muốn các thành phần không phụ thuộc vào thông tin về interface của những thành phần khác, vì vậy các thành phần có thể dễ dàng thay thế.
  • Muốn ứng dụng chạy cho dù tất cả những thành phần có hoạt động hay là không.
  • Ứng dụng được cho phép một thành phần gửi thông tin cho tất cả những người khác và tiếp tục hoạt động mà không cần chờ nhận được phản hồi ngay tức khắc.

AMQP là gì?

Giới thiệu JMS - Java Message Services

AMQP (Advanced Message Queuing Protocol – Giao thức xếp hàng tin nhắn nâng cao) là một giao thức internet mở và được chuẩn hóa để cho phần mềm trung gian hướng thông tin (MOM) truyền message tin cậy giữa các ứng dụng hoặc tổ chức. Các tính năng xác định của AMQP là định hướng tin nhắn, xếp hàng, định tuyến (gồm có cả P2P và Publisher/Subscriber), độ tin cậy và bảo mật thông tin.

AMQP giúp các developer xây dựng một hệ sinh thái xanh tin nhắn đồng nhất, đa dạng, kết nối các khối hệ thống một cách tương tác và hợp tác.

AMQP thường được so sánh với JMS (Java Message Service), khối hệ thống nhắn tin phổ thông nhất trong cộng đồng Java. Một hạn chế của JMS là các API được chỉ định, nhưng định dạng thông tin thì không. AMQP là một giao thức, nó mô tả về định dạng của tài liệu được gửi qua mạng dưới dạng luồng byte tài liệu truyền được chỉ định. Đặc tính này được cho phép các thư viện được viết bằng nhiều tiếng nói và chạy trên nhiều hệ điều hành và kiến ​​trúc CPU, tạo nên một tiêu chuẩn nhắn tin đa nền tảng, có thể tương tác thực sự.

Một số điều quan trọng cần nhớ:

  • AMQP là một giao thức nhắn tin, không triển khai JMS API.
  • JMS là API và AMQP là một giao thức. Vì vậy, không có nghĩa gì khi nói rằng giao thức mặc định của JMS là gì, tất nhiên các ứng dụng client sử dụng HTTP/ HTTPS làm giao thức kết nối khi gọi Web Service.
  • JMS chỉ là một đặc tả API. Nó không sử dụng bất kỳ giao thức nào. JMS Provider như ActiveMQ có thể đang sử dụng bất kỳ giao thức cơ bản nào để làm JMS Transport cho JMS API, chẳng hạn: AMQP, MQTT, OpenWire, REST (HTTP), RSS và Atom, Stomp, …

Trong bài này, tất cả chúng ta đã tìm hiểu các khái niệm quan trọng của JMS. Trong các nội dung bài viết tiếp theo, tất cả chúng ta sẽ cùng hiểu hiểu về phong thái thiết lập và sử dụng JMS thông qua một số JMS Provider như Active MQ, Rabbit MQ, …

Tài liệu tham khảo:

  • https://docs.oracle.com/javaee/7/tutorial/jms-concepts.htm
  • https://docs.oracle.com/cd/E19879-01/821-0028/6nl41ccpj/index.html

You May Also Like

About the Author: v1000