2011-11-21 16 views
6

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> 

queue

+0

Questa coda è privata per la tua applicazione? – iandotkelly

+0

Sì, è una coda privata. –

+0

Stai sicuramente considerando la priorità del messaggio e non la priorità della coda, che ha un valore predefinito di 0 – iandotkelly

risposta

Problemi correlati