2016-03-20 22 views
0
Configuration config = 
       ServiceBusConfiguration.configureWithSASAuthentication(
         URL, 
         "RootManageSharedAccessKey", 
         token, 
         ".servicebus.windows.net" 
       ); 

这是用于配置java服务总线实现的代码。我感兴趣的是传递共享访问签名而不是共享访问密钥。我不确定这个java azure sdk的实现是否支持这个。我该如何做到这一点。当我在令牌变量中使用共享访问签名令牌时,我总是收到401未授权的错误。有任何想法吗?Java服务总线共享访问令牌

回答

2

据Azure的服务总线SDK的source code对Java的四个参数的函数configureWithSASAuthentication应该是namespacesasKeyNamesasKey & serviceBusRootUri(默认通 “.servicebus.windows.net”)。

namespacesasKeyName & sasKey,您可以通过点击找到他们为您服务总线的底部CONNECTION INFORMATION按钮,请看下图。

图1. CONNECTION INFORMATION按钮服务总线页 enter image description here

图2.复制底部的CONNECTION STRING并提取命名空间,sasKeyName & sasKey enter image description here

例如,连接字符串是Endpoint=sb://abc-ns.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;[email protected]#=,则namespace,sasKeyName,sasKey分别为abc-ns,,[email protected]#=

所以代码应该如下。

Configuration config = 
       ServiceBusConfiguration.configureWithSASAuthentication(
         "abc-ns", 
         "RootManageSharedAccessKey", 
         "[email protected]#=", 
         ".servicebus.windows.net" 
       ); 

而且你也可以为您服务总线页的CONFIGURE选项卡中找到他们,请参见下图。

图3. CONFIGURE标签 enter image description here

0

我可以看到你创建的配置对象在这里。通常我们用它在Java中,以创造一个主题,如:

Configuration config = 
    ServiceBusConfiguration.configureWithSASAuthentication(
     "namespace", 
     "sasKeyName", 
     "sasKey", 
     "serviceBusRootUri" 
    ); 

ServiceBusContract service = ServiceBusService.create(config); 
TopicInfo topicInfo = new TopicInfo("TestTopic"); 
CreateTopicResult result = service.createTopic(topicInfo); 

或创建队列,如:

Configuration config = 
     ServiceBusConfiguration.configureWithSASAuthentication(
       "namespace", 
       "sasKeyName", 
       "sasKey", 
       "serviceBusRootUri" 
       ); 

ServiceBusContract service = ServiceBusService.create(config); 
QueueInfo queueInfo = new QueueInfo("TestQueue"); 
CreateQueueResult result = service.createQueue(queueInfo); 

而且我们也可以通过共享访问签名创建它们: 创建一个话题(C#)

Uri uri = ServiceBusEnvironment.CreateServiceUri("sb", "namespace", string.Empty); 
string name = "sasKeyName"; 
string key = "sasKey"; 

TokenProvider tokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(name, key); 

NamespaceManager namespaceManager = new NamespaceManager(uri, tokenProvider); 
namespaceManager.CreateTopic("DataCollectionTopic"); 

创建队列(C#):

Uri uri = ServiceBusEnvironment.CreateServiceUri("sb", 
       "namespace", string.Empty); 
string name = "sasKeyName"; 
string key = "sasKey"; 

TokenProvider tokenProvider = 
    TokenProvider.CreateSharedAccessSignatureTokenProvider(name, key); 
NamespaceManager namespaceManager = 
    new NamespaceManager(uri, tokenProvider); 
namespaceManager.CreateQueue("DataCollectionQueue"); 

命名空间,sasKeyName,sasKey在门户中进行配置,就像Perter所示。