2010-10-28 16 views
15

Aunque mi pregunta es similar a algunos de ellos ya se encuentran en SO, los post no me ayudó, así que aquí está:mensajes MSMQ está atascado en la cola de salida

dado:

  • Dos máquinas en las el mismo segmento (de forma natural en el mismo dominio, en realidad en el mismo escritorio)
  • Ambas máquinas son Windows 7 estaciones de trabajo
  • Ambas máquinas tienen cortafuegos desactivado
  • Ambas máquinas se ven más allá del horizonte er (ping funciona)
  • Hay una cola privada de mensajes no transaccionales prueba en uno de ellos.
  • La máquina remitente tiene HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSMQ\SimpleClient\@BinaryEnabled = 'Yes'
  • El propietario cola envía un mensaje desde otra máquina
  • El mensaje se ha quedado atascado en la cola de salida, sin llegar nunca a la meta.
  • Cuando se envía desde la misma máquina (es decir, localmente), el mensaje llega correctamente.

se envía el mensaje usando el siguiente código:

var q = new MessageQueue(@"FormatName:Direct=OS:il-mark-lap\private$\test"); 
q.Send(string.Format("Test message sent at {0} from {1}", DateTime.Now, Environment.MachineName)); 

Dónde il-marca de vueltas es la dirección de la máquina con la cola.

¿Qué demonios tengo que hacer para que funcione?

Muchas gracias.

+0

Estoy frente a la misma cuestión. Mark, ¿alguna vez sacaste el fondo de esto? – user923849

+0

No lo recuerdo ahora. De todos modos, msmq tiene un montón de problemas, así que acabamos de abandonarlo. Mi consejo: mantente alejado de eso. – mark

+0

He añadido una recompensa ya que tenemos el mismo problema. Los mensajes solo se sientan en la cola saliente, incluso cuando se usa DIRECT = TCP. – 79E09796

Respuesta

1

Normalmente, las colas privadas en una LAN pueden enviarse mensajes entre ellas. Pero a veces una cola privada puede ser inalcanzable y hace que otros creen colas de salida ... No sé por qué.

+1

siempre se crean colas salientes. – BlackICE

8

Creo que encontré la respuesta a este problema, estaba teniendo lo que parece ser el mismo problema, el mío solo se atascó después de no haber enviado mensajes al cliente durante 10 minutos. Eche un vistazo a este artículo de KB, puede ayudarle. Además, en mi caso no tenía nada que ver con el reinicio, así que no dejes que eso te desanime, sí exhibí los síntomas en el netstat y los mensajes se transmiten inicialmente cuando el cliente se inicia por primera vez.

http://support.microsoft.com/kb/2554746

+0

Hace tiempo que decidimos abandonar MSMQ. Pero gracias de cualquier manera. – mark

5

acabo tratado el problema, aquí están los pasos que tomé con el fin de resolverlo:

Obtener la utilidad DTCPing de Microsoft, ejecutarlo en las máquinas que utilizan MSMQ, la Los DTC deben poder comunicarse entre sí para que MSMQ funcione.

Troubleshooting MSDTC issues with the DTCPing tool

Esto a su vez me hizo comprender que MSMQ depende de nombres NetBIOS altamente - las máquinas deben ser capaces de hacer ping entre sí mediante el uso de nombres de NetBIOS solo.

Una vez hecho esto, asegúrese de reiniciar TODOS los servicios de Message Queue Server (tanto en la máquina que envía como en la máquina de destino, ya que debe ser capaz de realizar una operación inversa de NetBIOS).

En mi caso, una vez que obtuve el DTC con la resolución de nombre NetBIOS, reinicié los servicios, todo comenzó a funcionar mágicamente.

Recomiendo encarecidamente que visite this page para obtener recursos adicionales.

+1

Hace mucho que abandonamos MSMQ (bueno), .NET (regular) y C# (suspiro!) A favor de Java (:-(). Pero gracias, de todos modos. – mark

+0

Para mí fue para asegurarme de que ambas máquinas puedan hacer ping entre ellos utilizando el nombre de NetBIOS. THX – xhafan

1

La respuesta es fácil de dejar. Asegúrese de que puede hacer puertos telnet 1801,135,2103 & 2105 desde la máquina de origen hasta el destino y viceversa. También asegúrese de que MSMQ se esté ejecutando en ambas máquinas.

6

Tuve este problema hoy. Para resolverlo, tuvimos que abrir el cuadro de diálogo de propiedades de Message Queuing del servidor receptor y, en la pestaña Seguridad del servidor, desmarcar la casilla "Desactivar llamadas RPC no autenticadas". Además, en la cola privada Propiedades | Pestaña de seguridad cambiamos la seguridad para otorgarle a Todos Control total. En mi caso, las máquinas están en el mismo segmento, pero no en el mismo dominio. La cola no es transaccional. Estamos utilizando direcciones IP para los enlaces de punto final (WCF), NetBIOS/DNS no está en juego.

+0

Gracias. Después de pasar horas tratando de resolver un problema similar (mi MSMQ era público y transaccional) nada más ayudó. "Desactivar llamadas RPC no autenticadas" fue la solución. – geedubb

+0

Vimos el mismo problema "Deshabilitar llamadas RPC no autenticadas" se marcó Desactivar esta opción evitó el problema. Sospechamos que la causa raíz es algún tipo de cambio de nivel de red, pero este cambio nos puso a trabajar de inmediato. Todas las colas salientes enviaron sus mensajes al instante. sus colas de destino. –

3

Tuve un problema donde teníamos 2 servidores enviando mensajes a un tercero. Solo se recibían los mensajes de un servidor. Los mensajes del otro quedaron atrapados en la cola de salida como 'no reconocidos'.

El problema se debió a que todas las computadoras eran máquinas virtuales clonadas y tenían la misma QMId en la clave de registro: HKLM \ Software \ Microsoft \ MSMQ \ Parameters \ Machine Cache. Instalamos MSMQ en los servidores que corrigieron el problema.

Referencias:

http://baleinoid.com/whaly/2012/08/random-bug-msmq-unacknowledged-messages/ http://blogs.msdn.com/b/johnbreakwell/archive/2007/02/06/msmq-prefers-to-be-unique.aspx

+0

Esto me ayudó, ¡gracias! – Martin

Cuestiones relacionadas