2011-11-06 32 views
5

Trong dự án của tôi, tôi nhận được một giao dịch từ máy khách, sau đó xử lý nó và trả lại trạng thái cho khách hàng qua WCF. Như bạn biết tôi phải bằng cách nào đó lưu giao dịch cho các mục đích phục hồi và kiên trì.MSMQ cho sự kiên trì?

Tôi đang nghĩ đến việc sử dụng MSMQ cho mục đích đó. Khi giao dịch bắt đầu, tôi sẽ "lưu" nó trên MSMQ (lưu cơ sở dữ liệu sẽ xảy ra trong một loạt vì lý do hiệu suất).

MSMQ có phù hợp với điều đó không? Bạn có biết cách nào tốt hơn để tạo ra sự bền bỉ? Cách tốt nhất để "sao lưu" giao dịch và giữ hiệu suất cao là gì?

+0

MSMQ cho chủ tịch! – stefan

Trả lời

5

Khi chọn một công nghệ tôi nghĩ rằng nó rất hữu ích để xem xét không chỉ thể công nghệ đáp ứng nhu cầu của bạn, mà còn cho dù đó là thiết kế để đáp ứng nhu cầu của bạn. Bởi điều này tôi có nghĩa là bạn nên chọn lựa chọn tốt nhất thay vì chỉ là lựa chọn đầu tiên có vẻ đủ tốt. Bạn có thể giải quyết vấn đề này bằng cách ghi nhật ký hoặc tệp văn bản hoặc nhiều phương tiện khác, nhưng điều đó không có nghĩa là bạn nên làm như vậy.

trật tự của tôi về sở thích trong tình huống này sẽ

  1. cơ sở dữ liệu
  2. MSMQ
  3. mọi thứ khác

Nếu nó không thể lưu các giao dịch cơ sở dữ liệu vì lý do gì sau đó MSMQ có thể giúp bạn ở đây. Nó sẽ hoạt động tốt hơn việc mở một kết nối cơ sở dữ liệu & cam kết cung cấp một lớp kiên trì 'tốt'. Nhược điểm là nó có nhiều mã và một điểm thất bại khác cho ứng dụng của bạn (không phải là nó sẽ thất bại nếu được viết đúng cách, nhưng nhiều mã hơn nghĩa là nhiều nơi hơn cho các lỗi).

Bạn có thể ném các giao dịch của bạn vào một hàng đợi rất dễ dàng sử dụng một cái gì đó như thế này

private string queuePath = @".\Private$\myQueue"; 
MessageQueue queue = new MessageQueue(queuePath); 

Message message = new Messge(); 
message.Id = "messageId"; 
message.Body = "my content"; 

queue.Send(message, transaction); 
transaction.Complete(); 
queue.Close(); 

và sau đó lấy chúng sau này thông qua các thuộc tính truy vấn: MSMQ querying for a specific message. Có rất nhiều chức năng khác ngoài hộp nhưng vẫn đơn giản.

Một số câu hỏi có liên quan:

+0

Cảm ơn bạn rất thông tin – guyl

2

Cách tiếp cận phổ biến được sử dụng bởi cơ sở dữ liệu và hệ thống tệp được gọi là Ghi nhật ký ghi nhật ký. Đây không phải là tuy nhiên tầm thường để thực hiện. Bạn có thể tìm thấy chi tiết tại đây ...

Wikipedia: Write-Ahead Logging

+0

+1 để giới thiệu wal. – guyl

+0

Bạn có thể trả lời http://stackoverflow.com/questions/9702379/queuing-in-oneway-wcf-messages-using-windows-service-and-sql-server không? – Lijo

3

Tôi nghĩ rằng bạn đang tìm kiếm SQL Server Service Broker. Tất cả mọi thứ mà 10 năm trước chúng tôi đã làm với MSMQ chúng tôi hiện đang làm với các nhà môi giới dịch vụ. Nó hoạt động tốt.

+0

Nhà môi giới dịch vụ rất tuyệt vời nhưng dựa vào tính khả dụng của cơ sở dữ liệu và thời gian phản hồi, điều này có thể là điều mà OP đang cố gắng giải quyết. –

+0

Điều đó áp dụng cho bất kỳ hệ thống xếp hàng giao dịch nào vì vậy nó không liên quan đến một sản phẩm cụ thể. – Deleted

+0

@ChrisSmith Điều đó có hướng vào tôi không? Trong trường hợp này, MSMQ sẽ chạy trên máy chủ web, vì vậy không có mối quan tâm 'sẵn có' - nếu máy chủ web trực tuyến, do đó, đó là kho lưu trữ thư, trong khi cơ sở dữ liệu thường chạy trên một máy khác. Và thời gian đáp ứng là rất tốt vì MSMQ chạy cục bộ, trong khi cơ sở dữ liệu có thể ở đâu đó trên khắp thế giới. –

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