Вывод JSON Массив из функции Azure и службы приложения, разделенных на отдельные сообщения - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть функция azure и служба приложений azure, которые работают одинаково. Из обоих я вывожу полезную нагрузку, содержащую массив Json с несколькими Json объектами [{"x": "y"}, {"a": "b"}] в EventHub. Когда я проверяю концентраторы событий, я вижу, что массив был разбит на отдельные составляющие Json объектов.

{"x": "y"}

и

{"a": "b"}

(т.е. 2 сообщения)

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

Я бы хотел иметь возможность контролировать это поведение. Единственный способ найти это - обернуть массив в Json объект примерно так:

{"payload": [{"x": "y"}, {"a": " b "}]}

Редактировать 1: функция записана в java с функцией пружинного облака. Вот определение Обработчика, включая привязки:

public class CollectMessageHandler extends AzureSpringBootRequestHandler<Message, String> {
    @FunctionName("collect")
    @EventHubOutput(name = "output", eventHubName = "collected", connection = "OUT_CONN_STRING")
    public String collect(
            @EventHubTrigger(name = "input", eventHubName = "incoming", cardinality = Cardinality.ONE, connection = "IN_CONN_STRING") Message message,
            ExecutionContext targetExecutionContext
    ) {
        return handleRequest(message, targetExecutionContext);
    }
}

1 Ответ

0 голосов
/ 17 апреля 2020

Я мог бы воспроизвести эту проблему, после изменения нескольких dataType и возвращаемого типа, он все еще разрешит массив для нескольких json объектов. Поэтому я предполагаю, что функция java Azure будет делать это по умолчанию.

Поэтому после этого мое решение помещает этот массив json в другой массив, как показано ниже.

public void run(
             @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
            final ExecutionContext context,
             @EventHubOutput(name = "event", eventHubName = "test", connection = "AzureEventHubConnection",dataType = "String") OutputBinding<Object> output) {
        context.getLogger().info("Java HTTP trigger processed a request.");

        JSONObject jo1 = new JSONObject();
        jo1.put("firstName", "John");
        jo1.put("lastName", "Doe");
        JSONObject jo2 = new JSONObject();
        jo2.put("firstName", "george");
        jo2.put("lastName", "chen");


        JSONArray ja = new JSONArray();
        ja.add(jo1);
        ja.add(jo2);


        Object[] o=new Object[]{ja};
        output.setValue(o);

    }

Затем в случае, если он будет отображаться в виде массива, как показано ниже, pi c.

enter image description here

...