9

我正在尝试几个用于 java 的 stomp 库(gozirra、stompj、activemq)。所有这些库的文档都很差,例如只有一个示例,我遇到了一个严重的问题:

我需要 SSL 支持。

stomp+ssl 协议存在并且被 activemq 支持,但我找不到支持它的 Java 客户端。

4

3 回答 3

3

我发现了这个关于 Android 上 JMS 的论坛讨论,它引用了 ActiveMQ 5.2 和更高版本中包含的实验性 Stomp API(下面复制的示例)

还提到了REST API可能更适合移动设备,允许纯粹在代理处维护状态。

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();
于 2012-02-20T17:47:28.067 回答
2

不确定它是否适用于 Android,但值得一试的是Github上提供的FuseSource StompJMS客户端。它使用内置标准 TCP 和 SSL 传输的 hwatdispatch 库。无论如何都值得一试。

于 2012-02-25T22:31:59.863 回答
2

使用来自 activemq 的库以这种方式进行:

                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);
于 2014-02-28T12:47:04.230 回答