我需要一个适用于 ssl 的 java stomp 客户端库

Posted

技术标签:

【中文标题】我需要一个适用于 ssl 的 java stomp 客户端库【英文标题】:I need a java stomp client library that works with ssl 【发布时间】:2012-03-10 02:28:36 【问题描述】:

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

我需要 SSL 支持。

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

【问题讨论】:

只是好奇...如果客户端是 Java,为什么要使用 Stomp? 该应用程序是android应用程序,我不能使用JMS或openwire(据我所知)。 你找到工作的 stomp+ssl 客户端了吗? 是的,stomp.fusesource.org mgiammarco,链接无法打开。可以更新吗? 【参考方案1】:

使用来自 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 上可用。它使用内置标准 TCP 和 SSL 传输的 hwatdispatch 库。无论如何都值得一试。

【讨论】:

我按照你的建议试过了,我看到它支持ssl,但是由于没有示例和文档,我无法配置密钥库和ssl连接失败。有什么想法吗? 好的,我确认 FuseSource Stomp 实现适用于 ssl,但缺少文档... 它有一个糟糕的许可证——如果你使用它,你需要让你的应用程序源代码免费提供,这意味着它在商业上没有用处。【参考方案3】:

我发现 this forum discussion 关于 Android 上的 JMS,它引用了 ActiveMQ 5.2 及更高版本中包含的 the experimental 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 失败后尝试。 您确定您的 SSL 证书有效吗?您是否成功使用过任何 STOMP+SSL 客户端(非 Java)? 可以说我已经成功配置activemq服务器使用stomp+ssl协议了。尝试使用 telnet 启动 ssl 协商。我还没有尝试过任何客户端(java 或非 java)。

以上是关于我需要一个适用于 ssl 的 java stomp 客户端库的主要内容,如果未能解决你的问题,请参考以下文章

Firefox 52.4.1上的Java Applet“ClassNotFoundException” - 适用于IE

sh 验证Web服务器的快速方法SSL配置适用于SNI / Java 7+ http://stackoverflow.com/questions/7615645/ssl-handshake-a

Check Point SSL Network Extender 适用于 FF,而非 Safari,适用于 Mountain Lion

mod_ssl 2.8.31 是不是适用于 Apache 2.2?

SSL 适用于浏览器、wget 和 curl,但适用于 git

仅适用于 IE 用户的 SSL 证书错误