2009-08-21 29 views
8

tôi đang gửi thư trong MSMQ bằng cách đặt mức độ ưu tiên của thư. sử dụng C#Nhận thư theo ưu tiên từ MSMQ

tôi có thể nhận được thông báo từ MSMQ có mức độ ưu tiên cao trước không?

giống như chúng tôi nhận được trong Hàng đợi ưu tiên.

và một điều nữa ..

giả sử có ba cấp độ ưu tiên

0 - cao 1- vừa 2 - thấp

chuỗi đợi là 2001122221111100

nay nếu tôi gửi tin nhắn với ưu tiên cao (0), nơi nó sẽ được đặt ?? bằng cách đặt ưu tiên trong MSMQ. nó sẽ hoạt động như Hàng đợi ưu tiên thực tế?

Trả lời

12

MSMQ không hỗ trợ xếp hàng ưu tiên các thư, tuy nhiên các thư có cùng mức độ ưu tiên được xử lý theo thứ tự đến khi được khử. Ví dụ, nếu bạn gửi 3 tin nhắn, hai ưu tiên 7 và một ưu tiên 0, thì thông điệp thứ nhất của ưu tiên 7 đã nhận sẽ bị khử, tiếp theo là thông điệp thứ hai của ưu tiên 7 đã nhận được, cuối cùng là theo sau là tin nhắn priority 0. Bạn không cần phải làm bất cứ điều gì đặc biệt để xử lý các thư đã xếp hàng theo thứ tự ưu tiên của chúng ... tuy nhiên, hãy lưu ý rằng thông báo "cũ nhất" của bất kỳ mức độ ưu tiên nào sẽ bị xóa trước thông báo "mới nhất" có cùng mức độ ưu tiên. Cũng cần lưu ý rằng bất kỳ thông điệp giao dịch nào đều bỏ qua ưu tiên của chúng, IIRC.

EDIT:

Trong khi MSMQ hỗ trợ ưu tiên, nó sẽ không cư xử giống hệt như một hàng đợi ưu tiên. Hai thuật toán khác nhau, với MSMQ phức tạp hơn nhiều. Khi bạn đặt mức độ ưu tiên của tin nhắn, không chỉ trợ giúp xác định thứ tự mà thông báo đó sẽ bị xóa, nó cũng ảnh hưởng đến mức độ ưu tiên mà thông điệp đó sẽ truyền qua dịch vụ MSMQ từ người gửi/nhà xuất bản đến người nhận/người đăng ký . Giả sử bạn sử dụng ba ưu tiên thấp nhất (MSMQ hỗ trợ 8 ưu tiên, từ 0 (thấp nhất) đến 7 (cao nhất)), kịch bản sau đây có thể xảy ra:

0 = thấp, 1 = trung bình, 2 = cao

Tên người gửi gửi tin nhắn với những ưu tiên được đưa ra vào thời gian quy định (phút: giây):

0 @ 1:00 
2 @ 1:00 
0 @ 1:01 
1 @ 1:02 
1 @ 1:03 
0 @ 2:01 
2 @ 2:01 

Receiver hàng đợi lên thông điệp trong hàng đợi của nó theo thứ tự sau (giả sử không có tin nhắn được dequeued):

2 @ 1:00 
2 @ 2:01 
1 @ 1:02 
1 @ 1:03 
0 @ 1:00 
0 @ 1:01 
0 @ 2:01 

Khi bạn xử lý thư từ hàng đợi của người nhận, chúng sẽ được xử lý theo thứ tự ưu tiên, cũng như thời gian nhận được.

+0

giả sử có hai thông báo thấp, cao và có thông báo mới có mức độ ưu tiên "cao nhất". nó sẽ được đặt ở đâu? và thông báo này có bị truất quyền trước không? – Mohsan

+0

Dựa trên câu hỏi đã chỉnh sửa của bạn, tôi nghĩ bạn có giá trị ưu tiên ngược. Trong MSMQ, số ưu tiên càng cao thì ưu tiên càng cao. Điều đó sẽ làm cho 0 = thấp, 1 = trung bình, 2 = cao. Trong trường hợp bạn muốn có mức ưu tiên "cao nhất", bạn sẽ có 3 = cao nhất. Nếu một thông điệp đến với ưu tiên 3 (cao nhất), nó sẽ bị loại bỏ trước, trước bất kỳ thông báo nào khác với bất kỳ ưu tiên nào trong số ba ưu tiên được liệt kê khác. – jrista

+0

Lưu ý cuối cùng ... MSMQ sẽ không bao giờ hoạt động giống như hàng đợi ưu tiên. Hàng đợi ưu tiên là một thuật toán đơn giản hơn nhiều so với thứ tự thông điệp của MSMQ. Vui lòng xem câu trả lời được cập nhật của tôi để có mô tả tốt hơn về cách MSMQ xử lý các thư chờ đợi để được dequeued. – jrista