2012-02-19 10 views
9

Estoy probando varias bibliotecas de stomp para java (gozirra, stompj, activemq). Todas estas bibliotecas tienen poca documentación, como tener solo un ejemplo, y tengo un problema grave:Necesito una biblioteca de cliente de java stomp que funcione con ssl

Necesito compatibilidad con SSL.

El protocolo stomp + ssl existe y es compatible con activemq pero no puedo encontrar un cliente Java que lo admita.

+0

Sólo por curiosidad ... si el cliente es Java, ¿por qué el uso de Stomp? –

+0

La aplicación es una aplicación de Android y no puedo usar JMS o openwire (hasta donde yo sé). – mgiammarco

+0

¿Has encontrado un cliente de stomp + ssl que funcione? – alexvetter

Respuesta

2

Con la biblioteca de activemq hacerlo de esta manera:

   System.setProperty("javax.net.ssl.keyStore", 
      "/home/foo/.keystore/client.ks"); 
    System.setProperty("javax.net.ssl.keyStorePassword", "changeme"); 
    System.setProperty("javax.net.ssl.trustStore", 
      "/home/foo/.keystore/client.ts"); 

    StompConnection connection = new StompConnection(); 
    SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory 
      .getDefault(); 
    SSLSocket sslsocket = (SSLSocket) factory.createSocket("127.0.0.1", 
      61612); 
    connection.open(sslsocket); 
3

I conocer this forum discussion sobre JMS en Android, que hace referencia the experimental Stomp API incluido en ActiveMQ 5,2 y mayor (ejemplo copiado a continuación)

También se menciona que la REST API podría ser un mejor ajuste para los dispositivos móviles, permitiendo que el estado que se mantenga puramente en el corredor.

StompConnection connection = new StompConnection(); 
connection.open("localhost", 61613); 

connection.connect("system", "manager"); 
StompFrame connect = connection.receive(); 
if (!connect.getAction().equals(Stomp.Responses.CONNECTED)) { 
    throw new Exception ("Not connected"); 
} 

connection.begin("tx1"); 
connection.send("/queue/test", "message1", "tx1", null); 
connection.send("/queue/test", "message2", "tx1", null); 
connection.commit("tx1"); 

connection.subscribe("/queue/test", Subscribe.AckModeValues.CLIENT); 

connection.begin("tx2"); 

StompFrame message = connection.receive(); 
System.out.println(message.getBody()); 
connection.ack(message, "tx2"); 

message = connection.receive(); 
System.out.println(message.getBody()); 
connection.ack(message, "tx2"); 

connection.commit("tx2"); 
connection.disconnect(); 
+0

Gracias pero he encontrado (y probado) al menos tres clientes de java stomp y funcionan. Lamentablemente, no hay SSL y lo necesito mucho. Gracias por la idea de REST, pero intentaré después de que falle todos los intentos con stomp. – mgiammarco

+0

¿Estás seguro de que tus certificados SSL funcionan? ¿Has tenido éxito con cualquier cliente STOMP + SSL (que no sea Java)? –

+0

Puedo decir que he configurado correctamente el servidor activemq para usar el protocolo stomp + ssl. Intentado con telnet inicia una negociación SSL. Todavía no lo he intentado con ningún cliente (java o no java). – mgiammarco

2

No asegurarse de que funciona en Android, pero vale la pena probar es el cliente FuseSource StompJMS disponibles en Github. Utiliza la biblioteca hwatdispatch, que tiene transportes TCP y SSL estándar integrados. Vale la pena intentarlo de todos modos.

+0

Lo he intentado siguiendo su sugerencia, he visto que es compatible con ssl, pero debido a que no hay ningún ejemplo y ningún documento, no puedo configurar el almacén de claves y la conexión ssl falla. ¿Alguna idea? – mgiammarco

+0

Ok, confirmo que la implementación de FuseSource Stomp funciona con ssl pero falta la documentación ... – mgiammarco

+0

Tiene una licencia horrible: necesitaría hacer que el código fuente de su aplicación esté disponible gratuitamente si lo usa, lo que significa que no tiene utilidad comercial. – tentimes

Cuestiones relacionadas