使用Service Bus Explorer创建的Azure主题订阅规则未触发

时间:2019-01-23 11:25:07

标签: azure azure-functions azureservicebus azure-servicebus-topics

我使用Service Bus Explorer作为测试通过ARM部署时不起作用的规则的快速方法。

在Azure函数的JavaScript中,我将主题消息设置为:

context.bindings.outputSbMsg = { Indicator: 'Itinerary'};

在Service Bus Explorer中,我使用以下字符串在订阅上设置规则:

Indicator = 'Itinerary'

但是发送到主题的消息不会进入该订阅(它们以规则1 = 1转到另一个订阅)

问题:我在这里想念什么?

补充信息:

  1. 我似乎无权访问Indicator属性。作为测试,我对附加到指标属性的1 = 1规则创建了一个操作,结果为空。

  2. 如果我具有由1 = 1规则触发的Function,那么我就可以访问JavaScript中的Indicator属性,

1 个答案:

答案 0 :(得分:1)

该规则不起作用,因为

  1. 该规则适用于系统或用户定义的属性,而不适用于消息正文。
  2. js函数输出的只是消息正文,即context.bindings.outputSbMsg = { Indicator: 'Itinerary'};发送一条消息{ Indicator: 'Itinerary'},而我们没有设置任何属性。

并且具有1 = 1 true过滤器的默认规则使所有消息都可以选择到订阅中,因此您可以看到消息一直都在那儿。检查doc of topic filters了解更多详细信息。

目前,js函数输出无法填充消息属性是by design。为了使过滤器正常工作,我们必须使用SDK发送具有属性的消息。安装azure-sb软件包,然后尝试下面的示例代码。

const azuresb = require("azure-sb");
const connStr = "ServiceBusConnectionString";
const mytopic = "mytopic";

var serviceBus = azuresb.createServiceBusService(connStr);
const msg =
{
  body: "Testing",
  customProperties: {
    Indicator: 'Itinerary'
  }
};
serviceBus.sendTopicMessage(mytopic, msg, function(error) {
    if (error) {
        context.log(error);
    }
    else{
        context.log("Message Sent");
    }
});