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

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

我需要 SSL 支持。

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

【问题讨论】:

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

标签: java ssl activemq stomp


【解决方案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)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多