我需要一个适用于 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?