使用来自 java 的 amqp 连接 windows 服务总线时套接字关闭

socket closed when connecting windows service bus using amqp from java

我正在尝试使用 Microsoft 网站上提供的 java example 连接到 windows 服务器的服务总线。

下面是我用于此 POC 的库

     <dependency>
        <groupId>org.apache.qpid</groupId>
        <artifactId>qpid-jms-client</artifactId>
        <version>0.26.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.qpid</groupId>
        <artifactId>qpid-amqp-1-0-client-jms</artifactId>
        <version>0.32</version>
    </dependency>

下面是我使用的连接字符串格式

  return "amqps://" + SbSharedKey + ":" + SbSharedSecret + "@" + SbDomain + "/" + SbNamespace;

我的代码与网站上的代码完全相同,但出现以下错误

Initial setup Creating context Creating connection factory Creating connection

Creating session Exception creating session/producer

java.net.SocketException: Socket Closed at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) javax.jms.JMSException: class java.net.SocketException: Connection closed by remote hostclass java.net.SocketException: Connection closed by remote host at java.net.SocketInputStream.read(SocketInputStream.java:170) at java.net.SocketInputStream.read(SocketInputStream.java:141) at sun.security.ssl.InputRecord.readFully(InputRecord.java:465) at

Process finished with exit code 0

我试过 SSLPoke 并且成功了,

所以问题似乎只出现在 AMQP 端。你能告诉我连接到 windows server service bus using amqp from java

时要使用的正确库版本吗

您在您的项目中使用了两个不同的 AMQP JMS 客户端库依赖项,所以我不知道到底发生了什么,但我的第一个猜测是您最终使用的是遗留的 'qpid-amqp-1-0-client-jms' 客户端,而不是支持,绝对行不通。我会删除它并尝试仅使用 Qpid JMS 0.26.0 客户端库来实现,尽管我相信您可能需要一些其他 URI 选项,因为 azure 有一些特定的连接要求。

我能够使用以下版本的 jar 解决问题

    <dependency>
        <groupId>org.apache.geronimo.specs</groupId>
        <artifactId>geronimo-jms_1.1_spec</artifactId>
        <version>1.1.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.qpid</groupId>
        <artifactId>qpid-amqp-1-0-client-jms</artifactId>
        <version>0.22</version>
    </dependency>