Professional Documents
Culture Documents
TIỂU LUẬN
HÀ NỘI-2024
Đôi khi, các thiết bị này giao tiếp với các thiết bị liên quan khác và hoạt động dựa trên
thông tin chúng nhận được từ nhau. Các thiết bị thực hiện hầu hết công việc mà không có sự
can thiệp của con người, mặc dù mọi người có thể tương tác với các thiết bị. Internet of Things
cũng có thể tận dụng trí tuệ nhân tạo (AI) và Machine Learning (máy học) để hỗ trợ quá trình
thu thập dữ liệu trở nên dễ dàng và linh hoạt hơn.
Các công nghệ sử dụng trong IoT.
Các công nghệ này thường được kết hợp để tạo ra các hệ thống IoT mạnh mẽ, linh hoạt
và an toàn. Tùy thuộc vào ứng dụng cụ thể, sự lựa chọn giữa các công nghệ này có thể thay đổi
để đáp ứng các yêu cầu đặc biệt của dự án.
- Nhược điểm:
IoT mở ra tiềm năng không giới hạn trong cuộc sống hàng ngày.
- Đối với doanh nghiệp :
+ Đẩy nhanh quá trình đổi mới:
Internet vạn vật mở ra cơ hội cho doanh nghiệp tiếp cận phân tích
cao cấp để phát hiện những khía cạnh mới. VD như, thông qua việc
thu thập dữ liệu về hành vi của khách hàng, doanh nghiệp có thể tạo
ra chiến dịch tiếp thị chính xác.
+ Chuyển đổi dữ liệu thành thông tin chuyên sâu và hành động bằng AI và ML:
Dữ liệu lịch sử và xu hướng có thể được sử dụng để dfi đoán tương
lai, như việc kết hợp thông tin bảo hành và dữ liệu IoT để dfi đoán sfi
cố bảo trì. Điều này giúp cung cấp dịch vụ khách hàng chủ động và
xây dfing lòng trung thành.
Các thiết bị này chỉ là một số ví dụ và không đại diện cho tất cả các ứng dụng của IoT.
Các loại thiết bị ngày càng đa dạng, và sự phát triển của IoT tiếp tục mang lại những đổi mới
và tiện ích mới trong cuộc sống hàng ngày.
Tổng quan về IoT trong công nghiệp.
- IoT trong công nghiệp (IIoT) là việc ứng dụng của thiết bị thông minh trong các lĩnh
vực như sản xuất, bán lẻ, y tế để tối ưu hóa hiệu quả kinh doanh. Các thiết bị công
nghiệp, từ cảm biến đến máy móc, cung cấp dữ liệu chi tiết theo thời gian thực để cải
thiện quản lý chuỗi cung ứng, kho vận, nguồn nhân lực và sản xuất, đồng thời giảm chi
phí và tăng doanh thu.
1.1.6. Các ứng dụng của IIoT trong các ngành khác nhau
- Sản xuất:
+ Sử dụng cảm biến để theo dõi tình trạng của các thiết bị máy móc trong sản xuất.
Giúp dự đoán thời gian bảo dưỡng để tránh sự cố và giảm thiểu thời gian ngừng
máy.
+ Sử dụng cảm biến để theo dõi môi trường làm việc và sự vận hành của nhân viên,
giúp cải thiện an toàn lao động và giảm nguy cơ tai nạn.
- Công nghiệp ô tô:
+ Phân tích dựa trên cảm biến và robot để tối ưu hóa trong quy trình sản xuất và bảo
dưỡng ô tô.
+ Sử dụng GPS và các cảm biến khác để theo dõi vị trí và tình trạng của xe ô tô. Điều
này hỗ trợ trong việc quản lý độ an toàn, giảm tai nạn giao thông và cải thiện hệ
thống định vị.
- Kho vận và vận tải:
+ Hỗ trợ quản lý chuỗi cung ứng, từ quản lý tồn kho đến bảo trì đội xe.
+ Theo dõi tài sản và tối ưu hóa tiêu thụ năng lượng trong vận chuyển.
- Bán lẻ:
- Các thiết bị đeo có cảm biến và phần mềm có thể thu thập và phân tích dữ liệu người
dùng, gửi thông điệp tới các công nghệ khác về người dùng với mục đích làm cho cuộc
sống của người dùng dễ dàng và thoải mái hơn.
- Các thiết bị đeo được cũng được sử dụng vì mục đích an toàn công cộng. Cải thiện thời
gian phản ứng của những người ứng cứu đầu tiên trong các trường hợp khẩn cấp bằng
cách cung cấp các tuyến đường được tối ưu hóa đến một địa điểm hoặc bằng cách theo
dõi các dấu hiệu quan trọng của công nhân xây dựng hoặc lính cứu hỏa tại các địa điểm
nguy hiểm đến tính mạng.
- Trong lĩnh vực chăm sóc sức khỏe, IoT mang lại nhiều lợi ích, bao gồm khả năng theo
dõi bệnh nhân chặt chẽ hơn bằng cách sử dụng phân tích dữ liệu được tạo ra. Các bệnh
viện thường sử dụng hệ thống IoT để hoàn thành các nhiệm vụ như quản lý hàng tồn
kho cho cả dược phẩm và dụng cụ y tế.
- Trong một thành phố thông minh cũng tiến hành sử dụng công nghệ IoT, chẳng hạn
như đèn đường thông minh và đồng hồ thông minh, có thể giúp giảm kẹt xe, tiết kiệm
năng lượng, giám sát và giải quyết các mối quan tâm về môi trường cũng như cải thiện
vấn đề ô nhiễm môi trường.
VD: Các tòa nhà thông minh có thể giảm chi phí năng lượng bằng cách
sử dụng các cảm biến phát hiện có bao nhiêu người ở trong phòng. Tfi
động điều chỉnh nhiệt độ vd như: Bật máy điều hòa không khí nếu cảm
biến phát hiện phòng họp có người hoặc tắt khi mọi người đã rời văn
phòng.
• Quản Lý Dữ Liệu:
Bảo mật dữ liệu lưu trữ và xử lý trên thiết bị IoT là cfic kỳ quan
trọng. Cần có biện pháp để ngăn chặn truy cập trái phép và lưu trữ
dữ liệu an toàn.
Việc duy trì sự cân bằng giữa tiện ích và bảo mật là vô cùng quan trọng để chúng ta có
thể đảm bảo rằng IoT sẽ đem lại lợi ích mà không gây ra nguy cơ đối với quyền riêng tư
và an toàn thông tin cho người dùng.
10
12
Tài liệu này xác định một giao thức mạng, Giao thức Hàng đợi Tin nhắn
Nâng cao (AMQP), cho phép các ứng dụng khách tuân thủ giao tiếp với các
máy chủ phần mềm trung gian nhắn tin tuân thủ. Chúng tôi hướng đến đối
tượng là các chuyên gia kỹ thuật có kinh nghiệm trong lĩnh vfic này và
chúng tôi cung cấp các thông số kỹ thuật và hướng dẫn đầy đủ để một kỹ
sư có kỹ năng phù hợp có thể xây dfing các giải pháp tuân thủ bằng bất kỳ
ngôn ngữ lập trình hoặc nền tảng phần cứng hiện đại nào.
1.4. TỔNG QUAN
14
15
16
17
18
19
20
21
22
Phần này giải thích các ngữ nghĩa máy chủ phải được chuẩn hóa để đảm bảo khả năng
tương tác giữa các triển khai AMQP
2.1.1. Thực thể chính
Sơ đồ này hiển thị mô hình AMQ tổng thể:
Chúng ta có thể tóm tắt rằng một máy chủ trung gian là một máy chủ dữ liệu chấp nhận
tin nhắn và thực hiện hai việc chính với chúng, đó là định tuyến chúng đến các người tiêu dùng
khác nhau tùy thuộc vào các tiêu chí tùy ý và lưu trữ chúng trong bộ nhớ hoặc trên đĩa khi
người tiêu dùng không thể chấp nhận chúng đủ nhanh.
Trong một máy chủ trước AMQP, các nhiệm vụ này được thực hiện bởi các động cơ
đơnolithic thực hiện các loại định tuyến và lưu trữ cụ thể. Mô hình AMQ tiếp cận với các mảnh
nhỏ hơn, có thể kết hợp theo cách đa dạng và mạnh mẽ hơn. Nó bắt đầu bằng cách chia các
nhiệm vụ này thành hai vai trò khác nhau
Có hai thành phần chính trong AMQP để xử lý tin nhắn: exchange và message queue.
- - Exchange chấp nhận tin nhắn từ nhà sản xuất và định tuyến chúng đến các hàng đợi
tin nhắn.
- - Message queue lưu trữ tin nhắn và chuyển tiếp chúng đến các ứng dụng tiêu thụ. Có
một giao diện rõ ràng giữa exchange và message queue, được gọi là “binding” 1.
AMQP cung cấp các ngữ nghĩa có thể chạy được tại thời điểm chạy, thông qua hai khía
cạnh chính:
23
Một hàng đợi tin nhắn có nhiều thuộc tính: riêng tư hoặc chia sẻ, bền vững hoặc tạm thời,
được đặt tên bởi khách hàng hoặc máy chủ, v.v. Bằng cách chọn các thuộc tính mong muốn,
chúng ta có thể sử dụng hàng đợi tin nhắn để triển khai các thực thể trung gian thông thường
như:
- Một hàng đợi lưu trữ và chuyển tiếp (store-and-forward queue) được chia sẻ, giữ các
tin nhắn và phân phối chúng giữa các người tiêu dùng theo cơ chế round-robin. Hàng
đợi lưu trữ và chuyển tiếp thường bền vững và được chia sẻ giữa nhiều người tiêu
dùng.
- Một hàng đợi trả lời riêng tư (private reply queue) , giữ các tin nhắn và chuyển tiếp
chúng đến một người tiêu dùng duy nhất. Hàng đợi trả lời thường tạm thời, được đặt
tên bởi máy chủ và riêng tư cho một người tiêu dùng.
- Một hàng đợi đăng ký riêng tư (private subscription queue) , giữ các tin nhắn được thu
thập từ các nguồn “đăng ký” khác nhau và chuyển tiếp chúng đến một người tiêu dùng
duy nhất.
Hàng đợi đăng ký thường tạm thời, được đặt tên bởi máy chủ và riêng tư cho một người
tiêu dùng. Những loại này không được định nghĩa chính thức trong AMQP: chúng là ví dụ về
cách sử dụng hàng đợi tin nhắn. Việc tạo các thực thể mới như hàng đợi đăng ký bền vững,
chia sẻ là rất đơn giản
2.1.1.2 The Exchange (Sàn giao dịch)
Một sàn giao dịch chấp nhận các tin nhắn từ một ứng dụng sản xuất và định tuyến chúng
đến các hàng đợi tin nhắn theo các tiêu chí được sắp xếp trước. Những tiêu chí này được gọi là
24
- Một tin nhắn AMQP tương đương với một tin nhắn email;
- Một hàng đợi tin nhắn giống như một hộp thư;
- Một người tiêu thụ giống như một ứng dụng email, lấy và xóa email;
- Một sàn giao dịch giống như một MTA (mail transfer agent), kiểm tra email và quyết
định, dựa trên các chìa khóa định tuyến và bảng, cách gửi email đến một hoặc nhiều
hộp thư;
- Một chìa khóa định tuyến tương đương với địa chỉ To:, Cc: hoặc Bcc: trong email, mà
không có thông tin của máy chủ (định tuyến hoàn toàn nội bộ trong một máy chủ
AMQP);
- Mỗi phiên bản của sàn giao dịch giống như một quy trình MTA riêng biệt, xử lý một
phần của miền email hoặc loại cụ thể của lưu lượng email;
- Một ràng buộc giống như một mục trong bảng định tuyến của MTA.
Sức mạnh của AMQP đến từ khả năng tạo ra hàng đợi (hộp thư), sàn giao dịch (quy trình
MTA) và ràng buộc (mục định tuyến) vào thời gian chạy, và kết nối chúng lại với nhau theo
cách vượt xa khỏi một ánh xạ đơn giản từ địa chỉ "đến" đến tên hộp thư.
Tuy nhiên, không nên đưa phối giống giữa email và AMQP quá xa: có những khác biệt
cơ bản. Thách thức trong AMQP là định tuyến và lưu trữ tin nhắn trong một máy chủ, hoặc
trong ngôn ngữ SMTP (IETF RFC 821) gọi là "hệ thống tự trị". Ngược lại, thách thức trong
email là định tuyến tin nhắn giữa các hệ thống tự trị.
Định tuyến bên trong một máy chủ và giữa các máy chủ là các vấn đề riêng biệt và có
những giải pháp riêng biệt, ngay cả chỉ vì những lý do nhàm chán như duy trì hiệu suất minh
bạch. Để định tuyến giữa các máy chủ AMQP thuộc sở hữu của các tổ chức khác nhau, người
ta thiết lập các cầu nối rõ ràng, nơi một máy chủ AMQP hành động và làm khách của một máy
chủ khác để truyền tin nhắn giữa những tổ chức riêng biệt đó. Cách làm này thường phù hợp
với các loại doanh nghiệp mà AMQP dự kiến sẽ được sử dụng, vì những cầu nối này có thể
được hỗ trợ bởi các quy trình kinh doanh, nghĩa vụ hợp đồng và quan ngại về bảo mật.
26
Một tin nhắn AMQP bao gồm một tập hợp các thuộc tính cộng với nội dung không rõ nghĩa.
Một "tin nhắn" mới được tạo ra bởi một ứng dụng sản xuất bằng cách sử dụng API khách
AMQP. Người sản xuất đặt "nội dung" vào tin nhắn và có thể thiết lập một số "thuộc tính" cho
tin nhắn. Người sản xuất đánh dấu tin nhắn với "thông tin định tuyến", có vẻ giống như một địa
chỉ, nhưng gần như bất kỳ kế hoạch nào cũng có thể được tạo ra. Sau đó, người sản xuất gửi tin
nhắn đến một "sàn giao dịch" trên máy chủ.
Khi tin nhắn đến máy chủ, sàn giao dịch (thường) định tuyến tin nhắn đến một tập hợp
các "hàng đợi" tin nhắn cũng tồn tại trên máy chủ. Nếu tin nhắn không thể định tuyến, sàn giao
dịch có thể im lặng loại bỏ nó hoặc trả lại nó cho người sản xuất. Người sản xuất có thể chọn
cách xử lý tin nhắn không thể định tuyến.
Một tin nhắn có thể tồn tại trên nhiều hàng đợi tin nhắn. Máy chủ có thể xử lý điều này
theo cách khác nhau, bằng cách sao chép tin nhắn, sử dụng đếm tham chiếu, vv. Điều này
không ảnh hưởng đến khả năng tương tác. Tuy nhiên, khi một tin nhắn được định tuyến đến
nhiều hàng đợi tin nhắn, nó giống nhau trên mỗi hàng đợi tin nhắn. Không có một định danh
duy nhất phân biệt các bản sao khác nhau.
Khi một tin nhắn đến hàng đợi tin nhắn, hàng đợi tin nhắn cố gắng ngay lập tức chuyển
nó đến một ứng dụng tiêu thụ thông qua AMQP. Nếu điều này không khả thi, hàng đợi tin nhắn
lưu trữ tin nhắn (trong bộ nhớ hoặc trên đĩa theo yêu cầu của người sản xuất) và đợi cho đến
27
Khi hàng đợi tin nhắn có thể chuyển tin nhắn đến một tiêu thụ, nó loại bỏ tin nhắn khỏi bộ
đệm nội tại của nó. Điều này có thể xảy ra ngay lập tức hoặc sau khi tiêu thụ đã xác nhận rằng
nó đã xử lý tin nhắn thành công. Tiêu thụ chọn cách và khi nào thông báo "acknowledgements"
về tin nhắn. Tiêu thụ cũng có thể từ chối một tin nhắn (một "negative acknowledgement").
Tin nhắn từ người sản xuất và các thông báo xác nhận từ tiêu thụ được nhóm lại thành
"giao dịch". Khi một ứng dụng chơi cả hai vai trò, điều này thường xảy ra: gửi tin nhắn và gửi
xác nhận, và sau đó xác nhận hoặc hủy bỏ giao dịch.
Giao dịch giữa máy chủ và tiêu thụ không được thực hiện; đủ khi thực hiện giao dịch cho
các xác nhận này.
2.1.1.6 Những gì nhà sản xuất nhìn thấy
Bằng cách tạo phối giống với hệ thống email, ta có thể thấy rằng người sản xuất trong mô
hình AMQP không gửi tin nhắn trực tiếp đến một hàng đợi tin nhắn. Cho phép điều này sẽ phá
vỡ sự trừu tượng được thiết lập trong mô hình AMQP. Điều này giống như cho phép email
tránh qua bảng định tuyến của MTA và trực tiếp đến một hộp thư. Điều này sẽ làm cho không
thể chèn các bộ lọc và xử lý trung gian, chẳng hạn như phát hiện thư rác.
Mô hình AMQP sử dụng nguyên tắc tương tự như hệ thống email: tất cả các tin nhắn
được gửi đến một điểm trung tâm, có thể so sánh với một sàn giao dịch hoặc MTA. Điểm trung
tâm này kiểm tra các tin nhắn dựa trên các quy tắc và thông tin được che giấu từ người gửi và
sau đó định tuyến chúng đến các điểm giao nhận đã được chỉ định, cũng được che giấu từ
người gửi. Phương pháp này đảm bảo rằng quá trình định tuyến và xử lý của tin nhắn được
kiểm soát và quản lý tập trung, cho phép áp dụng các chức năng và biện pháp bảo mật bổ sung
trước khi tin nhắn đến địa điểm cuối cùng của chúng.
2.1.1.7 Người tiêu dùng nhìn thấy gì
Sự phối giống của chúng tôi với hệ thống email bắt đầu phân rã khi chúng ta xem xét về
người tiêu thụ. Khách hàng email là bên thụ động - họ có thể đọc hộp thư của họ, nhưng họ
28
Tuy nhiên, chúng tôi cũng cho phép ứng dụng khách hàng AMQP:
- Tạo hoặc xóa các hàng đợi tin nhắn;
- Xác định cách các hàng đợi tin nhắn này được điền, thông qua việc tạo ràng buộc;
- Chọn các sàn giao dịch khác nhau có thể hoàn toàn thay đổi ngữ nghĩa định tuyến.
Điều này giống như việc có một hệ thống email trong đó người ta có thể, qua giao thức:
- Tạo một hộp thư mới;
- Báo với MTA rằng tất cả các tin nhắn với một trường tiêu biểu cụ thể nên được sao
chép vào hộp thư này;
- Thay đổi hoàn toàn cách hệ thống email giải diễn địa chỉ và các tiêu biểu khác.
Chúng ta thấy rằng AMQP giống như một ngôn ngữ để kết nối các phần lại với nhau hơn
là một hệ thống. Điều này là một phần của mục tiêu của chúng tôi, để làm cho hành vi của máy
chủ có thể được lập trình thông qua giao thức.
2.1.1.8 Chế độ tfi động
Hầu hết các kiến trúc tích hợp không cần mức độ phức tạp như vậy. Như một nhiếp ảnh
gia nghiệp dư, đa số người dùng AMQP cần một chế độ "chỉ cần bấm và chụp". AMQP cung
cấp điều này thông qua việc sử dụng hai khái niệm đơn giản hóa:
- Một sàn giao dịch mặc định cho các người sản xuất tin nhắn;
- Một ràng buộc mặc định cho các hàng đợi tin nhắn chọn tin nhắn dựa trên sự khớp
giữa chìa khóa định tuyến và tên hàng đợi tin nhắn.
Thực tế, ràng buộc mặc định cho phép một người sản xuất gửi tin nhắn trực tiếp đến một
hàng đợi tin nhắn, với điều kiện có quyền thích hợp - nó mô phỏng mô hình địa chỉ "gửi đến
đích" đơn giản nhất mà mọi người mong đợi từ middleware truyền thống.
29
30
31
Chúng tôi có thể có nhiều người tiêu dùng trên hàng đợi chung này. Để tiêu thụ từ hàng
đợi được chia sẻ, mỗi người tiêu dùng thực hiện việc này:
Để xuất bản lên hàng đợi được chia sẻ, mỗi nhà sản xuất sẽ gửi một tin nhắn đến sàn giao
dịch mặc định:
Để xuất bản lên hàng đợi trả lời, nhà sản xuất sẽ gửi tin nhắn đến sàn giao dịch mặc định:
32
Chúng ta không thể sử dụng sàn giao dịch hoặc ràng buộc mặc định vì chúng không thực
hiện định tuyến theo kiểu chủ đề. Vì vậy, chúng ta phải tạo một ràng buộc một cách rõ ràng.
Dưới đây là mã giả để tạo và ràng buộc hàng đợi đăng ký pub-sub:
33
Khi xuất bản một tin nhắn, nhà sản xuất thực hiện một số việc như sau:
Trao đổi chủ đề xử lý khóa định tuyến đến ("STOCK.USD.ACME") bằng bảng ràng buộc
của nó, và tìm thấy một kết quả phù hợp với tmp.2. Sau đó nó định tuyến tin nhắn đến hàng đợi
đăng ký đó.
2.2. KIẾN TRÚC LỆNH AMQP
Phần này giải thích cách ứng dụng giao tiếp với máy chủ.
2.2.1. Lệnh giao thức (Lớp & Phương thức)
Phần mềm trung gian thường đối mặt với sự phức tạp trong thiết kế cấu trúc giao thức. Mục
tiêu chính của chúng tôi là tạo ra một kiến trúc quản lý được từ sự phức tạp đó. Tiếp cận của
chúng tôi là mô hình một API truyền thống, sử dụng các lớp để chứa các phương thức, và định
nghĩa các phương thức để thực hiện các nhiệm vụ cụ thể một cách hiệu quả. Mặc dù đây dẫn
đến một tập lệnh lớn, nhưng nó tương đối dễ hiểu.
Các lệnh AMQP được tổ chức thành các lớp, mỗi lớp đại diện cho một lĩnh vực chức năng cụ
thể. Một số lớp là tùy chọn, và mỗi đối tác sẽ chỉ thực hiện các lớp mà nó cần hỗ trợ.
Có hai cuộc trò chuyện phương thức chính trong hệ thống của chúng
tôi: 1 Yêu cầu-phản hồi đồng bộ:
- Một đối tác gửi một yêu cầu và đợi phản hồi từ đối tác khác.
- Các phương thức yêu cầu và phản hồi đồng bộ được sử dụng cho các chức năng không
quan trọng về hiệu suất.
34
Điều này có thể được truyền dưới dạng khung cấp dây:
35
Đáng chú ý rằng đối với hầu hết các ứng dụng, middleware có thể được hoàn toàn ẩn đi trong
các lớp kỹ thuật, và việc API thực tế được sử dụng quan trọng ít hơn so với việc middleware là
mạnh mẽ và có khả năng.
2.2.3. Không có xác nhận
Giao thức tán tụ thường đối mặt với vấn đề về tốc độ truyền thông. Để giải quyết vấn đề này,
chúng tôi áp dụng đồng bộ hóa mạnh mẽ trong những trường hợp nơi hiệu suất là một yếu tố
quan trọng. Đặc biệt, khi chúng tôi truyền nội dung từ một đối tác sang một đối tác khác, chúng
tôi ưu tiên việc gửi các phương thức càng nhanh càng tốt mà không cần đợi xác nhận.
Chúng tôi thiết lập một quy trình gửi không đồng bộ, tăng cường hiệu suất và giảm thời gian
chờ đợi. Trong một số trường hợp, chúng tôi thực hiện cửa sổ (windowing) để kiểm soát lưu
lượng tại mức độ cao hơn, chẳng hạn như ở mức tiêu thụ. Điều này giúp chúng tôi duy trì một
quy trình truyền thông linh hoạt mà không làm suy giảm hiệu suất.
Quan trọng hơn, chúng tôi đã chọn bỏ qua quá trình xác nhận trong AMQP để tối ưu hóa hiệu
suất. Mô hình của chúng tôi dựa trên việc khẳng định mọi hành động. Điều này có nghĩa là khi
chúng tôi thực hiện một hành động, chúng tôi tin rằng nó sẽ thành công hoặc sẽ có một ngoại lệ
cần được xử lý, ví dụ như đóng kênh hoặc thiết lập lại kết nối.
Trong AMQP, không có xác nhận rõ ràng. Sự thành công thường được biểu thị bằng im lặng,
trong khi thất bại tạo ra ồn ào hoặc thông báo lỗi. Đối với các ứng dụng yêu cầu theo dõi rõ
36
- Các kênh trong AMQP cho phép nhiều kết nối TCP/IP nặng nề được đa kênh hóa
thành nhiều kết nối nhẹ.
- Việc này giúp dự đoán được cổng sử dụng, làm cho giao thức trở nên dễ quản lý hơn
trong các tường lửa và các môi trường mạng có hạn chế.
2 Độc Lập và Đồng Thời:
38
- Khách hàng yêu cầu máy chủ đảm bảo rằng sàn tồn tại thông qua phương thức Declare.
- Khách hàng có thể điều chỉnh yêu cầu này thành "tạo sàn nếu nó không tồn tại" hoặc
"cảnh báo nhưng đừng tạo nó, nếu nó không tồn tại".
39
40
41
42
Phần này giải thích cách các lệnh được ánh xạ tới giao thức cấp dây.
2.3.1. Mô tả chung
AMQP (Advanced Message Queuing Protocol) là một giao thức nhị phân, trong đó thông tin
được tổ chức thành các "frames" của nhiều loại khác nhau. Mỗi frame chứa các phương thức
giao thức và thông tin khác nhau, và tất cả các frames đều có cùng một định dạng tổng quát,
bao gồm tiêu đề frame, dữ liệu và kết thúc frame. Định dạng dữ liệu của frame phụ thuộc vào
loại frame đó.
Giao thức giả định sự tồn tại của một lớp truyền dữ liệu mạng có độ tin cậy và hướng luồng,
chẳng hạn như TCP/IP hoặc tương đương. Trong một kết nối socket duy nhất, có thể có nhiều
luồng kiểm soát độc lập, được gọi là "channels". Mỗi frame được đánh số với một số channel,
43
44
46
Để xử lý một frame phương thức, chúng ta thực hiện các bước sau:
1 Đọc phần payload của frame phương thức.
2 Giải nén nó thành một cấu trúc. Một phương thức cụ thể luôn có cấu trúc giống nhau, vì vậy
chúng ta có thể giải nén phương thức nhanh chóng.
3 Kiểm tra xem phương thức có được phép trong ngữ cảnh hiện tại hay không.
4 Kiểm tra xem các đối số của phương thức có hợp lệ hay không.
5 Thực hiện phương thức.
47
Các phương thức cụ thể (như Basic.Publish, Basic.Deliver, vv.) được định nghĩa chính thức để
chứa nội dung. Khi một peer gửi một frame phương thức như vậy, nó luôn theo sau bởi một
header nội dung và không có hoặc nhiều frame thân nội dung.
Một frame header nội dung có định dạng như sau:
Chúng ta đặt thân nội dung trong các frame riêng biệt (thay vì bao gồm nó trong phương thức)
để AMQP có thể hỗ trợ các kỹ thuật "zero copy" trong đó nội dung không bao giờ được đóng
gói hoặc mã hóa. Chúng ta đặt các thuộc tính nội dung trong frame riêng của chúng để người
nhận có thể chọn lọc các nội dung mà họ không muốn xử lý.
2.3.4.4 Khung nhịp tim
Heartbeating là một kỹ thuật quan trọng được thiết kế để đảm bảo tính liên tục của kết nối
trong môi trường mạng. Trong môi trường AMQP và nhiều giao thức khác, heartbeating không
chỉ đơn giản là việc kiểm tra xem kết nối còn mở hay không, mà còn bao gồm việc kiểm tra
tính khả dụng của đối tác kết nối.
48
Thay vì triển khai heartbeating như một phương thức của lớp, trong AMQP, nó được thực hiện
ở mức giao vận dưới dạng các frame đặc biệt. Những frame này chứa thông điệp heartbeating
và được trao đổi giữa các đối tác để kiểm tra sự liên tục của kết nối.
Heartbeating giúp giảm độ trễ trong việc phát hiện và xử lý các vấn đề kết nối, đồng thời cung
cấp cơ hội cho các đối tác để kiểm soát và định cấu hình thời gian heartbeating dựa trên yêu
cầu cụ thể của ứng dụng và môi trường mạng.
2.3.5. Xử lý lỗi
AMQP sử dụng cơ chế xử lý lỗi thông qua việc ánh xạ các lỗi vào các ngoại lệ tương ứng. Các
loại lỗi được phân thành hai nhóm chính: lỗi hoạt động và lỗi cấu trúc.
1 Lỗi Hoạt Động (Operational Errors):
- Khi xảy ra lỗi trong quá trình thực hiện các hoạt động như tìm kiếm message queue
không tồn tại, quyền truy cập không đủ, và các vấn đề hoạt động khác, một ngoại lệ
kênh sẽ được kích phát.
- Các lỗi này chủ yếu liên quan đến các vấn đề vận hành và quyền truy cập của ứng
dụng.
2 Lỗi Cấu Trúc (Structural Errors):
- Khi có lỗi trong cấu trúc của các phương thức, ví dụ như đối số không hợp lệ, chuỗi
phương thức không đúng, một ngoại lệ kết nối sẽ được kích phát.
- Các lỗi cấu trúc này thường liên quan đến việc gửi các frame không đúng hoặc không
hợp lệ.
Mỗi ngoại lệ sẽ dẫn đến việc đóng kênh hoặc kết nối và trả về một mã phản hồi 3 chữ số cùng
với văn bản phản hồi. Hệ thống mã phản hồi này được thiết kế để cung cấp thông tin chi tiết về
lỗi và trạng thái của kết nối, giúp ứng dụng khách hiểu rõ vấn đề và có thể thực hiện các biện
pháp xử lý phù hợp.
Sự sử dụng của hệ thống mã phản hồi 3 chữ số cũng tạo ra tính tương thích với các giao thức
khác như HTTP, giúp đơn giản hóa quá trình xử lý lỗi và tương tác với các thành phần hệ
thống khác.
49
Có thể đọc và viết các khung AMQP trực tiếp từ ứng dụng nhưng điều này sẽ là thiết kế kém
chất lượng. Ngay cả cuộc đối thoại AMQP đơn giản nhất cũng phức tạp hơn nhiều so với, ví
dụ, HTTP, và nhà phát triển ứng dụng không nên cần phải hiểu những thứ như định dạng
khung nhị phân để gửi một thông điệp đến hàng đợi thông điệp. Kiến trúc khách hàng AMQP
được khuyến nghị bao gồm một số tầng trừu tượng:
1 Một tầng framing. Tầng này lấy các phương thức giao thức AMQP, trong một định dạng cụ
thể cho từng ngôn ngữ (cấu trúc, lớp, v.v.) và biểu diễn chúng dưới dạng các khung cấp độ dây
dẫn. Tầng framing có thể được tạo cơ bản từ các đặc tả AMQP (được định nghĩa trong một
ngôn ngữ mô hình hóa giao thức, được thực hiện trong XML và được thiết kế đặc biệt cho
AMQP).
2 Một tầng quản lý kết nối. Tầng này đọc và ghi các khung AMQP và quản lý toàn bộ logic kết
nối và phiên. Trong tầng này, chúng ta có thể đóng gói toàn bộ logic mở kết nối và phiên, xử lý
lỗi, truyền và nhận nội dung, v.v. Nhiều phần lớn của tầng này có thể được tạo tự động từ các
đặc tả AMQP. Ví dụ, các đặc tả xác định phương thức nào mang nội dung, vì vậy logic "gửi
phương thức và sau đó tùy chọn là gửi nội dung" có thể được tạo tự động.
50
51
52
53
55
Trao đổi mặc định: Các nhà môi giới AMQP thường cung cấp một trao đổi trực tiếp mặc
định có tên "amq.direct".
Hết hạn thông báo: Các thông báo có thể được cấu hình để hết hạn nếu không được tiêu
thụ trong một khoảng thời gian xác định.
Khả năng tồn tại của thông báo: Các thông báo có thể được duy trì trên đĩa để đảm bảo
tính bền vững.
57
58
61
62
63
Trong bối cảnh xử lý ngôn ngữ tự nhiên: Topic exchange là một cách trao đổi thông tin về
các chủ đề khác nhau. Điều này có thể được thực hiện theo nhiều cách, chẳng hạn như thông
qua trò chuyện, đọc hoặc viết. Khi mọi người trao đổi thông tin về các chủ đề khác nhau, họ có
thể học hỏi những điều mới và mở rộng kiến thức của mình.
Cách thức hoạt động của topic exchange được mô tả như sau:
- Nhà xuất bản gửi tin nhắn đến topic exchange với một khóa định tuyến. Khóa định
tuyến là một chuỗi ký tự được sử dụng để xác định chủ đề của tin nhắn.
- Topic exchange sử dụng khóa định tuyến để định tuyến tin nhắn đến các hàng đợi đã
đăng ký với các chủ đề tương ứng.
- Người tiêu dùng đăng ký với topic exchange với một khóa định tuyến. Khi một tin
nhắn được gửi đến topic exchange với khóa định tuyến khớp với khóa định tuyến của
người tiêu dùng, tin nhắn sẽ được gửi đến người tiêu dùng.
Loại trao đổi chủ đề hoạt động như sau:
- Một hàng đợi tin nhắn liên kết với trao đổi bằng cách sử dụng mẫu định tuyến, P.
- Nhà xuất bản gửi cho sàn giao dịch một tin nhắn với khóa định tuyến R.
- Tin nhắn được chuyển đến hàng đợi tin nhắn nếu R khớp với P.
65
weather.forecast
weather.news
weather.alerts
Một nhà xuất bản có thể gửi tin nhắn đến topic exchange với khóa định tuyến
weather.forecast để gửi dự báo thời tiết. Một người tiêu dùng có thể đăng ký với topic
exchange với khóa định tuyến weather.forecast để nhận tất cả các tin nhắn dự báo thời tiết.
3.1.3.4 Loại Headers Exchange
Headers Exchange là một cơ chế định tuyến linh hoạt trong các hệ thống nhắn tin như
RabbitMQ cho phép các tin nhắn được định tuyến dựa trên giá trị tiêu đề của chúng, thay vì chỉ
dựa trên khóa định tuyến. Điều này cung cấp một cách phân phối tin nhắn mạnh mẽ và linh
hoạt hơn đến các hàng đợi khác nhau dựa trên các tiêu chí cụ thể.
Headers Exchange được sử dụng khi bạn muốn gửi một tin nhắn đến một hoặc nhiều hàng
đợi dựa trên các tiêu đề của tin nhắn. Ví dụ: nếu bạn có một trao đổi có tên auth_exchange, bạn
có thể gửi một tin nhắn đến hàng đợi auth_success_queue với các tiêu đề status có giá trị
success.
Loại trao đổi tiêu đề hoạt động như sau:
66
67
Hàng đợi tin nhắn có thể bền, tạm thời hoặc tự động xóa. Hàng đợi tin nhắn bền vững
kéo dài cho đến khi chúng bị xóa. Hàng đợi tin nhắn tạm thời kéo dài cho đến khi máy chủ tắt.
Hàng đợi tin nhắn tự động xóa kéo dài cho đến khi chúng không còn được sử dụng nữa.
Hàng đợi tin nhắn giữ tin nhắn của họ trong bộ nhớ, trên đĩa hoặc một số kết hợp của
chúng. Hàng đợi tin nhắn được đặt tên trên cơ sở mỗi máy chủ ảo.
69
70
71
72
73
74
76
77
trao đổi 40 Làm việc với các sàn giao dịch tuyên bố 10 Xác minh Exchange tồn tại, tạo nếu cần
hàng 50 Làm việc với hàng đợi tuyên bố 10 Khai báo hàng đợi, tạo nếu cần
ràng buộc 20 Ràng buộc hàng đợi với một sàn giao dịch
Cởi trói 50 Hủy liên kết hàng đợi khỏi sàn giao dịch
cơ bản 60 Làm việc với nội dung cơ bản QoS 10 Chỉ định chất lượng dịch vụ
tiêu thụ 20 Bắt đầu một trình tiêu thụ hàng đợi
giải thoát 60 Thông báo cho khách hàng về tin nhắn của
người tiêu dùng
nhận được 71 Cung cấp cho khách hàng một tin nhắn
nhận được trống 72 cho biết không có thư nào khả dụng
78
Khôi phục đồng 100 Gửi lại tin nhắn không được thừa nhận
bộ
phục hồi 110 Gửi lại tin nhắn không được thừa nhận
Tx 90 Làm việc với các giao dịch lựa 10 Chọn chế độ giao dịch tiêu chuẩn
79
method-payload = class-id
method-id *amqp-field class-
id = %x00.01-%xFF.FF method-
id = %x00.01-%xFF.FF amqp-
field = BIT / OCTET
/ dấu thời
gian / bảng
trường
80
/ 'b' ngắn-ngắn-nguyên
/ 'B' ngắn-ngắn-uint
/ 'Tôi' long-int
/ 'tôi' long-uint
/ 'l' dài-dài-uint
/ 'f' phao
/ 'd' đôi
81
+---+---+---+---+---+---+---+---+
8 octet
Tiêu đề giao thức bao gồm các chữ cái viết hoa "AMQP" theo sau là hằng số %d0 thì:
1. Phiên bản chính của giao thức, được sử dụng theo mục 1.4.2.
2. Phiên bản phụ về giao thức, được sử dụng theo mục 1.4.2.
3. Bản sửa đổi giao thức, được sử dụng theo mục 1.4.2.
Mô hình đàm phán giao thức tương thích với các giao thức hiện có như HTTP khởi tạo kết nối
với chuỗi văn bản không đổi và với tường lửa đánh hơi sự khởi đầu của giao thức để quyết định
áp dụng quy tắc nào cho nó.
Máy khách và máy chủ đồng ý về một giao thức và phiên bản như sau:
• Máy khách mở một kết nối socket mới đến máy chủ AMQP và gửi tiêu đề giao thức.
82
+------+---------+----------------+ +-----------------------+
+-------------------+
83
84
+----------+-----------+-------------- - -
+----------+--------+-----------+----------------
+------------- - | Class-ID | Trọng lượng | Kích thước
cơ thể | Cờ chỗ nghỉ | danh sách tài sản... +----------
87
+-----------------------+ +--------------------+
Nội dung có thể được chia thành nhiều khung nếu cần. Kích thước tối đa của tải trọng khung
được cả hai đồng nghiệp thỏa thuận trong quá trình đàm phán kết nối.
Hướng dẫn đối với người thực hiện:
88
+-----------+-----------+-----------+--------------------+
| ổ cắm |
+------------------------------------------------------------------------------------+
89
90
91
92