Ho riscontrato un problema nella modifica della priorità di un messaggio inviato a un MSMQ definito. Ogni volta che ho impostato la priorità del messaggio non sembra mai influenzare la priorità del messaggio all'interno della coda Ecco uno snipet di quello che sto facendo:Come posso modificare la priorità di un messaggio in 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);
}
}
Se il debug attraverso il codice la priorità predefinita è 'normale 'e quando un articolo viene inviato alla coda, la priorità viene visualizzata come 0 con' Messaggi in coda '. Posso passare la priorità come MessagePriority.High o uno degli 8 possibili valori e non cambia mai la priorità.
Quello che mi manca in questo ... pochi esempi che ho visto avere tutte le cose indicate ha come base
Message mm = new Message();
mm.Priority = MessagePriority.High;
Ho anche provato solo piccole applicazioni di test al di fuori del mio codice principale con gli esempi MSDN e il numero di priorità non cambiano mai.
grazie.
edit: ho fatto in modo che la priorità stavo vedendo non veniva dal thread impostandolo su 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>
Questa coda è privata per la tua applicazione? – iandotkelly
Sì, è una coda privata. –
Stai sicuramente considerando la priorità del messaggio e non la priorità della coda, che ha un valore predefinito di 0 – iandotkelly