我正在使用最新的Azure java sdk(版本0.6),但是当我使用服务总线配置“configureWithConnectionString”函数时,我发现我遇到了问题。 这是我的代码,
//get config
string connectionString = "Endpoint=sb://testservicebusnamespace.servicebus.windows.net/;SharedAccessKeyName=MySharedAccessKey;SharedAccessKey=<this is secret not show>";
config = new Configuration();
ServiceBusConfiguration.configureWithConnectionString(null, config, connectionString);
//create service
service = ServiceBusService.create(config);
我从Azure的服务总线命名空间门户获取连接字符串。但是当我运行此代码时,它会抛出异常“密钥'SharedAccessKeyName'对此连接字符串无效”。
我不知道是什么问题,因为我从Azure门户获得了连接,并且我检查了它的内容(SharedAccessKeyName,SharedAccessKey),它们是对的。
所以有人可以帮助我吗?这是我的问题还是这个SDK需要更新(因为我听说门户网站已经使用过SAS,但SDK仍然使用ACS进行身份验证)?
非常感谢。
答案 0 :(得分:0)
看起来Java Azure SDK(0.6.0)仍然使用ACS进行身份验证。见this github issue评论:
当前SDK使用具有ACS身份验证模式的服务总线命名空间,但不使用SAS令牌身份验证模式的新创建的servicebus命名空间。我们将调查此问题
和
一种解决方法是通过PowerShell创建服务总线命名空间。 这似乎默认启用ACS auth模式。命令是:
New-AzureSBNameSpace -Name MyNameSpace -Location“West Europe”
记下运行命令后得到的“DefaultKey”。您 需要使用ServiceBusConfiguration,我不知道是否 可以通过Azure管理门户获得。使用“所有者”作为 configureWithWrapAuthentication的authenticationName参数。
答案 1 :(得分:0)
我要添加此答案,因为我认为自己注定要失败。但是找到了一个新图书馆。
这种依赖关系(在我写这篇文章时,最新的版本是0.5.0)……给您带来了问题。
<dependency>
<groupId>com.microsoft.windowsazure</groupId>
<artifactId>microsoft-azure-api-servicebus</artifactId>
<version>0.5.0</version>
</dependency>
Microsoft稍微更改了组ID。这是迄今为止似乎有更多更新的依赖项。
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-servicebus</artifactId>
<version>0.9.7</version>
</dependency>
此处的Maven链接:https://search.maven.org/#artifactdetails%7Ccom.microsoft.azure%7Cazure-servicebus%7C0.9.7%7Cjar
所以这是一个古老的问题。但是希望这可以使人朝着正确的方向前进。