File thuyết trình nghiên cứu java message service ( JMS ) và viết ứng dụng trường KHTN Tp HCM
Trang 3- Gởi nhận thông điệp (messaging) là cách thức để giao tiếp
Trang 4Sử dụng một API đơn giản để xây dựng thông điệp, sau đó đưa qua MOM để giao tới một hay nhiều người nhận đã định trước.
h th ng g i nh n thông đi p ệ ố ở ậ ệ
Trang 62 Giảm tắc nghẽn cổ chai cho hệ thống
• Thay vì để các yêu cầu dồn lại trong lúc một thành phần đồng
bộ xử lý chúng, các yêu cầu được gởi đến 1 hệ thống gởi
nhận thông điệp để phân phát các yêu cầu tới nhiều thành phần message listener
L i ích c a vi c g i nh n thông đi p ợ ủ ệ ở ậ ệ
Trang 84 Tăng hiệu suất người dùng cuối
• Người dùng có thể tiếp tục làm việc khác trong khi yêu cầu đang được xử lý.
• Khi yêu cầu hoàn tất, người dùng được thông báo rằng yêu cầu đã được
xử lý và kết quả được trả về cho người dùng.
Người dùng có thể hoàn thành nhiều việc hơn với thời gian chờ ít hơn
L i ích c a vi c g i nh n thông đi p ợ ủ ệ ở ậ ệ
Trang 95 Sự linh hoạt và nhanh nhẹn của kiến trúc
• Thông qua việc sử dụng trừu tượng hóa và tách biệt các thành phần
• Có thể nhanh chóng đáp ứng các thay đổi trong phần mềm, phần cứng và cả thay đổi về doanh nghiệp
9
L i ích c a vi c g i nh n thông đi p ợ ủ ệ ở ậ ệ
Trang 10RPC và gởi nhận thông điệp bất đồng bộ
RPC cố gắng mô phỏng hành vi của một hệ thống chỉ chạy một process
Khi một hệ thống bị lỗi sẽ gây ảnh hưởng ngay lập tức tới các
hệ thống khác
L i ích c a vi c g i nh n thông đi p ợ ủ ệ ở ậ ệ
Trang 11RPC và gởi nhận thông điệp bất đồng bộ
RPC Client/Server
Business Application C
RPC Client/Server
Requires n * (n-1) / 2 connections
L i ích c a vi c g i nh n thông đi p ợ ủ ệ ở ậ ệ
Trang 12RPC và gởi nhận thông điệp bất đồng bộ
Một khái niệm căn bản của gởi nhận thông điệp là giao tiếp giữa các ứng dụng phải bất đồng bộ
Trong hệ thống gởi nhận thông điệp bất đồng bộ, mỗi hệ thống
con được tách từ các hệ thống khác
L i ích c a vi c g i nh n thông đi p ợ ủ ệ ở ậ ệ
Trang 13RPC và gởi nhận thông điệp bất đồng bộ
13
Centralized message server
(hub and spoke)
JMS
Client
Message Server
JMS Client
JMS
Client
JMS Client
JMS Client
JMS Client
JMS Client
Local "server"
JMS Client
Local "server"
JMS Client Local "server"
JMS Client
L i ích c a vi c g i nh n thông đi p ợ ủ ệ ở ậ ệ
Trang 14• Một message server (còn được gọi là message broker hay
router) chịu trách nhiệm phân phối thông điệp từ một messaging client đến các messaging client khác
• Message server này tách riêng client gửi ra khỏi các client
nhận khác
Kiến trúc tập trung
Trang 15• Kiến trúc tập trung sử dụng cấu trúc liên kết hub-and-spoke
• Kiến trúc hub-and-spoke cho phép chỉ cần một số kết nối tối
thiểu trong khi các phần khác của hệ thống vẫn có thể giao tiếp với nhau được
15
Kiến trúc tập trung
Trang 16• Tất cả kiến trúc phân tán hiện tại đều đang sử dụng IP multicast
ở tầng network
• Một số tính năng của server (tính bền bỉ, tính bảo mật, các giao
dịch) được nhúng vào như một phần local của client,
• Việc định tuyến thông điệp được giao cho tầng network bằng
cách sử dụng giao thức IP multicast
Kiến trúc Phân tán
Trang 17• IP multicast cho phép các ứng dụng gia nhập một hay nhiều
nhóm IP multicast; mỗi nhóm sử dụng một địa chỉ IP để tái phân phối bất kỳ thông điệp nào mà nó nhận được cho tất cả thành viên trong cùng nhóm
• Tầng network xử lý việc định tuyến một cách tự động
17
Kiến trúc Phân tán
Trang 20• JMS (Java Message Service) là 1 API dùng cho việc gởi
nhận thông điệp được Sun Microsystems phát triển
• JMS không phải là một hệ thống gởi nhận thông điệp
• JMS trừu tượng hóa truy cập tới các MOM
JMS là gì ?
Trang 21Hỗ trợ việc sản xuất, phân phối và giao nhận thông điệp
Hỗ trợ các ngữ nghĩa (semantics) trong việc giao nhận thông điệp
Đồng bộ hoặc bất đồng bộ
Thông điệp giao dịch (Transacted Message)
Thông điệp đảm bảo (Guaranteed Message)
21
JMS là gì ?
Trang 22Các thành phần JMS
Message Server Message Destination Message
Mô hình gởi nhận thông điệp JMS
Trang 23JMS Client
Connection
Session Session Session
Mô hình gởi nhận thông điệp JMS
Trang 24Tạo connections và sessions
Message Server JNDI Store
JMS Client
Connection Session Session Session
Trang 25Các thành phần kiến trúc JMS:
JMS clients
Non-JMS clients
Các thông điệp
JMS provider (hệ thống gởi nhận thông điệp)
Các đối tượng được quản trị (administered objects)
• Destination
• ConnectionFactory
25
Kiến trúc JMS
Trang 26Kiến trúc một ứng dụng JMS
Kiến trúc JMS
Trang 27Một ứng dụng JMS gồm có:
JMS Clients
• Ứng dụng Java gởi/nhận thông điệp
Các thông điệp
Các đối tượng được quản trị (administered objects)
• Các đối tượng JMS đã được admin tinh chỉnh cho các client sử dụng
• ConnectionFactory, Destination (queue or topic)
JMS Provider
• Hệ thống gởi nhận thông điệp triển khai JMS và các tính năng quản trị
27
Kiến trúc JMS
Trang 28JMS Provider
Kiến trúc JMS
Trang 30• JMS hỗ trợ hai loại mô hình gởi nhận thông điệp:
point-to-point và publish-and-subscribe
Mô hình gởi nhận thông điệp JMS
Trang 31Publish-and-Subscribe
Trang 32Point-to-point
Trang 33o Dựa vào khái niệm gởi một thông điệp tới một đích đến đã định
trước
o Không có liên kết trực tiếp giữa producer tới consumer
o Mô hình pub/sub dựa trên mô hình push Còn p2p queue có thể
push hoặc pull thông điệp
33
So sánh P2P và pub/sub
Trang 34o Trong mô hình pub/sub, nhiều consumer có thể subscribe
cùng một topic và nhận được bản sao của từng thông điệp được đăng lên topic đó
o Trong mô hình p2p, nhiều consumer có thể sử dụng cùng
một queue, nhưng mỗi thông điệp trong queue chỉ có thể được nhận bởi một consumer
So sánh P2P và pub/sub
Trang 35receives from sends to
Connection Factory
Destination
Message Consumer Session
Message
Producer
creates
Trang 37• Message là phần quan trọng nhất của toàn bộ đặc điểm kỹ
thuật JMS
• Một thông điệp JMS mang dữ liệu ứng dụng và cung cấp các
thông báo sự kiện
37
Cấu trúc một thông điệp JMS
Trang 38Cấu trúc một thông điệp JMS
Trang 39Dùng để định danh và định tuyến thông điệp
Trang 41Thuộc tính
Hoạt động giống như header bổ sung có thể được gán cho một thông điệp
Cho phép nhà phát triển thêm thông tin không rõ ràng về thông điệp
Có ba loại thuộc tính cơ bản:
Thuộc tính ứng dụng cụ thể
Thuộc tính JMS định nghĩa
Thuộc tính provider cụ thể
41
Trang 42Message type Message body
ObjectMessage A serializable Java object
BytesMessage A stream of uninterpreted bytes StreamMessage A stream of Java primitives
Các loại thông điệp
Trang 43Message type Trường hợp sử dụng
Message Thông báo sự kiện
TextMessage Tin nhắn văn bản, tài liệu XML
ObjectMessage Trao đổi các đối tượng Java
BytesMessage Trao đổi dữ liệu ở định dạng gốc của một ứng dụng
StreamMessage Cung cấp một tập hợp các method tiện lợi để lập bản đồ định dạng byte stream về
kiểu nguyên thủy Java
MapMessage Cung cấp dữ liệu có khóa, có thể thay đổi từ một thông điệp này sang thông điệp
khác
43
Các loại thông điệp
Trang 44• Một khi thông điệp đã được giao, phần thân và thuộc tính
của thông điệp trở thành read-only
Các loại thông điệp
Trang 45Message Selectors
• Cho phép một JMS consumer lựa chọn thông điệp từ một
đích đến cụ thể
• Sử dụng thuộc tính và header thông điệp làm tiêu chí trong
biểu thức điều kiện
• Dựa trên một tập hợp con của cú pháp biểu thức điều kiện
SQL-92
45
Trang 48 Gởi nhận thông điệp đảm bảo
Transactions
Xác nhận và lỗi
Tính năng của JMS
Trang 49Có 3 phần chính trong gởi nhận thông điệp đảm bảo
Trang 50Thông điệp tự chủ
Thông điệp là các đơn vị tự chủ khép kín
Gởi nhận thông điệp đảm bảo
Trang 51 Khi những thông điệp được đánh dấu liên tục, thì trách nhiệm
của nhà cung cấp JMS là tận dụng cơ chế store-and-forward
để hoàn thành hợp đồng với người gửi
51
Gởi nhận thông điệp đảm bảo
Trang 52Xác nhận thông điệp
Là một phần then chốt của gởi nhận thông điệp đảm bảo
Server xác nhận thông điệp được nhận từ JMS producers
JMS consumers xác nhận đã nhận thông điệp từ servers
Gởi nhận thông điệp đảm bảo
Trang 54Transacted Session: Producer
JMS provider sẽ không bắt đầu giao thông điệp cho consumer
cho tới khi producer phát lệnh commit() trên session
Trang 55Transacted Session: Producer
55
Producer
Message Server
Consumer
Before commit( )
Upon commit( )
Message Server
Transacted
session
Transactions
Trang 56Transacted Session: Consumer
JMS provider giữ thông điệp đã được giao cho tới khi receiver
phát lệnh commit() trên session
Transactions
Trang 57Transacted Session: Consumer
57
Message
Trước khi commit( )
Sau khi commit( )
Trang 58Transactions phân tán
Message Server JNDI Store
JMS Client
XAConnection XASession XASession
XAConnectionFactory
create
ConnectionFactories
Destinations
Trang 59Mất kết nối
Khi một kết nối mạng giữa client và server bị mất, một JMS
provider phải cố gắng khởi tạo lại kết nối
59
Xác nhận và lỗi
Trang 60Phục hồi sau khi bị mất kết nối
Trang 62JMS và EJB
Message-driven bean Life Cycle
does not exist
pooled
1: newInstance() 2: setMessageDrivenContextContext() 3: ejbCreate()
ejbRemove ()
Trang 63JMS và EJB
Ví dụ
63
Trang 64JMS và EJB
EJB là một thành phần phía server đóng gói business logic của một ứng dụng
EJB đơn giản hóa quá trình phát triển những ứng dụng lớn và phân tán
EJB Container cung cấp những dịch vụ cấp hệ thống
e.g transaction management, authorization
Beans giữ control logic
thin client applications
Thành phần portable
Có thể chạy trên bất kỳ J2EE server nào
Trang 66 Sun Microsystems: Java Message Queue
BEA: WebLogic Server
ExoLab: OpenJMS
Trang 67HỎI ĐÁP