Tôi có một máy chủ duy nhất chạy trên rackspace đang lưu trữ một ứng dụng web PHP duy nhất.Làm thế nào để sử dụng AWS SQS/SNS như một hàng đợi thông báo đẩy cho các tác vụ xử lý nặng thông qua PHP?
Ứng dụng web PHP sẽ chấp nhận gửi biểu mẫu, sau đó cần thực hiện tác vụ dựa trên các mục nhập trường biểu mẫu.
Nhiệm vụ (gọi là tác vụ tạo siêu dữ liệu) yêu cầu khá nhiều thời gian xử lý. Tôi đã tự hỏi làm thế nào để cho phép các hình thức nộp là một đơn giản lưu vào cơ sở dữ liệu và ngay lập tức hiển thị trang thành công cho người dùng trong khi chạy các tác vụ tạo siêu dữ liệu trong nền.
Tôi đã cài đặt "aws/aws-sdk-php": "~3.11"
bằng cách sử dụng trình soạn nhạc vào cùng một ứng dụng web.
Kế hoạch của tôi là ban đầu này:
mã mà xử lý các hình thức trình
$result = $model->save($_POST);
// this code will send the information to either SQS or SNS
$awsClient->sendsMessage($_POST);
if ($result) {
$this->redirect('success.html');
}
Tôi đã đọc về fanout architecture nêu bởi AWS.
vấn đề của tôi với ví dụ kiến trúc fanout (như tôi hiểu nó) là này:
- máy chủ sẽ gửi thông điệp cho một trong hai SQS hay SNS cũng sẽ có cùng một máy chủ mà xử lý các nhiệm vụ tạo ra siêu dữ liệu. Trong thực tế, đó là cùng một ứng dụng web.
- SQS đáp ứng phần hàng đợi (vì tôi muốn thực hiện các tác vụ trong FIFO và các tác vụ mất nhiều thời gian để hoàn thành). Tuy nhiên, nó đòi hỏi ứng dụng web của tôi để thăm dò ý kiến SQS liên tục. Tôi muốn một thông báo đẩy (từ AWS đến ứng dụng web của tôi) hơn là ứng dụng web của tôi bỏ phiếu AWS liên tục để kiểm tra các nhiệm vụ thực thi.
Tôi tìm thấy một giải pháp khả thi đề nghị here
Các giải pháp được đề xuất là:
gửi tin nhắn đến một chủ đề SNS.
Chủ đề SNS sẽ gửi cả hàng đợi SQS và ứng dụng web của tôi.
ứng dụng web của tôi, sau khi được kích hoạt, sẽ thăm dò ý kiến hàng đợi SQS cùng mà bây giờ đã xếp hàng đợi thông điệp liên tục cho đến khi hàng đợi rỗng
Hạn chế tôi thấy từ này là ứng dụng web của tôi sẽ thăm dò hàng đợi trước khi hàng đợi có thông điệp.
Cách tốt nhất để triển khai hàng đợi đẩy bằng dịch vụ AWS là gì?
Cảm ơn Gee. Tôi không nghĩ về nó như thế. Câu trả lời tuyệt vời! Tôi cho bạn thêm 50 điểm cho điều đó khi tiền thưởng có thể được mở vào ngày mai. –
Xin lỗi. Chỉ bây giờ tôi mới trao cho bạn thêm 50 điểm –