Hãy để tôi chia sẻ kinh nghiệm của tôi với bạn trong lĩnh vực này, bạn có thể tìm thấy nó hữu ích.
Nhóm của tôi trước tiên đã sử dụng hàng đợi giao dịch MSMQ để cung cấp các dịch vụ không đồng bộ của chúng tôi (có thể là IIS được lưu trữ hoặc WS). Vấn đề lớn nhất chúng tôi gặp phải là vấn đề MS DTC dưới tải nặng, như 100 tin nhắn/giây tải; tất cả những gì cần làm là một hoạt động cơ sở dữ liệu chậm ở đâu đó để bắt đầu gây ra ngoại lệ thời gian chờ và MS DTC sẽ đưa ngôi nhà xuống để nói (giao dịch thực sự sẽ bị mất nếu mọi thứ trở nên tồi tệ) và mặc dù chúng tôi không chắc chắn 100% gốc gây ra cho đến ngày nay, chúng tôi nghi ngờ MS DTC trong một môi trường nhóm có một số vấn đề nghiêm trọng.
Vì lý do này, chúng tôi bắt đầu xem xét các giải pháp khác nhau. Dịch vụ xe buýt cho Windows Server (phiên bản tại chỗ của Azure Service Bus) trông đầy hứa hẹn, nhưng nó không giao dịch nên không phù hợp với yêu cầu của chúng tôi.
Cuối cùng, chúng tôi đã quyết định phương pháp tiếp cận theo cách riêng của bạn, một phương pháp được chúng tôi đề xuất cho những người đã tạo Xe buýt dịch vụ Azure, vì các yêu cầu giao dịch của chúng tôi. Về cơ bản, chúng tôi đã làm theo mô hình Vai trò Công nhân Azure cho vai trò công nhân sẽ được cung cấp thông qua một số hàng đợi; một mô hình chặn bỏ phiếu.
Thành thật mà nói, điều này tốt hơn nhiều so với bất kỳ điều gì khác mà chúng tôi đã sử dụng. Mã giả cho một dịch vụ như vậy là:
hasMsg = true
while(true)
if(!hasMsg)
sleep
msg = GetNextMessage
if(msg == null)
hasMsg = false
else
hasMsg = true
Process(msg);
Chúng tôi thấy rằng việc sử dụng CPU thấp hơn đáng kể theo cách này (thấp hơn các dịch vụ WCF truyền thống).
Phần khó khăn của khóa học là xử lý giao dịch. Nếu bạn muốn có nhiều phiên bản dịch vụ của bạn đọc từ hàng đợi, bạn sẽ cần sử dụng read-past/updlock trong sql của bạn, và cũng có dịch vụ .net của bạn tham gia vào các giao dịch theo cách sẽ cuộn trở lại nên dịch vụ không thành công. trong trường hợp này, bạn sẽ muốn đi với hàng đợi thử lại/độc như bảng ngoài hàng đợi thông thường của bạn.
câu hỏi đã được hỏi nhiều lần về SO; vui lòng tìm kiếm SO –
Liên kết tốt trên khu vực chung. http://rusanu.com/2010/03/26/using-tables-as-queues/ Chỉnh sửa: Không chắc chắn rằng nó trả lời câu hỏi cụ thể của bạn về việc chặn cho đến khi các mục được thêm vào hàng đợi. Ngoài ra tôi không chắc chắn tôi đã nhìn thấy câu hỏi cụ thể trước khi trên SO. –
Bạn biết rằng SQL Server có * hàng đợi * thực tế, phải không? http://msdn.microsoft.com/en-us/library/ms345108(v=sql.90).aspx –