Выполнение той же функции Azure, но для разных входных значений в настройках приложения

У меня есть сценарий функции Azure следующим образом: 1) Если продукт = 123, то использовать раздел шины обслуживания1 2) Если продукт = 456, тогда использовать раздел шины обслуживания 2

Я думаю, что есть 2 варианта, чтобы решить эту проблему:

ВАРИАНТ 1. Развертывание одной и той же функции Azure 2 раза (с двумя именами различий), каждое из которых имеет свое сопоставление ввода / вывода.
ВАРИАНТ 2: Имейте только 1 функцию Azure, но в настройках приложения укажите сопоставление ввода / вывода. ** Насколько я понимаю, настройка приложения является ключевым значением. Это правильно? если нет, как я могу указать комплексное значение в этом параметре **.

Каков наилучший способ получить это?

Я думаю о том, чтобы развернуть одни и те же функции Azure 2 раза с различными настройками следующим образом:

  1. Функция Azure 1 с параметрами приложения в виде "productid" = 123 и "sbTopic" = topic1
  2. Функция Azure 2 с настройками приложения в виде "productid" = 456 и "sbTopic" = topic2

Мне интересно, есть ли лучший способ, чтобы одна и та же функция Azure могла работать для любого из моих отображений ввода / вывода. Если да, где и как мне указать мои входные (productid) и выходные (sbTopic) отображения?

РЕДАКТИРОВАТЬ 1: это CosmosDB Trigger. Всякий раз, когда мы получаем продукты в БД Космос, я хочу отправить на правильную тему SB

РЕДАКТИРОВАТЬ 2: у меня есть что-то похожее следующим образом:

Триггер Cosmos DB -> Функция Azure -> Раздел служебной шины для id=123

Я спорю, если я должен иметь следующее

Космический триггер БД -> Azure Function1 -> Раздел служебной шины для id=123
Космический триггер БД -> Azure Function2 -> Раздел служебной шины для id=456
Триггер Cosmos DB -> Azure Function3 -> Раздел служебной шины для id=789
а это значит, что я бы 3 дублированных AF
так далее

или же

Cosmos DB Trigger -> 1 функция Azure. Укажите сопоставления (идентификатор продукта и тема sb) в настройках приложения и -> добавить логику в AF так, чтобы:
если id=123 отправить сообщение в topic1;
если id=456 отправить сообщение в тему 2 и т. д.

2 ответа

Опция, предложенная @RomanKiss, имеет смысл, и это "каноническое" использование тем и подписок служебной шины.

Но если вам нужно выполнить то, о чем вы просите, вы можете достичь этого с помощью одной функции Azure и обязательных привязок.

Во-первых, НЕ объявляйте свою привязку выходной служебной шины в function.json,

Реализуйте свою функцию следующим образом:

public static void Run([CosmosDBTrigger("...", "...")] Product product, Binder binder)
{
    var topicName = product.Id == "123" ? "topic1" : "topic2";
    var attribute = new ServiceBusAttribute(topicName);

    var collector = binder.Bind<ICollector<string>>(attribute);
    collector.Add("Your message");
}

Кстати, если вы развернете свою функцию два раза, вам придется поместить их в разные коллекции аренды, иначе они будут конкурировать друг с другом, а не выполнять обработку дважды. И вам нужно позаботиться о том, чтобы НЕ отправлять сообщение в тему 1, когда продукт равен 123, и наоборот.

Ваша модель Pub/Sub должна управляться темой на основе правил подписки. Следующий фрагмент экрана показывает пример этой модели:

PubSubModel

В приведенной выше модели Pub/Sub издатель запускает тему со свойствами приложения для получения дополнительных сведений, таких как productid, тип и т. Д. В теме на служебной шине может быть несколько объектов подписок для определенных фильтров (правил).

Subscriber (в этом примере, функция ServiceBusTrigger) может быть запущен на TopicName и SubscriptionName, настроенных в настройках приложения.

Другими словами, объект подписки (правила) может решить, какой подписчик будет использовать сообщение о событии. Также преимущество этой модели Pub/Sub заключается в непрерывном развертывании, где каждая среда, такая как dev, stage, QA, pre-production, production, имеет одинаковую модель (topicName, subscriptionName, Rules и т. Д.), И только строка подключения будет указывать, какая подписка Azure (среда) является текущей.

Другие вопросы по тегам