2008-11-06 21 views
6

Tengo un sistema en el que diferentes procesos de servidor manejan solicitudes pasadas como mensajes JMS de varios clientes a través de un intermediario JMS.¿Hay alguna forma de obtener la dirección IP de origen de un mensaje JMS?

Estoy tratando de identificar el origen de los mensajes. ¿Hay alguna manera de obtener la IP o alguna información de identificación sobre el origen?

Aclaración: Ya tengo el cliente desplegada por usuarios desconocidos, por lo que estoy tratando de evitar el cambio de clases de mensajes ...

Respuesta

3

Hay una cabecera JMS opcional mencionado en la especificación JMS llamada JMSXUserID cuales el cual identifica al usuario el envío de un mensaje (que el agente valida y asegura es correcta para evitar la suplantación de identidad), que un poco de apoyo proveedores de JMS.

Por ejemplo, aquí es how to enable it in Apache ActiveMQ

1

Yo no lo creo. Al menos no pude encontrar una manera.

Si necesita enviar una respuesta al origen del mensaje, puede hacer que el remitente configure la propiedad "JMSReplyTo" y responda nuevamente a ese destino.

O bien, podría cambiar ligeramente el esquema de mensajería e insertar el mensaje de información de origen. El remitente se identificaría a sí mismo en el mensaje y el receptor podría leerlo desde allí.

0

Si tiene control sobre la construcción de los mensajes que se envían, siempre puede agregar la dirección IP al mensaje como una propiedad. Luego, puede verificar el valor con el método getStringProperty en el Mensaje.

+0

Jinks! (lo que dijimos como niños si dijéramos lo mismo al mismo tiempo que a otra persona) –

+0

jaja, me debes una coca cola :). – fawce

0

Si controla el código de los clientes que envían los mensajes, puede inventar un nombre de propiedad, digamos "IPOfSender", e incluir esa propiedad en cada mensaje con Message.setStringProperty().

// client code 
String myIPString = ...; 
Message m = session.createTextMessage(); 
m.setStringProperty("IPOfSender", myIPString); 
... 
+0

Esto no es nada fácil. ¿Cómo se detecta la IP del cliente? La mayoría de las IP están detrás de una NAT en una intranet y solo obtendrá una IP interna como 192.168.100.1 – Marcel

+1

. Entonces puede que no tenga suerte. - No existe una forma estándar de lograrlo - Al parecer, no puede conseguir que su cliente lo ayude + Quizás su implementación JMS tenga alguna función para hacer esto. No es portátil, pero tal vez lo suficientemente bueno para ti. –

0

Depende de su servidor JMS. Algunos servidores tienen herramientas de administración/API que te permiten ver los detalles de la conexión.

0

Usando glassfish, si nos fijamos en la getJMSMessageID() del mensaje, debería ver una cadena para el efecto de "ID: 40-192.168.0.242 (F5: 62: c6: 58: 22: 6f) -52506-122885191641 ". Parece que el IP es una subcadena de la identificación del mensaje.

Tenga en cuenta que esto es lo que puedo ver en nuestra configuración, por lo que puede haber otros factores en juego (es decir, primavera), pero sé que la cadena no fue creada por nosotros programáticamente.

Cuestiones relacionadas