Сбой модуля IoT Edge с более чем 1 входом. Тест с input1 и input2 в одном модуле не прошел

Сколько сообщений может входить в модуль IoT Edge на C #? Все примеры показывают "input1", но не более того. В документации не упоминается ничего, кроме input1.

Я пытаюсь использовать несколько входов в одном модуле IoT Edge C #, но не знаю, как это сделать. Программа-пример устанавливает «input1», подключенный к обработчику входных сообщений с именем PipeMessage. При использовании этого модуля с маршрутизацией по умолчанию все работает хорошо. При попытке добавить второй обработчик входящего сообщения и вызвать вход «input2» и добавить маршрутизацию, ничего не проходит. Как нам настроить более одного входа в модуле C # IoT Edge?

Program.cs Task Init () устанавливает обработчик входящего сообщения с помощью метода обратного вызова, называемого PipeMessage. Я дублирую этот код и меняю имена второго входа, но ничего не выходит.

 static async Task Init()
 {
        AmqpTransportSettings amqpSetting = new AmqpTransportSettings(TransportType.Amqp_Tcp_Only);
        ITransportSettings[] settings = { amqpSetting };

        // Open a first connection to the Edge runtime
        ModuleClient ioTHubModuleClient = await ModuleClient.CreateFromEnvironmentAsync(settings);
        await ioTHubModuleClient.OpenAsync();
        Console.WriteLine("IoT Hub module client initialized.");

        // Register callback to be called when a message is received by the module on input1
        await ioTHubModuleClient.SetInputMessageHandlerAsync("input1", PipeMessage, ioTHubModuleClient);

        // Open a second connection to the Edge runtime
        ModuleClient ioTHubModuleClient2 = await ModuleClient.CreateFromEnvironmentAsync(settings);
        await ioTHubModuleClient2.OpenAsync();
        Console.WriteLine("IoT Hub module client initialized.");

        // Register callback to be called when a message is received by the module on input2
        await ioTHubModuleClient2.SetInputMessageHandlerAsync("input2", PipeMessage2, ioTHubModuleClient);
}

`

и маршруты следующие:

    "routes": {
        "CSharpFilter2ToIoTHub": "FROM /messages/modules/CSharpFilter2/outputs/* INTO $upstream",
        "sensor1ToCSharpFilter2": "FROM /messages/modules/tempSensor1/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/CSharpFilter2/inputs/input1\")",
        "sensor2ToCSharpFilter2": "FROM /messages/modules/tempSensor2/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/CSharpFilter2/inputs/input2\")"
      },

Что я делаю неправильно?

В частности, что мы должны делать для обработки более чем одного ввода в модуле IoT Edge?


person Daniel Maxwell    schedule 05.04.2019    source источник


Ответы (1)


Вам не нужно (или нужно) создавать второй ModuleClient. Вместо этого просто вызовите SetInputMessageHandlerAsync () несколько раз:

ModuleClient ioTHubModuleClient = await ModuleClient.CreateFromEnvironmentAsync(settings);
await ioTHubModuleClient.OpenAsync();   

await ioTHubModuleClient.SetInputMessageHandlerAsync("input1", PipeMessage1, ioTHubModuleClient);
await ioTHubModuleClient.SetInputMessageHandlerAsync("input2", PipeMessage2, ioTHubModuleClient);
person silent    schedule 05.04.2019