Hầu hết nếu không phải tất cả các ví dụ của NSB cho ASP.NET (hoặc MVC) đều có ứng dụng web gửi một tin nhắn bằng cách sử dụng Bus.Send
và có thể đăng ký gọi lại đơn giản, chủ yếu là cách tôi sử dụng nó trong ứng dụng của mình.Ứng dụng ASP.NET có thể xử lý các sự kiện NServiceBus không?
Điều tôi đang tự hỏi là nếu có thể và/hoặc có ý nghĩa gì đối với xử lý thư trong cùng một ứng dụng ASP.NET.
Lý do chính tôi yêu cầu là bộ nhớ đệm. Quá trình có thể diễn ra như sau:
- Người dùng bắt đầu yêu cầu từ ứng dụng web.
- Ứng dụng web gửi tin nhắn đến một máy chủ ứng dụng độc lập và ghi lại thay đổi trong cơ sở dữ liệu cục bộ.
- Trong các yêu cầu trang trong tương lai từ cùng một người dùng, ứng dụng web nhận thức được sự thay đổi và liệt kê nó trong trạng thái "đang chờ xử lý".
- Một loạt nội dung xảy ra trên back-end và cuối cùng các yêu cầu được chấp thuận hoặc bị từ chối. Sự kiện được xuất bản tham chiếu đến yêu cầu ban đầu.
- Tại thời điểm này, ứng dụng web phải bắt đầu hiển thị thông tin mới nhất.
Bây giờ, trong ứng dụng web thực sự, gần như chắc chắn rằng yêu cầu đang chờ xử lý này sẽ được lưu vào bộ nhớ cache, có thể trong một thời gian dài, bởi vì ứng dụng phải truy vấn cơ sở dữ liệu để thay đổi đang chờ xử lý mỗi lần người dùng yêu cầu thông tin hiện tại. Vì vậy, khi yêu cầu cuối cùng hoàn thành trên back-end - có thể mất một phút hoặc một ngày - ứng dụng web cần, ở mức tối thiểu, để vô hiệu hóa mục nhập bộ nhớ cache này và thực hiện một tra cứu DB khác.
Bây giờ tôi nhận ra rằng điều này có thể được quản lý với các đối tượng SqlDependency
và vân vân, nhưng hãy giả sử rằng chúng không có sẵn - có lẽ nó không phải là back-end của SQL Server hoặc có lẽ truy vấn thông tin hiện tại đi tới dịch vụ web , bất cứ điều gì. Câu hỏi đặt ra là, làm cách nào để ứng dụng web nhận thức được sự thay đổi về trạng thái?
Nếu số là có thể xử lý thông điệp NServiceBus trong ứng dụng ASP.NET, ngữ cảnh của trình xử lý là gì? Nói cách khác, container IoC sẽ phải tiêm một loạt các phụ thuộc, nhưng phạm vi của chúng là gì? Điều này có thực hiện trong bối cảnh yêu cầu HTTP không? Hay mọi thứ cần phải là tĩnh/singleton cho trình xử lý tin nhắn?
Có cách tiếp cận tốt hơn/được đề xuất cho loại vấn đề này không?
Tôi không biết về việc xử lý sự kiện trong IIS, nhưng bất cứ khi nào bạn giới thiệu quy trình không đồng bộ, bạn sẽ phải đối phó với tính nhất quán cuối cùng. Ứng dụng web có cần phải cập nhật ngay lập tức hoặc bạn có thể thoát khỏi việc làm mới bộ nhớ cache mỗi phút, 15 phút, hàng giờ không? – Ryan
@Ryan: Chúng ta có thể thoát khỏi nó không? Có lẽ. Tôi có thoải mái với nó từ một khách hàng POV? Không hẳn. Tôi ổn với EC nói chung - ví dụ, tôi nhận ra rằng không có gì sẽ được xử lý nếu các trang web hoặc hồ bơi ứng dụng không chạy, cho đến khi nó khởi động lại, và * rằng * là hoàn toàn tốt - nhưng thông tin nên được lên -to-date trong vòng vài phút của một số người dùng thực sự yêu cầu nó và dữ liệu thực sự cần được lưu trong bộ nhớ cache lâu hơn nữa. Sự khác biệt này thường được giải quyết bằng cách vô hiệu hóa bộ nhớ cache dựa trên thủ công hoặc phụ thuộc. – Aaronaught
Đúng, và đó là những gì tôi làm trong các ứng dụng đồng bộ của mình. Đối với NSB tôi chỉ cần nhấn DB mỗi lần nhưng tôi chỉ có một ứng dụng văn phòng trở lại với một vài người dùng. – Ryan