38 Trong tất cả các hệ thống gởi nhận thông điệp hiện đại, các ứng dụng trao đổi thông tin thông qua kênh ảo được gọi là các điểm đến (destination). Khi tin nhắn được gửi đi, nó được gửi đến một điểm đến (ví dụ như queue hoặc topic), không phải là một ứng dụng cụ thể. Bất kỳ ứng dụng nào đăng ký “quan tâm” đến điểm đến cũng có thể nhận được thông báo. Bằng cách này, các ứng dụng nhận tin nhắn và các ứng dụng gửi tin nhắn được tách riêng. Bên gửi và bên nhận không bị ràng buộc với nhau trong bất kỳ hoàn cảnh nào và có thể gửi và nhận thông điệp theo bất kỳ cách nào phù hợp.
Hay nói một cách khác gởi nhận thông điệp (messaging) là cách thức để giao tiếp giữa các thành phần phần mềm hoặc các ứng dụng. Một hệ thống gởi nhận thông điệp là một mô hình thông tin ngang hàng (peer-to-peer). Một máy khách có thể gởi thông điệp đi và nhận thông điệp về từ bất kì máy khách nào. Từng máy khách kết nối tới một agent cung cấp công cụ truyền thông để tạo, gởi,nhận và đọc thông điệp.
Ngoài ra, gởi nhận thông điệp cho phép truyền thông phân tán. Một thành phần có thể gửi một thông điệp cho một đích (destination), và bên nhận có thể thu được thông điệp này từ đích. Tuy nhiên, bên gửi và bên nhận không cần sẵn sàng cùng lúc để truyền thông. Thực tế, bên gửi không cần biết bất kì điều gì về bên nhận; hay bên nhận không cần biết bất kì điều gì về bên gửi. Bên gửi và bên nhận chỉ cần biết khuôn dạng thông điệp và đích (destination) để sử dụng.
2.3.2 Tổng quan về JMS
JMS là một API dùng cho việc gởi nhận thông điệp được Sun phát triển từ JSR- 914. JMS không phải là một hệ thống gởi nhận thông điệp mà chỉ là một trừu tượng hóa (abstraction) của những interface và class được dùng bởi messaging client khi giao tiếp với messaging system. Giống như cách JDBC trừu tượng hóa truy cập tới CSDL quan hệ và JNDI trừu tượng hóa truy cập tới dịch vụ đặt tên và đường dẫn (naming and directory services), JMS cũng trừu tượng hóa truy cập tới các messaging provider.
Trong JMS, các client gởi nhận thông điệp được gọi là JMS client, và hệ thống gởi nhận thông điệp được gọi là JMS provider. Một ứng dụng JMS là một business system gồm nhiều JMS client và thường là một JMS provider. JMS client tạo ra thông điệp được gọi là message producer, còn JMS client nhận thông điệp được gọi là message consumer. Một JMS client có thể vừa là message producer vừa là message consumer.
JMS API có thể được chia làm 3 phần chính: API tổng quát, API P2P và API pub/sub. API tổng quát có thể được dùng để gởi nhận message từ queue hoặc topic. API P2P chỉ được dùng với queue còn API pub/sub chỉ được dùng với topic.
Trong API tổng quát có 7 interface chính để gởi nhận JMS message: - ConnectionFactory - Destination - Connection - Session - Message - MessageProducerMessageConsumer
39 ConnectionFactory và Destination phải được lấy từ provider qua JNDI. Các interface khác được tạo ra bằng factory method trong nhiều API interface. Ví dụ: khi đã có ConnectionFactory, chúng ta có thể tạo Connection. Khi đã có Connection, có thể tạo Session. Khi đã có Session, chúng ta có thể tạo Message, Message Producer và Message Receiver.
JMS API tối thiểu hóa các khái niệm mà lập trình viên phải học để có thể sử dụng được các sản phẩm gởi nhận thông điệp như cung cấp đủ tính năng để hỗ trợ các ứng dụng gởi nhận thông điệp phức tạp. JMS API cho phép gởi nhận thông điệp không chỉ “liên kết lỏng lẻo” mà còn không đồng bộ.
2.3.3 Các mô hình gửi nhận thông điệp trong JMS
JMS hỗ trợ hai loại mô hình gởi nhận thông điệp: point – to - point và publish – subscribe. Những mô hình gởi nhận thông điệp đôi khi được gọi là “miền gởi nhận thông điệp” (messaging domain). Gởi nhận thông điệp point – to - point và publish – subscribe thường được viết tắt là p2p và pub/sub. Hiểu theo nghĩa đơn giản nhất, publish – subscribe là việc gởi thông điệp từ một tới nhiều, còn point – to - point là việc gởi thông điệp một - một.