【发布时间】:2012-01-03 01:21:11
【问题描述】:
我在更改提交到定义的 MSMQ 的消息的优先级时遇到问题。 每当我设置消息优先级时,它似乎永远不会影响队列中消息的优先级 这是我正在做的一个片段:
static public void QueueBatchItem(MessageQueue mq, MessageQueueTransaction msgTx, MessagePriority msgPriority)
{
using (System.Messaging.Message mm = new System.Messaging.Message())
{
string messageLabel = Guid.NewGuid().ToString();
System.Messaging.XmlMessageFormatter formatter = new XmlMessageFormatter();
RunSimulationRequestDTO dto = new RunSimulationRequestDTO();
dto.RetryCount = 0;
dto.BatchHeaderID = batchID;
dto.MSMQLabel = messageLabel;
mq.MessageReadPropertyFilter.Priority = true;
mm.Priority = msgPriority;
mm.Body = dto;
mm.Label = messageLabel;
mm.Formatter = formatter;
mq.Send(mm, msgTx);
}
}
如果我通过代码进行调试,默认优先级为“正常”,当项目发送到队列时,优先级显示为 0,并带有“队列消息”。我可以将优先级作为 MessagePriority.High 或 8 个可能值中的任何一个传递,它永远不会改变优先级。
我在这方面遗漏了什么...
Message mm = new Message();
mm.Priority = MessagePriority.High;
我什至用 MSDN 示例在我的主代码之外尝试了一些小测试应用程序,优先级数字从未改变。
谢谢。
编辑: 我通过将其设置为 AboveNormal 来确保我看到的优先级不是来自线程
<ThreadManagersConfiguration DefaultSleepBetweenPolls="5000" DefaultMsmqServer=".">
<ThreadManagers>
<add DisplayName="BatchSimulationManager"
RequestMSMQ=".\Private$\BatchSimulationRequest"
ResponseMSMQ=""
FailedMSMQ=".\Private$\BatchSimulationFailure"
Priority="AboveNormal"
TransactionalMode="RollbackTransaction"
MaxThreads="16"
SleepTimeBetweenPolling="10000"
ProcessModel="BATCH"/>
</ThreadManagers>
</ThreadManagersConfiguration>
【问题讨论】:
-
这是您的应用程序私有的队列吗?
-
你看的肯定是消息优先级,而不是队列优先级,默认值为0