Tôi muốn tạo hàng đợi ưu tiên có ưu tiên nội bộ để các messags được ưu tiên cao hơn được bật trước tiên bằng ServiceStack. Việc triển khai ServiceStack RedisMQ cung cấp thiết lập Mức độ ưu tiên của loại dài trên giao diện IMessage của nó. Tôi hy vọng rằng thư được gửi với giá trị cao hơn trên thuộc tính Ưu tiên sẽ được bật trước tiên từ hàng đợi. Các thử nghiệm của tôi cho thấy rằng thông báo có Mức độ ưu tiên> 0 được đặt trên Redis "Mq: MyDto.priorityq" trong khi bất kỳ giá trị nào khác đặt thông báo vào hàng đợi bình thường "Mq: MyDto.inq".Servicestack Ưu tiên nội bộ trong RedisMQ PriorityQueue
Đây là một số mẫu mã minh họa những gì tôi đang cố gắng để hoàn thành:
using (var producer = MsgFactory.CreateMessageProducer())
{
var lowPrioMsg = new Message<MyDto>(lowPrioDto);
lowPrioMsg = (long)1;
producer.Publish<MyDto>(lowPrioMsg);
var highPrioMsg = new Message<MyDto>(highPrioDto);
highPrioMsg.Priority = (long)100;
producer.Publish<MyDto>(highPrioMsg);
}
Nói cách khác, tôi muốn highPrioMsg với Priority = 100 được popped trước lowPrioMsg với Mức độ ưu tiên = 1. Tuy nhiên, trong thực tế, những thông điệp này dường như tuân theo nguyên tắc FIFO tuần tự.
Có cách nào tôi có thể định cấu hình ServiceStack RedisMQ hoạt động như tôi mong đợi với Ưu tiên nội bộ trong PriorityQueue không?
Hoặc là lựa chọn duy nhất của tôi để sử dụng hàng đợi thông thường hoặc hàng đợi ưu tiên? Trong trường hợp đó, tại sao phải sử dụng dài cho thiết bị Ưu tiên thay vì một boolean?
Ok, câu trả lời hay. Cảm ơn! –