Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java和AMQP 1.0连接到Windows Server(1.1)上的服务总线_Java_Amqp_Servicebus_Qpid - Fatal编程技术网

使用Java和AMQP 1.0连接到Windows Server(1.1)上的服务总线

使用Java和AMQP 1.0连接到Windows Server(1.1)上的服务总线,java,amqp,servicebus,qpid,Java,Amqp,Servicebus,Qpid,我要问的问题以前有人问过。大卫·英厄姆在背诵中给出了答案。Sentinel已确认该解决方案有效 然而,我也有同样的问题。我严格遵守微软的文档,但是仍然存在同样的问题 冒着冗余的风险,问题是当使用Qpid JMS客户端库(版本0.22或0.26)连接到Windows Server上的服务总线(1.1)(非Azure)并遵循Microsoft的所有指示时,包括 生成RootCA证书并将其应用于Java信任库 使用Windows登录用户/密码 使用amqps://[user]:[pwd]@FQDN/[

我要问的问题以前有人问过。大卫·英厄姆在背诵中给出了答案。Sentinel已确认该解决方案有效

然而,我也有同样的问题。我严格遵守微软的文档,但是仍然存在同样的问题

冒着冗余的风险,问题是当使用Qpid JMS客户端库(版本0.22或0.26)连接到Windows Server上的服务总线(1.1)(非Azure)并遵循Microsoft的所有指示时,包括

  • 生成RootCA证书并将其应用于Java信任库
  • 使用Windows登录用户/密码
  • 使用amqps://[user]:[pwd]@FQDN/[namespace]连接工厂字符串
  • 使用[namespace]/[queuename]作为物理队列名称
  • 上下文查找、连接创建、会话创建都可以正常工作。但当创建MessageProducer或MessageConsumer时,我会出错

    对于MessageProducer创建(无论是队列还是主题),我总是得到

    Caused by: org.apache.qpid.amqp_1_0.client.Sender$SenderCreationException:
    Peer did not create remote endpoint for link, target: testns/testq1
    at org.apache.qpid.amqp_1_0.client.Sender.<init>(Sender.java:171)
    
    原因:org.apache.qpid.amqp_1_0.client.Sender$SenderCreationException:
    对等方未为链接创建远程终结点,目标:testns/testq1
    位于org.apache.qpid.amqp_1_0.client.Sender。(Sender.java:171)
    
    对于MessageConsumer创建,我得到

    javax.jms.JMSException
    at org.apache.qpid.amqp_1_0.jms.impl.MessageConsumerImpl.createClientReceiver(MessageConsumerImpl.java:164)
    at org.apache.qpid.amqp_1_0.jms.impl.MessageConsumerImpl.<init>(MessageConsumerImpl.java:120)
    
    javax.jms.jmsceception
    在org.apache.qpid.amqp_1_0.jms.impl.MessageConsumerImpl.CreateClienterceiver(MessageConsumerImpl.java:164)上
    位于org.apache.qpid.amqp_1_0.jms.impl.MessageConsumerImpl.(MessageConsumerImpl.java:120)
    
    以下是我尝试过的几件事

  • 我的服务总线安装在Windows 2012服务器上。我的客户端正在另一台Windows 2012服务器上运行。但我也将客户机移动到了服务器,服务总线在那里运行,没有解析。(因此这不是位置问题)
  • 当我从信任库中取出证书时,我会得到一个适当的错误。当我把它插回去时,错误就消失了。(所以这不是证书问题)
  • 当我故意拼错我的Windows用户名或密码时,我会收到身份验证错误。否则错误就会消失。(因此这不是用户/pwd问题)
  • 在连接字符串中显式键入端口号5671似乎无关紧要。无论哪种情况,连接创建都可以正常工作。(因此这不是一个连接问题)
  • 在连接字符串或队列定义中定义名称空间似乎无关紧要。这两种情况都失败了
  • 我已经下载了Qpid JMS客户端(0.22)的源代码,并逐步完成了调试器。目标(要连接的队列的地址)在创建连接时设置正确,但在离开同步块后立即重置为null,这会导致错误(对于MessageProducer)
  • 我错过了原始Microsoft文档中的哪些内容(已由名为Sentinel的用户确认其有效)

    任何帮助都将不胜感激。 非常感谢。
    -Dogan Atay

    我们得到了完全相同的错误,并且执行了您提到的所有步骤,得到了类似的结果。然而,我们在云中连接到Azure服务总线。事实证明,错误消息具有误导性,幕后身份验证从未发生过。您可以通过提供不正确的密码进行验证,并且您仍将执行所有步骤,直到需要创建生产者或消费者,然后您将看到您提到的异常

    事实证明,问题是,如果我们使用Azure管理门户创建队列/主题,那么AMQP客户端无法正确连接,我们会不断遇到“对等…”异常。但是,如果我们使用Microsoft专有api以编程方式创建队列/主题,请参见

    然后AMQP客户端能够正确连接和发送/接收消息。

    虽然它不是Windows服务器上的服务总线,而是Azure服务总线,但我希望解决方案可能是相同的。如果对您不起作用,请告诉我。

    更新并回答。 结果证明我们做的每件事都是对的

    在使用服务管理控制台创建服务总线时,我添加了作为Windows用户的用户名。在客户端,我在连接字符串中使用了相同的用户名和密码。我会毫无问题地通过授权步骤。将创建连接。如果我将密码更改为错误的密码,我将得到授权错误。我当时确信,安全不是这里的问题

    但是有了正确的用户名和密码,我仍然无法创建消费者或生产者

    然后,我启用了Qpid JMS包日志记录。日志显示

    amqp:未经授权的访问试图执行未经授权的操作

    为什么会这样?当您在连接字符串中使用用户名时(通过尝试和错误),您应该使用服务管理控制台中显示的完全限定连接字符串。即username@domainname.com. 您还需要对其进行URL编码)


    下面的答案中,Aurvoir说,如果他们以编程方式创建队列,事情就会解决。我还没有尝试过这个解决方案。但是,如果您使用自己的凭据创建自己的队列,并在连接上使用相同的凭据将消息放在同一队列中,我可以看到它将如何工作。

    是的,我们通过使用Microsoft专有API创建队列/主题来解决它(Azure ServiceBus),请参阅上面的链接。Aurvoir,Azure与OnPrem或我们的环境之间必须存在差异。当我接受你的建议并输入错误的密码时,我得到了身份验证错误。正如您所建议的,接下来我将尝试以编程方式创建队列。我将在这里更新。您能否演示如何启用
    Qpid JMS包日志记录