Domanda

Ho la seguente configurazione e il problema con MSMQ.In base alla precedente esperienza con MSMQ sto scommettendo che essa è qualcosa di semplice, mi manca, ma ho appena don so cosa sia.

Il Programma Di Installazione

Ho 3 server web con carico bilanciato (consente di chiamare loro Server W1, W2 e W3) e 1 server che elabora alcuni eventi/dati via web le richieste (che chiamerò P).Tutti e 3 i server web, una volta che si verifica un evento particolare all'interno dell'applicazione web, invia un messaggio a una coda privata remota sul Server P, che poi ogni messaggio dalla coda e svolgere alcune attività.

Il Problema

Per la maggior parte - a indovinare il 95% del tempo - tutto funziona bene, ma di tanto in tanto il Server P non riceve i messaggi dal server web.Questo è quanto W1, W2 o W3 non sono l'invio di loro o non vengono ricevuti da P, Non posso dire.Questo significa che mi sto perdendo vitale eventi da parte degli utenti di applicazioni web ma non riesco a trovare eventuali errori elencati nel mio log.

Dettagli

Ecco tutti i dettagli posso pensare che può aiutare a spiegare il mio setup e quello che ho capito finora:

  • La coda privata sul Server P non è transazionale.
  • La coda privata dispone di autorizzazioni per l'installazione Tutti sia di Inviare e Ricevere Messaggi.
  • Questo è il codice che uso io (C#) per inviare il messaggio alla coda privata remota:

    var queue = new MessageQueue(@"FormatName:DIRECT=OS:ServerP\PRIVATE$\MyMessageQueue");
    
    var defaultProperties = queue.DefaultPropertiesToSend;
    defaultProperties.AcknowledgeType = AcknowledgeTypes.FullReachQueue | AcknowledgeTypes.FullReceive;
    defaultProperties.Recoverable = true;
    defaultProperties.UseDeadLetterQueue = true;
    defaultProperties.UseJournalQueue = true;
    
    queue.Send(requestData);
    
  • Di inviare il messaggio utilizzando il codice di cui sopra non sembrano generare un'eccezione - se lo ha fatto il mio gestore di errore nell'applicazione web, avrebbe catturato e registrato, così sto assumendo è inviato.

  • Ci sono code in uscita su W1, W2 e W3 tutti rivolti al privato coda P - tutti questi sono vuoti.
  • Su W1, W2 e W3 Non sono "morti-lettera" i messaggi.
  • Su P il privato coda è vuota in modo che i messaggi sono in corso di elaborazione (che posso verificare dal mio database).
  • Su P non ci sono "morti-lettera" i messaggi.Ci sono i messaggi diario, ma non sembra corrispondere alla recente data/tempi.
  • Tutti i server sono in esecuzione Windows Server 2012.

La maggior parte del tempo i messaggi vengono inviati, ricevuti e trattati bene, ma, senza alcun motivo evidente, a volte non sono.Chiunque può vedere che cosa sta andando male?O mi spieghi come posso provare a capire che cosa sta accadendo?

È stato utile?

Soluzione

Sei sicuro che il ricevitore P non crash/perdere il messaggio in qualche modo?Perché la coda non è transazionale, se in qualche modo l'elaborazione ha esito negativo che si è perso il messaggio.

Comunque, ci sono molte possibili cause per cui questo potrebbe non riuscire.Che tipo di accesso hai (DEBUG/INFO livelli)?

Ritengo che i seguenti aiuterà a rintracciare il problema:

  1. Quando viene generato un evento nel web app.
  2. A destra prima di inviare un evento dal web app, tramite MSMQ.
  3. Il ricevitore quando si riceve un messaggio dalla coda.

In questo modo si poteva almeno pareggiare i messaggi inviati i messaggi ricevuti e trattati messaggi.

Come nota a margine, quando si controlla per morto-lettera messaggi di farlo sul computer di origine e su qualsiasi intermediario luppolo, non la destinazione.Se non si dispone di uno qualsiasi di luppolo, poi saranno passati non recapitabili coda sul server web.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top