通过 Azure Java SDK 向服务总线主题发送消息时出现 500 内部服务器错误

500 Internal Server Error while sending a message to a Service Bus topic through Azure Java SDK

我在尝试通过 java azure sdk 向服务总线主题发送消息时遇到问题,我收到 500 内部服务器错误。

我根据这个 link 准备了代码:https://azure.microsoft.com/en-us/documentation/articles/service-bus-java-how-to-use-topics-subscriptions/ 我的代码如下所示:

Configuration config = ServiceBusConfiguration.configureWithSASAuthentication(
    "NAMESPACE",
    "SAS_NAME",
    "SAS_KEY_VALUE",
    ".servicebus.windows.net");      
ServiceBusContract service = ServiceBusService.create(config);
try {
    BrokeredMessage message = new BrokeredMessage("Message content");
    service.sendTopicMessage("TOPIC_NAME", message);
} catch (ServiceException e) {
    e.printStackTrace();
}

我可以使用 .NET 代码发送具有相同配置值的消息。

这是我收到的异常:"com.sun.jersey.api.client.UniformInterfaceException: POST https://NAMESPACE.servicebus.windows.net/TOPIC_NAME/messages?api-version=2013-07 returned a response status of 500 Internal Server Error"

我还有一个关于 api 版本的问题。为什么图书馆在请求中放这么旧的 api-version?我使用来自 Maven 存储库的最新版本的 azure sdk:

<dependency>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-servicebus</artifactId>
    <version>0.9.3</version>
</dependency>

我尝试重现你的问题,但没有得到任何错误信息。

根据 REST API “Send Message”,500 状态代码表示不是由您的客户端源代码引起的内部错误。

所以我想你可以再试一次运行代码。

如果您仍然遇到同样的错误或其他错误,您能否分享更多信息以帮助分析问题?

如有任何疑问,请随时告诉我。

终于找到问题的原因了。真正的错误是"There is no matching subscription found for the message with MessageId .."。当在主题配置中选中选项 "Filter message before publishing" 并且不存在匹配的订阅时,会发生此错误。

问题是对 Azure Java SDK 使用的 Azure REST API 的调用,而不是有关未找到匹配订阅的信息,returns 只是 500 个内部服务器错误.. 只有来自 Azure .NET SDK 的调用 returns 有有用注释的异常。