当前位置: 首页 > 知识库问答 >
问题:

APIM背后的Azure服务总线

许丁雷
2023-03-14

我正在尝试通过APIM向服务总线队列发送消息。我已经阅读了几篇类似下面的文章,但运气不佳https://connectedcircuits.blog/2018/09/25/exposing-azure-service-bus-through-apim-generating-a-sas-token-and-setting-the-session-id/ https://www.serverlessnotes.com/docs/load-article/docs/en/expose-service-bus-queue-through-api-management

现在的问题是,当我尝试发送消息时,而不是创建的典型201,我只收到200 OK,没有消息到达队列。请注意,它工作得很好,直接攻击有问题的服务总线。

以下是我目前使用的政策

<policies>
<inbound>
<set-header name="Authorization" exists-action="override">
<value>@{
// Load variables
string resourceUri = "xxxxx.servicebus.windows.net/apimqueue/messages";
string sasKeyName = "";
string sasKey = "";
// Set the token lifespan
System.TimeSpan sinceEpoch = System.DateTime.UtcNow.Subtract(new System.DateTime(1970, 1, 1));
var expiry = System.Convert.ToString((int)sinceEpoch.TotalSeconds + 60); //1 minute
string stringToSign = System.Uri.EscapeDataString(resourceUri) + "\n" + expiry;
System.Security.Cryptography.HMACSHA256 hmac = new System.Security.Cryptography.HMACSHA256(System.Text.Encoding.UTF8.GetBytes(sasKey));
var signature = System.Convert.ToBase64String(hmac.ComputeHash(System.Text.Encoding.UTF8.GetBytes(stringToSign)));
// Format the sas token
var sasToken = String.Format("SharedAccessSignature sr={0}&sig={1}&se={2}&skn={3}",
System.Uri.EscapeDataString(resourceUri), System.Uri.EscapeDataString(signature), expiry, sasKeyName);
return sasToken;
}</value>
</set-header>
</inbound>
<backend>
<!-- base: Begin Product scope -->
<!-- base: Begin Global scope -->
<forward-request />
<!-- base: End Global scope -->
<!-- base: End Product scope -->
</backend>
<outbound />
<on-error />
</policies>

我在回电话后得到的回复https://apimtestbus.azure-api.net/azurebustest21243.servicebus.windows.net/apimqueue/messages

HTTP/1.1200ok

content-length: 0

日期:星期日,2021年5月23日06:0:25GMT OCP-APIM APIID:SeriBUS OCP-APIM操作ID:发送消息OCP-APIM订阅ID:主OCP-APIM跟踪位置:https://apimstdebros05i5mtudswoa.blob.core.windows.net/apiinspectorcontainer/cHcJa9krxa3PhOTGYwgFgw2-37?sv=2019-07-07

任何帮助都将不胜感激

共有1个答案

苗阳
2023-03-14

问题是我在API级别确认了一个策略,但在操作级别的另一个策略覆盖了它。删除操作级别策略后,该策略起作用。

 类似资料:
  • 我一直在尝试创建一个客户端来连接我的Azure服务总线队列。我一直在参考此文档: https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-java-how-to-use-queues#send-消息到队列。 我的代码: 在创建客户端时,我遇到以下错误: 通用域名格式。微软蔚蓝色的服务总线。原语。Service

  • 我正在寻找一种解决方案,用于在几个本地数据库之间进行实时数据集成。没有太多的数据转换。我正在评估各种可用的ESB。我认为使用Azure服务总线进行数据集成可以快速开发解决方案。建议使用Azure service bus集成所有内部数据库吗?

  • 我正在尝试使用Xamarin表单订阅Azure服务总线队列。(说实话,我根本不确定是否有可能做到。) 我可以使用一个简单的控制台应用程序接收来自队列的消息,没有任何问题。但是,当我将相同的代码移动到Xamarin时,它在两种不同的场景中失败。 使用Xamarin是否可以正确订阅Azure服务总线队列? 我是不是漏了什么? 我是否有任何其他选择可以将JSON对象从服务总线发送到电话?

  • 我尝试将Azure服务总线与ApacheQPID和Spring与事务集成。 但Azure服务总线AMQP实现似乎不支持事务。这是真的吗?我没有找到相关信息。 这是我的JMS配置 这是我的spring集成片段: 它与session transact=“false”配合使用,但与session transact=“true”配合使用时会产生错误: QPID跟踪

  • 我使用此url中的示例http://azure.microsoft.com/en-us/documentation/articles/service-bus-java-how-to-use-jms-api-amqp/.我有两个问题: 1、ACS或SAS 连接URL, 用户名和密码来自ACS身份验证,但Azure服务总线已将其身份验证从ACS更改为SAS。它是否也支持SAS身份验证?就像用户名是SA

  • 我已经创建了一个Azure webwork,它将向服务总线队列发送强类型消息,并成功发送。 我想创建另一个webjob,只要servicebus队列中有消息,就会触发该webjob。请在下面找到我正在尝试的代码。出于某种原因,尽管servicebus队列中有消息,但当我在本地运行webjob时,webjob未被触发并出现错误。 错误: 代码: 有谁能帮我解决这个问题吗? 谢谢