2009-08-31 29 views
7

Tôi xem xét khái niệm xếp hàng cho các ứng dụng web (ví dụ: đặt một số loại công việc trong hàng đợi để hoàn thành bởi một công nhân riêng biệt, thay vì được hoàn thành trong chu kỳ yêu cầu web).Giải pháp xếp hàng cho ASP.NET MVC

Tôi muốn biết nếu có bất kỳ giải pháp tốt tồn tại cho điều này có thể được sử dụng trong môi trường ASP.NET MVC.

Có ai có bất kỳ trải nghiệm (tốt hay xấu) nào không?

Cảm ơn bạn!

UPDATE:

Chỉ cần làm rõ, tôi không nói về xếp hàng yêu cầu gửi đến. Tôi sẽ cố gắng để minh họa cho những gì tôi có nghĩa là ...

1) tình hình tiêu chuẩn:

  • Yêu cầu từ trình duyệt
  • xử lý máy chủ bắt đầu
  • việc dài bắt đầu
  • Công việc lâu dài đã hoàn thành
  • xử lý máy chủ xong
  • đáp ứng trở lại trình duyệt

2) Những gì tôi đang nhìn vào:

  • Requsest từ trình duyệt
  • xử lý máy chủ bắt đầu
  • việc dài đặt trong hàng đợi
  • Máy chủ xử lý xong
  • đáp ứng trở lại trình duyệt

Và trong quá trình khác (có thể là sau khi phản ứng đã được gửi):

  • việc lâu lấy từ hàng đợi
  • việc dài bắt đầu
  • việc dài đã hoàn thành

Trong trường hợp đầu tiên người dùng đã waite d một thời gian dài cho máy chủ resoponse, trong lần thứ hai nó đã được nhanh chóng.

Tất nhiên có một số loại công việc phù hợp cho việc này, một số công việc sẽ không phù hợp.

UPDATE2:

Các khách hàng không cần phải được cập nhật ngay lập tức với các kết quả của công việc lâu dài.Các thay đổi sẽ chỉ hiển thị trong ứng dụng bất cứ khi nào người dùng xảy ra để làm mới trang (sau khi công việc đã hoàn thành khóa học).

Hãy suy nghĩ về một số điều xảy ra trong ngăn xếp tràn - chúng không được cập nhật ngay trong từng phần của ứng dụng, nhưng điều này khá nhanh - tôi nghi ngờ một số công việc này đang được xếp hàng đợi.

+0

Việc xếp hàng được thực hiện bởi IIS. Mỗi yêu cầu được đưa vào một hàng đợi được xử lý bởi nhân viên xử lý. Bảo trì các quy trình công nhân và xử lý yêu cầu/phản hồi được thực hiện bởi IIS. Tại sao thực hiện một cơ chế xếp hàng thứ hai? – Christian13467

+1

@ Christian13467: Tôi đang nói về một khái niệm khác - hãy xem giải thích trong bản cập nhật. – UpTheCreek

Trả lời

5

Post dữ liệu công việc trong một MSMQ queue và có một quá trình Windows Service các mục trong hàng đợi. Hoặc, để yêu cầu web sinh ra một quy trình xử lý các mục trong hàng đợi.

+0

Đây là một mức độ thấp hơn một chút so với tôi đã suy nghĩ, nhưng có lẽ tôi đang nhìn vào nó một cách sai lầm - Tôi không có bất kỳ kỹ năng MSMQ, nhưng tôi sẽ nhìn vào nó - cảm ơn. – UpTheCreek

0

Tôi nghĩ rằng bình luận Chrisitan của có thể là câu trả lời của bạn, nhưng xem xét Tôi không biết nhiều về IIS và xếp hàng với nó, giải pháp của tôi sẽ là:

Thực hiện yêu cầu không đồng bộ và tải các chi tiết công việc trong cơ sở dữ liệu. Sau đó, có một công việc để lặp qua cơ sở dữ liệu và xử lý các chi tiết công việc. Tôi làm điều này cho một trong các trang web của tôi. Có thể không phải là giải pháp tốt nhất hiện có, nhưng nó được hoàn thành công việc.

EDIT

câu trả lời của tôi vẫn có thể làm việc, nhưng bạn sẽ cần phải có một số cơ chế bỏ phiếu trên máy khách để liên tục kiểm tra các cơ sở dữ liệu để xem công việc của người dùng đó được thực hiện, sau đó lấy các dữ liệu bạn cần.

+1

Không, ý kiến ​​của Christian không phải là câu trả lời của tôi;) Tôi đã coi tuyến đường 'cuộn của riêng bạn bằng cách sử dụng DB', nhưng tôi đang tìm kiếm một thứ gì đó có sức mạnh hơn và được xây dựng cho mục đích. Tôi không muốn tái phát minh ra bánh xe (tôi có lẽ sẽ không hoàn toàn tròn;) – UpTheCreek

+0

Chỉ cần làm rõ chỉnh sửa lại - khách hàng sẽ không cần phải cập nhật về kết quả của công việc để không yêu cầu bỏ phiếu. – UpTheCreek

2

Bạn có thể kiểm tra sử dụng ESB. Tôi đã chơi xung quanh với MassTransit: http://code.google.com/p/masstransit/ - tài liệu là (hoặc ít nhất là) một chút thưa thớt, nhưng thật dễ dàng để thực hiện.

Ngoài ra, tôi phát triển các ứng dụng để chạy trên Amazon EC2 và hoàn toàn yêu thích Dịch vụ AmazonSQS của họ.

Cảm ơn,

Hal

+0

Tôi sẽ kiểm tra Mass Transit out - Tôi nhận thấy nó được xây dựng trên MSMQ. Một tương đương với somehting như Amazon SQS có lẽ là những gì tôi đang tìm kiếm - Cảm ơn. – UpTheCreek

3

Các Rhino Bus Service là một giải pháp mà có thể làm việc cho bạn:
http://ayende.com/Blog/archive/2008/12/17/rhino-service-bus.aspx

+0

Cảm ơn - Tôi sẽ kiểm tra. Tôi rất thích đọc các bài viết của Ayende về các chủ đề khác trong quá khứ :) Điều này đã sẵn sàng cho sản xuất chưa? – UpTheCreek

+0

Cá nhân tôi chưa bao giờ sử dụng nó trong sản xuất, tuy nhiên, tôi biết những người đã sử dụng nó trong sản xuất. –

0

có bạn coi MSMQ? Không có gì ngăn cản bạn sử dụng nó từ bên trong MVC, và nó khá đơn giản để bắt đầu.

1

Vì bạn đã đề cập trong nhận xét khác rằng bạn đang tìm kiếm một dịch vụ tương đương với dịch vụ sqs của amazon ... bạn có thể muốn xem xét Windows Azure. Họ có hàng đợi tương đương api:
http://msdn.microsoft.com/en-us/library/dd179363.aspx

1

Tôi đã triển khai mẫu này bằng cách yêu cầu máy chủ web gọi dịch vụ WCF không đồng bộ. Các trình thuật sĩ VS sẽ tạo ra các proxy không đồng bộ cho bạn khi bạn tiêu thụ một dịch vụ WCF. Nếu bạn phải đảm bảo giao hàng theo yêu cầu đến dịch vụ, bạn có thể sử dụng MSMQ làm lớp vận chuyển cho dịch vụ WCF.

Các vấn đề liên quan