AWS Simple Queue Service (SQS) là dịch vụ xếp hàng tin nhắn được quản lý toàn phần, cho phép bạn tách rời và thay đổi quy mô các vi dịch vụ, hệ thống phân tán và ứng dụng serverless. SQS loại bỏ sự phức tạp và chi phí liên quan đến việc quản lý và vận hành phần mềm trung gian hướng thông báo, đồng thời trao quyền cho các nhà phát triển tập trung vào công việc khác biệt.
Node.js là thời gian chạy JavaScript được xây dựng trên công cụ JavaScript V8 của Chrome. Nó cho phép các nhà phát triển chạy JavaScript ở phía máy chủ để tạo các ứng dụng mạng nhanh và có thể mở rộng. Node.js được sử dụng rộng rãi để tạo các dịch vụ phụ trợ, xây dựng các ứng dụng thời gian thực và chạy các tác vụ tự động hóa.
Bằng cách sử dụng SQS và Node.js cùng nhau, bạn có thể tạo các ứng dụng mạnh mẽ và linh hoạt, có thể xử lý và xử lý lượng lớn dữ liệu cũng như thực hiện đồng thời nhiều tác vụ.
Thiết lập hàng đợi SQS trong AWS
Trước khi có thể sử dụng SQS với Node.js, bạn cần tạo một hàng đợi mới trong AWS. Bạn có thể làm điều này bằng cách làm theo các bước sau:
- Truy cập trang chủ SQS trong Bảng điều khiển quản lý AWS.
- Nhấp vào nút “Tạo hàng đợi”.
- Đặt tên cho hàng đợi của bạn và chọn tùy chọn “Hàng đợi tiêu chuẩn”.
- Nhấp vào nút “Tạo hàng đợi” để tạo hàng đợi mới của bạn.
Sau khi hàng đợi của bạn được thiết lập, bạn có thể bắt đầu gửi và nhận tin nhắn đến và từ hàng đợi đó.
Gửi tin nhắn đến hàng đợi SQS trong Node.js
Để gửi tin nhắn đến hàng đợi SQS từ ứng dụng Node.js, bạn cần sử dụng AWS SDK cho JavaScript trong Node.js (aws-sdk). SDK cung cấp ứng dụng khách cho SQS mà bạn có thể sử dụng để tương tác với SQS bằng Node.js.
Dưới đây là ví dụ về cách gửi tin nhắn đến hàng đợi SQS bằng SDK:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <span class="token keyword">const</span> <span class="token constant">AWS</span> <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">'aws-sdk'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> sqs <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AWS <span class="token punctuation">.</span> SQS</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Create the message to send to the SQS queue</span> <span class="token keyword">const</span> message <span class="token operator">=</span> <span class="token punctuation">{</span> message <span class="token operator">:</span> <span class="token string">'Hello, SQS!'</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token comment">// Set the parameters for sending the message to the SQS queue</span> <span class="token keyword">const</span> params <span class="token operator">=</span> <span class="token punctuation">{</span> MessageBody <span class="token operator">:</span> <span class="token constant">JSON</span> <span class="token punctuation">.</span> <span class="token function">stringify</span> <span class="token punctuation">(</span> message <span class="token punctuation">)</span> <span class="token punctuation">,</span> QueueUrl <span class="token operator">:</span> <span class="token string">'https://sqs.us-east-1.amazonaws.com/1234567890/MyQueue'</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token comment">// Send the message to the SQS queue</span> sqs <span class="token punctuation">.</span> <span class="token function">sendMessage</span> <span class="token punctuation">(</span> params <span class="token punctuation">,</span> <span class="token punctuation">(</span> <span class="token parameter">err <span class="token punctuation">,</span> data</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Error sending message to SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> err <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Successfully sent message to SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> data <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Nhận và xử lý tin nhắn từ hàng đợi SQS trong Node.js
Khi bạn đã gửi tin nhắn đến hàng đợi SQS của mình, bạn có thể nhận và xử lý chúng trong ứng dụng Node.js bằng AWS SDK dành cho JavaScript trong Node.js (aws-sdk).
Dưới đây là ví dụ về cách thăm dò hàng đợi SQS cho thư mới và xử lý từng thư khi nhận được:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <span class="token keyword">const</span> <span class="token constant">AWS</span> <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">'aws-sdk'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> sqs <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AWS <span class="token punctuation">.</span> SQS</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Set the parameters for receiving messages from the SQS queue</span> <span class="token keyword">const</span> params <span class="token operator">=</span> <span class="token punctuation">{</span> QueueUrl <span class="token operator">:</span> <span class="token string">'https://sqs.us-east-1.amazonaws.com/1234567890/MyQueue'</span> <span class="token punctuation">,</span> MaxNumberOfMessages <span class="token operator">:</span> <span class="token number">10</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token comment">// Poll the SQS queue for new messages</span> <span class="token function">setInterval</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> sqs <span class="token punctuation">.</span> <span class="token function">receiveMessage</span> <span class="token punctuation">(</span> params <span class="token punctuation">,</span> <span class="token punctuation">(</span> <span class="token parameter">err <span class="token punctuation">,</span> data</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Error receiving message from SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> err <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Successfully received message from SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> data <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Process the message</span> <span class="token comment">// ...</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token number">5000</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Trong ví dụ này, hàm setInterval
được sử dụng để thăm dò hàng đợi SQS cho thư mới cứ sau 5 giây. Khi một tin nhắn được nhận, nó sẽ được ghi vào bảng điều khiển và sau đó được ứng dụng xử lý.
Trường hợp sử dụng
1. Xử lý công việc nền
SQS có thể được sử dụng để xử lý các tác vụ nền không đồng bộ trong ứng dụng Node.js. Ví dụ: gửi email, tạo báo cáo và dọn dẹp dữ liệu cũ.
Trong trường hợp sử dụng này, bạn có thể sử dụng SQS để xử lý các tác vụ nền không đồng bộ trong ứng dụng Node.js. Ví dụ: gửi email:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | <span class="token keyword">const</span> <span class="token constant">AWS</span> <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">'aws-sdk'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> sqs <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AWS <span class="token punctuation">.</span> SQS</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> ses <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AWS <span class="token punctuation">.</span> SES</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Create the message to send to the SQS queue</span> <span class="token keyword">const</span> message <span class="token operator">=</span> <span class="token punctuation">{</span> email <span class="token operator">:</span> <span class="token string">'example@example.com'</span> <span class="token punctuation">,</span> subject <span class="token operator">:</span> <span class="token string">'Hello, SQS!'</span> <span class="token punctuation">,</span> body <span class="token operator">:</span> <span class="token string">'This is a background job processed by SQS'</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token comment">// Set the parameters for sending the message to the SQS queue</span> <span class="token keyword">const</span> params <span class="token operator">=</span> <span class="token punctuation">{</span> MessageBody <span class="token operator">:</span> <span class="token constant">JSON</span> <span class="token punctuation">.</span> <span class="token function">stringify</span> <span class="token punctuation">(</span> message <span class="token punctuation">)</span> <span class="token punctuation">,</span> QueueUrl <span class="token operator">:</span> <span class="token string">'https://sqs.us-east-1.amazonaws.com/1234567890/emailQueue'</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token comment">// Send the message to the SQS queue</span> sqs <span class="token punctuation">.</span> <span class="token function">sendMessage</span> <span class="token punctuation">(</span> params <span class="token punctuation">,</span> <span class="token punctuation">(</span> <span class="token parameter">err <span class="token punctuation">,</span> data</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Error sending message to SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> err <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Successfully sent message to SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> data <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">setInterval</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> sqs <span class="token punctuation">.</span> <span class="token function">receiveMessage</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> QueueUrl <span class="token operator">:</span> <span class="token string">'https://sqs.us-east-1.amazonaws.com/1234567890/emailQueue'</span> <span class="token punctuation">,</span> MaxNumberOfMessages <span class="token operator">:</span> <span class="token number">10</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">(</span> <span class="token parameter">err <span class="token punctuation">,</span> data</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Error receiving message from SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> err <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token keyword">const</span> emailParams <span class="token operator">=</span> <span class="token punctuation">{</span> Destination <span class="token operator">:</span> <span class="token punctuation">{</span> ToAddresses <span class="token operator">:</span> <span class="token punctuation">[</span> data <span class="token punctuation">.</span> Messages <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token punctuation">.</span> email <span class="token punctuation">]</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> Message <span class="token operator">:</span> <span class="token punctuation">{</span> Body <span class="token operator">:</span> <span class="token punctuation">{</span> Text <span class="token operator">:</span> <span class="token punctuation">{</span> Charset <span class="token operator">:</span> <span class="token string">"UTF-8"</span> <span class="token punctuation">,</span> Data <span class="token operator">:</span> data <span class="token punctuation">.</span> Messages <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token punctuation">.</span> body <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> Subject <span class="token operator">:</span> <span class="token punctuation">{</span> Charset <span class="token operator">:</span> <span class="token string">'UTF-8'</span> <span class="token punctuation">,</span> Data <span class="token operator">:</span> data <span class="token punctuation">.</span> Messages <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token punctuation">.</span> subject <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> Source <span class="token operator">:</span> <span class="token string">'example@example.com'</span> <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> ses <span class="token punctuation">.</span> <span class="token function">sendEmail</span> <span class="token punctuation">(</span> emailParams <span class="token punctuation">,</span> <span class="token punctuation">(</span> <span class="token parameter">err <span class="token punctuation">,</span> data</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Error sending email: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> err <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Successfully sent email: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> data <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> sqs <span class="token punctuation">.</span> <span class="token function">deleteMessage</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> QueueUrl <span class="token operator">:</span> <span class="token string">'https://sqs.us-east-1.amazonaws.com/1234567890/emailQueue'</span> <span class="token punctuation">,</span> ReceiptHandle <span class="token operator">:</span> data <span class="token punctuation">.</span> Messages <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token punctuation">.</span> ReceiptHandle <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">(</span> <span class="token parameter">err <span class="token punctuation">,</span> data</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Error deleting email from SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> err <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Successfully deleted email from SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> data <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token number">5000</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
2. Tách rời microservice
SQS có thể được sử dụng để tách rời các dịch vụ siêu nhỏ trong ứng dụng Node.js bằng cách sử dụng SQS làm bus nhắn tin giữa các dịch vụ. Điều này cho phép các dịch vụ hoạt động độc lập và cải thiện khả năng mở rộng cũng như tính khả dụng của ứng dụng tổng thể.
Trong trường hợp sử dụng này, bạn có thể sử dụng SQS làm bus nhắn tin giữa các vi dịch vụ khác nhau trong ứng dụng Node.js. Điều này cho phép các dịch vụ siêu nhỏ hoạt động độc lập và cải thiện khả năng mở rộng cũng như tính khả dụng của ứng dụng tổng thể. Dưới đây là ví dụ về cách một vi dịch vụ có thể gửi tin nhắn đến một vi dịch vụ khác bằng SQS:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <span class="token keyword">const</span> <span class="token constant">AWS</span> <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">'aws-sdk'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> sqs <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AWS <span class="token punctuation">.</span> SQS</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Create the message to send to the SQS queue</span> <span class="token keyword">const</span> message <span class="token operator">=</span> <span class="token punctuation">{</span> message <span class="token operator">:</span> <span class="token string">'This is a message from Microservice 1 to Microservice 2'</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token comment">// Set the parameters for sending the message to the SQS queue</span> <span class="token keyword">const</span> params <span class="token operator">=</span> <span class="token punctuation">{</span> MessageBody <span class="token operator">:</span> <span class="token constant">JSON</span> <span class="token punctuation">.</span> <span class="token function">stringify</span> <span class="token punctuation">(</span> message <span class="token punctuation">)</span> <span class="token punctuation">,</span> QueueUrl <span class="token operator">:</span> <span class="token string">'https://sqs.us-east-1.amazonaws.com/1234567890/microserviceQueue'</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token comment">// Send the message to the SQS queue</span> sqs <span class="token punctuation">.</span> <span class="token function">sendMessage</span> <span class="token punctuation">(</span> params <span class="token punctuation">,</span> <span class="token punctuation">(</span> <span class="token parameter">err <span class="token punctuation">,</span> data</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Error sending message to SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> err <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Successfully sent message to SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> data <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
3. Thông báo theo thời gian thực
SQS có thể được sử dụng để gửi thông báo theo thời gian thực tới ứng dụng Node.js khi một số sự kiện nhất định xảy ra. Ví dụ: gửi thông báo khi người dùng mới đăng ký hoặc khi nhận được khoản thanh toán.
Trong trường hợp sử dụng này, bạn có thể sử dụng SQS để gửi thông báo theo thời gian thực tới ứng dụng Node.js khi một số sự kiện nhất định xảy ra. Ví dụ: gửi thông báo khi người dùng mới đăng ký:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | <span class="token keyword">const</span> <span class="token constant">AWS</span> <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">'aws-sdk'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> sqs <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AWS <span class="token punctuation">.</span> SQS</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Create the message to send to the SQS queue</span> <span class="token keyword">const</span> message <span class="token operator">=</span> <span class="token punctuation">{</span> message <span class="token operator">:</span> <span class="token string">'A new user has signed up: John Doe'</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token comment">// Set the parameters for sending the message to the SQS queue</span> <span class="token keyword">const</span> params <span class="token operator">=</span> <span class="token punctuation">{</span> MessageBody <span class="token operator">:</span> <span class="token constant">JSON</span> <span class="token punctuation">.</span> <span class="token function">stringify</span> <span class="token punctuation">(</span> message <span class="token punctuation">)</span> <span class="token punctuation">,</span> QueueUrl <span class="token operator">:</span> <span class="token string">'https://sqs.us-east-1.amazonaws.com/1234567890/notificationQueue'</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token comment">// Send the message to the SQS queue</span> sqs <span class="token punctuation">.</span> <span class="token function">sendMessage</span> <span class="token punctuation">(</span> params <span class="token punctuation">,</span> <span class="token punctuation">(</span> <span class="token parameter">err <span class="token punctuation">,</span> data</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Error sending message to SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> err <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Successfully sent message to SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> data <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Poll the SQS queue for new messages</span> <span class="token function">setInterval</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> sqs <span class="token punctuation">.</span> <span class="token function">receiveMessage</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> QueueUrl <span class="token operator">:</span> <span class="token string">'https://sqs.us-east-1.amazonaws.com/1234567890/notificationQueue'</span> <span class="token punctuation">,</span> MaxNumberOfMessages <span class="token operator">:</span> <span class="token number">10</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">(</span> <span class="token parameter">err <span class="token punctuation">,</span> data</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Error receiving message from SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> err <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Received notification: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> data <span class="token punctuation">.</span> Messages <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token punctuation">.</span> message <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// send this notification to client</span> <span class="token comment">//...</span> sqs <span class="token punctuation">.</span> <span class="token function">deleteMessage</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> QueueUrl <span class="token operator">:</span> <span class="token string">'https://sqs.us-east-1.amazonaws.com/1234567890/notificationQueue'</span> <span class="token punctuation">,</span> ReceiptHandle <span class="token operator">:</span> data <span class="token punctuation">.</span> Messages <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token punctuation">.</span> ReceiptHandle <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">(</span> <span class="token parameter">err <span class="token punctuation">,</span> data</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Error deleting notification from SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> err <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Successfully deleted notification from SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> data <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token number">5000</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
4. Quy trình làm việc tự động
SQS có thể được sử dụng để tạo quy trình công việc tự động trong ứng dụng Node.js. Ví dụ: xử lý hình ảnh của người dùng và gửi nó đến một dịch vụ khác để phân tích.
Trong trường hợp sử dụng này, bạn có thể sử dụng SQS để tạo quy trình công việc tự động trong ứng dụng Node.js. Ví dụ: xử lý hình ảnh của người dùng và gửi nó đến một dịch vụ khác để phân tích:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | <span class="token keyword">const</span> <span class="token constant">AWS</span> <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">'aws-sdk'</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> sqs <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AWS <span class="token punctuation">.</span> SQS</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> rekognition <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AWS <span class="token punctuation">.</span> Rekognition</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Create the message to send to the SQS queue</span> <span class="token keyword">const</span> message <span class="token operator">=</span> <span class="token punctuation">{</span> imageUrl <span class="token operator">:</span> <span class="token string">'https://example.com/image.jpg'</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token comment">// Set the parameters for sending the message to the SQS queue</span> <span class="token keyword">const</span> params <span class="token operator">=</span> <span class="token punctuation">{</span> MessageBody <span class="token operator">:</span> <span class="token constant">JSON</span> <span class="token punctuation">.</span> <span class="token function">stringify</span> <span class="token punctuation">(</span> message <span class="token punctuation">)</span> <span class="token punctuation">,</span> QueueUrl <span class="token operator">:</span> <span class="token string">'https://sqs.us-east-1.amazonaws.com/1234567890/imageQueue'</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token comment">// Send the message to the SQS queue</span> sqs <span class="token punctuation">.</span> <span class="token function">sendMessage</span> <span class="token punctuation">(</span> params <span class="token punctuation">,</span> <span class="token punctuation">(</span> <span class="token parameter">err <span class="token punctuation">,</span> data</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Error sending message to SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> err <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Successfully sent message to SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> data <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">setInterval</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> sqs <span class="token punctuation">.</span> <span class="token function">receiveMessage</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> QueueUrl <span class="token operator">:</span> <span class="token string">'https://sqs.us-east-1.amazonaws.com/1234567890/imageQueue'</span> <span class="token punctuation">,</span> MaxNumberOfMessages <span class="token operator">:</span> <span class="token number">10</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">(</span> <span class="token parameter">err <span class="token punctuation">,</span> data</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Error receiving message from SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> err <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token keyword">const</span> imageUrl <span class="token operator">=</span> data <span class="token punctuation">.</span> Messages <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token punctuation">.</span> imageUrl <span class="token punctuation">;</span> rekognition <span class="token punctuation">.</span> <span class="token function">detectLabels</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> Image <span class="token operator">:</span> <span class="token punctuation">{</span> S3Object <span class="token operator">:</span> <span class="token punctuation">{</span> Bucket <span class="token operator">:</span> <span class="token string">'imageBucket'</span> <span class="token punctuation">,</span> Name <span class="token operator">:</span> imageUrl <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> MinConfidence <span class="token operator">:</span> <span class="token number">90</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">(</span> <span class="token parameter">err <span class="token punctuation">,</span> data</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Error processing image: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> err <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Image labels: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> data <span class="token punctuation">.</span> Labels <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> sqs <span class="token punctuation">.</span> <span class="token function">deleteMessage</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> QueueUrl <span class="token operator">:</span> <span class="token string">'https://sqs.us-east-1.amazonaws.com/1234567890/imageQueue'</span> <span class="token punctuation">,</span> ReceiptHandle <span class="token operator">:</span> data <span class="token punctuation">.</span> Messages <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token punctuation">.</span> ReceiptHandle <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">(</span> <span class="token parameter">err <span class="token punctuation">,</span> data</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Error deleting image from SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> err <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Successfully deleted image from SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> data <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token number">5000</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
5. Cân bằng tải
SQS có thể được sử dụng làm bộ cân bằng tải trong ứng dụng Node.js bằng cách định tuyến các yêu cầu đến tới nhiều phiên bản của ứng dụng. Điều này cho phép ứng dụng tự động mở rộng quy mô để xử lý lượng lớn lưu lượng truy cập.
Trong trường hợp sử dụng này, bạn có thể sử dụng SQS làm bộ cân bằng tải trong ứng dụng Node.js bằng cách định tuyến các yêu cầu đến tới nhiều phiên bản của ứng dụng. Điều này cho phép ứng dụng tự động mở rộng quy mô để xử lý lượng lớn lưu lượng truy cập. Đây là một ví dụ về cách định tuyến các yêu cầu đến đến các phiên bản khác nhau của ứng dụng Node.js:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | <span class="token keyword">const</span> <span class="token constant">AWS</span> <span class="token operator">=</span> <span class="token function">require</span> <span class="token punctuation">(</span> <span class="token string">"aws-sdk"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> sqs <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">AWS <span class="token punctuation">.</span> SQS</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Create the SQS queue</span> sqs <span class="token punctuation">.</span> <span class="token function">createQueue</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> QueueName <span class="token operator">:</span> <span class="token string">"requestQueue"</span> <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">(</span> <span class="token parameter">err <span class="token punctuation">,</span> data</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Error creating SQS queue: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> err <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Successfully created SQS queue: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> data <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Send a request to the SQS queue</span> <span class="token keyword">const</span> request <span class="token operator">=</span> <span class="token punctuation">{</span> requestUrl <span class="token operator">:</span> <span class="token string">"/example"</span> <span class="token punctuation">,</span> requestMethod <span class="token operator">:</span> <span class="token string">"GET"</span> <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> params <span class="token operator">=</span> <span class="token punctuation">{</span> MessageBody <span class="token operator">:</span> <span class="token constant">JSON</span> <span class="token punctuation">.</span> <span class="token function">stringify</span> <span class="token punctuation">(</span> request <span class="token punctuation">)</span> <span class="token punctuation">,</span> QueueUrl <span class="token operator">:</span> <span class="token string">"https://sqs.us-east-1.amazonaws.com/1234567890/requestQueue"</span> <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> sqs <span class="token punctuation">.</span> <span class="token function">sendMessage</span> <span class="token punctuation">(</span> params <span class="token punctuation">,</span> <span class="token punctuation">(</span> <span class="token parameter">err <span class="token punctuation">,</span> data</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Error sending request to SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> err <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Successfully sent request to SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> data <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Poll the SQS queue for new requests</span> <span class="token function">setInterval</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> sqs <span class="token punctuation">.</span> <span class="token function">receiveMessage</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> QueueUrl <span class="token operator">:</span> <span class="token string">"https://sqs.us-east-1.amazonaws.com/1234567890/requestQueue"</span> <span class="token punctuation">,</span> MaxNumberOfMessages <span class="token operator">:</span> <span class="token number">10</span> <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">(</span> <span class="token parameter">err <span class="token punctuation">,</span> data</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Error receiving request from SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> err <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token comment">// Route request to a free instance of the application</span> <span class="token comment">//...</span> sqs <span class="token punctuation">.</span> <span class="token function">deleteMessage</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> QueueUrl <span class="token operator">:</span> <span class="token string">"https://sqs.us-east-1.amazonaws.com/1234567890/requestQueue"</span> <span class="token punctuation">,</span> ReceiptHandle <span class="token operator">:</span> data <span class="token punctuation">.</span> Messages <span class="token punctuation">[</span> <span class="token number">0</span> <span class="token punctuation">]</span> <span class="token punctuation">.</span> ReceiptHandle <span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token punctuation">(</span> <span class="token parameter">err <span class="token punctuation">,</span> data</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> err <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Error deleting request from SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> err <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">Successfully deleted request from SQS: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> data <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token number">5000</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Như bạn có thể thấy trong các mẫu mã, AWS SQS có thể được sử dụng cho nhiều trường hợp sử dụng khác nhau như xử lý tác vụ nền, vi dịch vụ tách rời, thông báo theo thời gian thực, quy trình làm việc tự động và cân bằng tải. Các mẫu mã mà tôi đã cung cấp chỉ là điểm bắt đầu và có thể được tùy chỉnh để đáp ứng các yêu cầu cụ thể của ứng dụng của bạn.
Phần kết luận
Trong bài viết này, chúng ta đã thảo luận về cách AWS Simple Queue Service (SQS) và Node.js có thể được sử dụng cùng nhau để tạo các ứng dụng mạnh mẽ và linh hoạt. Chúng tôi đã trình bày cách tạo hàng đợi SQS trong AWS, cách gửi và nhận tin nhắn đến và từ hàng đợi bằng Node.js, đồng thời chúng tôi đã cung cấp các trường hợp sử dụng trong thế giới thực mà SQS có thể được sử dụng để giải quyết các sự cố thường gặp. Hãy nhớ rằng SQS là một dịch vụ được quản lý hoàn toàn và dịch vụ này có thể giúp bạn xây dựng các vi dịch vụ và ứng dụng có thể mở rộng.
Tôi hy vọng thông tin này sẽ giúp bạn hiểu những kiến thức cơ bản về cách sử dụng SQS và Node.js cùng nhau, đồng thời cung cấp cho bạn nền tảng để tạo các ứng dụng của riêng mình. Nếu bạn muốn tìm hiểu thêm về SQS và Node.js, tôi khuyên bạn nên xem tài liệu AWS SQS và AWS SDK cho Node.js chính thức.
Như mọi khi, tôi hy vọng bạn thích bài viết này và học được điều gì đó mới. Xin cảm ơn và hẹn gặp lại các bạn trong những bài viết tiếp theo!
Nếu các bạn thích bài viết này thì hãy cho mình 1 like và subscribe để ủng hộ mình nhé. Cảm ơn bạn.