C# Azure Функция с несколькими выходами на служебную шину - PullRequest
1 голос
/ 04 мая 2020

Я видел документацию Microsoft для Azure Выходная привязка служебной шины для Azure Функции версии 3. Когда я хочу отправить сообщение на служебную шину в качестве возврата функции, я могу использовать этот код:

[FunctionName("ServiceBusOutput")]
[return: ServiceBus("myqueue", Connection = "ServiceBusConnection")]
public static string ServiceBusOutput([HttpTrigger] dynamic input, ILogger log)
{
    log.LogInformation($"C# function processed: {input.Text}");
    return input.Text;
}

Моя проблема началась, когда я хочу получить в качестве выхода 2 сообщения на другую служебную шину. Можно ли вывести привязку более чем на один выход? В онлайн-редакторе вы можете добавить более одного выхода. Как я могу сделать это в коде?

В документации есть раздел Использование , в котором объясняется, что я могу использовать в качестве привязки вывода. Они упоминают ICollector<T> или IAsyncCollector<T>, но я не уверен, что это то, что я ищу.

Другой вопрос - что происходит в API, который возвращает одно значение шине, а другое - пользователю?

1 Ответ

1 голос
/ 04 мая 2020

У вас может быть две IAsyncCollector<T> выходных привязки:

[FunctionName("HttpTriggeredFunction")]
public async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
    [ServiceBus("queuename1", Connection = "ServiceBusConnectionString1")] IAsyncCollector<dynamic> outputServiceBus1,
    [ServiceBus("queuename2", Connection = "ServiceBusConnectionString2")] IAsyncCollector<dynamic> outputServiceBus2,
    ILogger log)
{
    await outputServiceBus1.AddAsync("Item1");

    await outputServiceBus2.AddAsync("Item2");

    return new OkObjectResult(null);
}

local.settings.json:

{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet",
        "ServiceBusConnectionString1": "Endpoint=sb://sb1.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=",
        "ServiceBusConnectionString2": "Endpoint=sb://sb2.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey="
    }
}

Другой вопрос, что происходит в API, который возвращает одно значение к шине, а другой к пользователю?

В приведенном выше примере он возвращает (добавляет) сообщение в служебную шину и возвращает IActionResult (HTTP-ответ) пользователю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...