Правило подписки на тему Azure, созданное с помощью Service Bus Explorer, не запускается - PullRequest
0 голосов
/ 23 января 2019

Я использую Service Bus Explorer как быстрый способ тестирования правила, которое не работает при развертывании через ARM.

В JavaScript в функции Azure я задаю для сообщения темы:

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

В обозревателе служебной шины я устанавливаю правило для подписки со следующей строкой:

Indicator = 'Itinerary'

Но сообщения, отправленные в тему, не переходят в эту подписку (они переходят в другую с правилом1 = 1)

Вопрос: Что мне здесь не хватает?

Дополнительная информация:

  1. У меня нет доступа к свойству Indicator,В качестве теста я создал действие для правила 1 = 1, которое добавилось к свойству Indicator, и результат был пустым.

  2. Я могу получить доступ к свойству Indicator в JavaScript, если у меня естьФункция, которая вызывается правилом 1 = 1, поэтому свойство присутствует.

1 Ответ

0 голосов
/ 29 января 2019

Правило не работает, потому что

  1. Правило работает против системных или пользовательских свойств, а не тела сообщения.
  2. То, что выводит функция js, является просто телом сообщения, т.е. context.bindings.outputSbMsg = { Indicator: 'Itinerary'}; отправляет сообщение { Indicator: 'Itinerary'}, и мы не устанавливаем никакого свойства.

И правило по умолчанию с 1 = 1 истинным фильтром позволяет выбирать все сообщения в подписке, так что вы видите, что сообщения отправляются туда все время. Проверьте документ фильтров темы для более подробной информации.

Пока что по проекту , что вывод функции js не может заполнять свойства сообщения. Чтобы фильтр работал, мы должны вместо этого отправлять сообщения со свойством, используя 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");
    }
});
...