Configuration config =
ServiceBusConfiguration.configureWithSASAuthentication(
URL,
"RootManageSharedAccessKey",
token,
".servicebus.windows.net"
);
这是java服务总线实现的配置代码。我有兴趣传递共享访问签名而不是共享访问密钥。我不确定java azure sdk的这个实现是否支持这个。我究竟该怎么做呢当我在令牌变量中使用共享访问签名令牌时,我不断收到401未经授权的错误。有什么想法吗?
答案 0 :(得分:3)
根据Azure Service Bus SDK for Java的source code,函数configureWithSASAuthentication
的四个参数应该是namespace
,sasKeyName
,sasKey
&安培; serviceBusRootUri
(默认传递“.servicebus.windows.net”)。
namespace
,sasKeyName
& sasKey
您可以通过点击服务总线底部的CONNECTION INFORMATION
按钮找到它们,请参阅下图。
图1.服务总线页面底部的CONNECTION INFORMATION
按钮
图2.复制CONNECTION STRING
并提取名称空间,sasKeyName& sasKey
例如,连接字符串为Endpoint=sb://abc-ns.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=ABCdefg123!@#=
,则namespace
,sasKeyName
,sasKey
分别为abc-ns
,RootManageSharedAccessKey
,{ {1}}。
所以代码应如下所示。
ABCdefg123!@#=
您也可以在服务总线页面的Configuration config =
ServiceBusConfiguration.configureWithSASAuthentication(
"abc-ns",
"RootManageSharedAccessKey",
"ABCdefg123!@#=",
".servicebus.windows.net"
);
标签中找到它们,请参阅下图。
答案 1 :(得分:0)
我可以看到你在这里创建了一个Configuration对象。通常我们使用它来创建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所展示的那样。