2012-02-19 23 views
9

Próbuję kilku bibliotek stomp dla java (gozirra, stompj, activemq). Wszystkie te biblioteki mają złą dokumentację, na przykład mając tylko jeden przykład i mam poważny problem:Potrzebuję biblioteki klienta java stomp, która współpracuje z ssl

Potrzebuję wsparcia SSL.

Protokół STomp + SSL istnieje i jest obsługiwany przez activemq, ale nie mogę znaleźć klienta Java, który go obsługuje.

+0

prostu ciekawi ... jeśli klient jest Java, dlaczego za pomocą Stomp? –

+0

Aplikacja jest aplikacją dla systemu Android i nie mogę używać JMS ani Openwire (o ile wiem). – mgiammarco

+0

Znalazłeś działającego klienta stomp + ssl? – alexvetter

Odpowiedz

2

Z biblioteki z ActiveMQ zrobić to w ten sposób:

   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 znaleziono this forum discussion o JMS na android, który odwołuje the experimental Stomp API zawarte w ActiveMQ 5,2 i więcej (np przytoczone poniżej)

wymienionych jest także, że REST API mogą być bardziej przydatne do urządzeń mobilnych, dzięki czemu stan się utrzymuje wyłącznie w brokerze.

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

Dziękuję, ale znalazłem (i wypróbowałem) co najmniej trzech klientów Java stomp i działają. Niestety nie ma SSL i bardzo tego potrzebuję. Dzięki za pomysł REST, ale postaram się po nieudanych próbach ze stompem. – mgiammarco

+0

Czy jesteś pewien, że działają certyfikaty SSL? Czy odniosłeś sukces z każdym klientem STOMP + SSL (innym niż Java)? –

+0

Mogę powiedzieć, że pomyślnie skonfigurowałem serwer activemq do używania protokołu stomp + ssl. Wypróbowany za pomocą telnetu rozpoczyna negocjację ssl. Jeszcze nie próbowałem z żadnym klientem (java lub non java). – mgiammarco

2

Nie wiesz, to działa na Androidzie, ale warto spróbować to klient FuseSource StompJMS dostępny na Github. Używa biblioteki hwatdispatch, która ma wbudowane standardowe transporty TCP i SSL. Warto mimo to zrobić zdjęcie.

+0

Próbowałem go następujące sugestia, widziałem, obsługuje on ssl, ale ze względu na fakt, że nie ma przykładów i nie ma dokumentów, nie jestem w stanie skonfigurować magazynu kluczy, a więc połączenie ssl nie powiedzie się. Dowolny pomysł? – mgiammarco

+0

OK Potwierdzam, że implementacja FuseSource Stomp działa z ssl, ale brakuje dokumentacji ... – mgiammarco

+0

Ma okropną licencję - musiałbyś udostępnić swój kod źródłowy aplikacji, jeśli z niego korzystasz, co oznacza, że ​​nie ma żadnego zastosowania komercyjnego. – tentimes

Powiązane problemy