我需要一个能够支持SSL的Java Stomp客户端库。

9
我正在尝试使用几个Java的stomp库(gozirra,stompj,activemq)。 这些库都有较差的文档,只有一个示例,并且我有一个严重的问题: 我需要SSL支持。 stomp+ssl协议已存在并由activemq支持,但我找不到支持它的Java客户端。

只是好奇...如果客户端是Java,为什么使用Stomp? - Joe Coder
该应用程序是一个Android应用程序,据我所知,我无法使用JMS或openwire。 - mgiammarco
你找到一个可用的stomp+ssl客户端了吗? - alexvetter
是的,http://stomp.fusesource.org/。 - mgiammarco
mgiammarco,链接无法打开。你可以更新一下吗? - RedCollarPanda
https://github.com/fusesource/stompjms - mgiammarco
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();

谢谢,但是我已经找到了至少三个Java的Stomp客户端,并且尝试过它们,它们都可以工作。不幸的是,它们都没有SSL功能,而我非常需要它。感谢你提供的REST的建议,但在我尝试所有的Stomp方法失败之后,我会再试一下。 - mgiammarco
你确定你的SSL证书有效吗?你有没有使用任何STOMP+SSL客户端(非Java)获得成功? - Joe Coder
我可以说,我已经成功地配置了ActiveMQ服务器以使用stomp+ssl协议。通过telnet尝试,它启动了SSL协商。我还没有尝试过任何客户端(Java或非Java)。 - mgiammarco

2
使用ActiveMQ库,可以这样实现:

使用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);

2

不确定它是否适用于Android,但可以尝试一下FuseSource StompJMS客户端,该客户端在Github上可用。它使用了hwatdispatch库,该库内置了标准的TCP和SSL传输协议。无论如何都值得一试。


我已经按照你的建议尝试过了,我发现它支持SSL,但由于没有示例和文档,我无法配置密钥库,因此SSL连接失败了。有什么想法吗? - mgiammarco
好的,我确认FuseSource Stomp实现支持ssl,但文档不足... - mgiammarco
它有一个可怕的许可证 - 如果您使用它,您需要免费提供应用程序源代码,这意味着它在商业上没有用处。 - tentimes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接