TCP Listener o TCP ...
 

TCP Listener o TCP Sender  

  RSS

(@eberth_jimenez)
Miembro Eminente
Registrado: hace 4 años
Respuestas: 10
13 mayo, 2019 21:28  

Buenas:

Tengo que enviar mensajes a un destino TCP que depenendiendo del mensaje que le envío me responde un mensaje o varios mensajes en el mismo puerto desde el que estoy enviando.

No se como implementar esto, si lo hago con TCP sender solo tengo la primer respuesta del mensaje que envio ,pero las siguientes respuestas que me envian por el mismo puerto que envío no las veo.

El destino al que mando no tiene posibilidad de responderme a otro puerto distinto siempre me responde al puerto desde el que abrí la conexión.

Estuve viendo y tal vez se pueda implementar como TCP Listener en modo cliente.

Alguien tiene experiencia en esto?

Gracias


Citar
Nikkator
(@nsoria)
Miembro Moderator
Registrado: hace 4 años
Respuestas: 42
15 mayo, 2019 09:50  

Hola.

Estrictamente hablando, un conector de destino sólo puede recibir un mensaje de respuesta. La idea es conseguir que todos los mensajes HL7 que pretendes recibir como respuesta conformen un único mensaje.

En primer lugar, será necesario saber qué protocolo utiliza el servidor TCP para la detección del inicio y el fin del mensaje, si es MLLP será <VT> / <FS><CR>.

En tal caso, lo que necesitas es cambiar tu conector de destino TCP Sender para que utilice el mismo caracter de inicio de mensaje pero sin caracter de fin de mensaje. De esta forma lo que consigues es que cuando recibas las respuestas, tu conector no corte en cuanto reciba los caracteres de fin del primer mensaje (<FS><CR>) si no que siga esperando hasta que se alcance el timeout o el servidor cierre la comunicación.

Como habrás quitado los caracteres de fin de mensaje de tu conector de destino, tendrás que agregarlos manualmente a tu mensaje antes de enviarlo, pues si no el servidor no sabrá cuándo termina el mensaje que tú le envías.

Sé que es algo lioso, por lo que, si no has entendido alguna parte intentaré hacerlo mejor con un diagrama.


ResponderCitar
(@ricber)
Miembro Confiable
Registrado: hace 1 año
Respuestas: 29
15 mayo, 2019 13:38  

Buenos dias,

Interesante hilo!, hace tiempo que estoy batallando con una maquina de Roche por este tema y no sabia por donde tirar. Nikkator la respuesta me ha parecido muy buena y coherente pero....como le añado el fin de mensaje?.  Entiendo que ahi esta el truco del tema pero no veo como.

Ricardo Bernat


ResponderCitar
Nikkator
(@nsoria)
Miembro Moderator
Registrado: hace 4 años
Respuestas: 42
15 mayo, 2019 13:47  

Agregar el/los caracteres de fin de mensaje debe hacerse en el transformador del conector.

Si por ejemplo quieres agregar <FS><CR>, puedes hacerlo en un paso de tipo JavaScript de la siguiente forma:

channelMap.put('mensaje', connectorMessage.getRawData() + "\x1C\r");

En el template de salida del conector TCP Sender tendrás que indicar la variable del mapa usada anteriormente en formato velocity:

${mensaje}

Espero que te sirva de ayuda 😉


ResponderCitar
(@ricber)
Miembro Confiable
Registrado: hace 1 año
Respuestas: 29
15 mayo, 2019 14:52  

Hola Nikkator,

Bravo!!!, esa si es una pista muy buena!, y por cierto, felicidades por el nivel del foro!. Si tengo un rato lo probare y os cuento.

Muchas gracias!

Ricardo Bernat


ResponderCitar
(@eberth_jimenez)
Miembro Eminente
Registrado: hace 4 años
Respuestas: 10
15 mayo, 2019 14:59  

Me queda claro, lo probaré.  Me queda la duda de como queda el mensaje ya que la mayoría de las veces caería por timeout.

 


ResponderCitar
Nikkator
(@nsoria)
Miembro Moderator
Registrado: hace 4 años
Respuestas: 42
15 mayo, 2019 15:00  

No hay de qué ricber!

Y gracias a ti por participar en el foro. Espero que puedas probarlo y contarnos qué tal te ha ido.

Un saludo.


ResponderCitar
Nikkator
(@nsoria)
Miembro Moderator
Registrado: hace 4 años
Respuestas: 42
28 mayo, 2019 10:39  

Hola Eberth_Jimenez,

¿lograste recibir los múltiples mensajes?.

Sería de gran ayuda para otros usuarios conocer cómo resolviste finalmente el problema.

Un saludo.


ResponderCitar
(@ricber)
Miembro Confiable
Registrado: hace 1 año
Respuestas: 29
28 mayo, 2019 12:43  

Buenos dias,

desgraciadamente no he podido hacer pruebas con ese sistema, es una maquina de laboratorio y es un poco complicado acceder a ella sin un "problema" real. En cuanto pueda hacer las pruebas, las hago y os informo.

Un saludo


ResponderCitar
Nikkator
(@nsoria)
Miembro Moderator
Registrado: hace 4 años
Respuestas: 42
28 mayo, 2019 12:50  

Hola.

Muchas gracias ricber!!


ResponderCitar
(@eberth_jimenez)
Miembro Eminente
Registrado: hace 4 años
Respuestas: 10
28 mayo, 2019 23:27  

Hola. Al final el proveedor pudo recibir mi respuesta en un puerto distinto al que me envia los mensajes entonces arme 2 canales, uno que recibe los mensajes y respondo en el postprocesor, y otro canal que envio mensajes al robot. Estamos probando aún, pero parecería que la solución sirve.

Gracias a todos por las respuestas.


ResponderCitar
Share:
caduceusadminForum