Правило подписки на темы Azure, созданное с помощью Обозревателя служебной шины, не запускается

Я использую 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, поэтому свойство есть.


person Trevor Cousins    schedule 23.01.2019    source источник


Ответы (1)


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

  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");
    }
});
person Jerry Liu    schedule 29.01.2019