Выходная привязка служебной шины для Java на основе Azure Функция не работает - ошибок нет - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь построить Java основанную Azure функцию для запуска по HTTP и отправки данных в Topi c служебной шины. Это основано на примере кода. HTTP Trigger работает нормально (возвращается имя Hello), но я не получаю никаких данных, отправленных в служебную шину. И я не получаю сообщение об ошибке. Я проверил с помощью функции C#, что «queueconstring» в local.settings. json является правильным.

https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus-output?tabs=java

/* 20.3.2020 HTTP Trigger and Topic output binding*/
package com.function;

import java.util.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;

/**
 * Azure Functions with HTTP Trigger.
 */
public class HttpTriggerSBOutputJava {
    /**
     * This function listens at endpoint "/api/HttpTriggerSBOutputJava". Two ways to invoke it using 
   "curl" command in bash:
     * 1. curl -d "HTTP Body" {your host}/api/HttpTriggerSBOutputJava
     * 2. curl {your host}/api/HttpTriggerSBOutputJava?name=HTTP%20Query
     */


    @FunctionName("HttpTriggerSBOutputJava")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
        @ServiceBusTopicOutput(name = "message", topicName = "ContactInformationChanged", subscriptionName = "Playground", connection = "queueconstring") OutputBinding<String> message,
        final ExecutionContext context) {

        String name = request.getBody().orElse("Azure Functions");

        message.setValue(name);
        return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();

    }

}

1 Ответ

1 голос
/ 02 апреля 2020

Вы можете использовать приведенный ниже код, он отлично работает на моей стороне:

Функция. java

package com.function;

import java.util.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;

/**
 * Azure Functions with HTTP Trigger.
 */
public class Function {
    /**
     * This function listens at endpoint "/api/HttpExample". Two ways to invoke it using "curl" command in bash:
     * 1. curl -d "HTTP Body" {your host}/api/HttpExample
     * 2. curl "{your host}/api/HttpExample?name=HTTP%20Query"
     */
    @FunctionName("HttpExample")
    @ServiceBusTopicOutput(name = "message", topicName = "test", subscriptionName = "test", connection = "ServiceBusConnection")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
            final ExecutionContext context) {
        context.getLogger().info("Java HTTP trigger processed a request.");

        // Parse query parameter
        String query = request.getQueryParameters().get("name");
        String name = request.getBody().orElse(query);

        if (name == null) {
            return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body("Please pass a name on the query string or in the request body").build();
        } else {
            return request.createResponseBuilder(HttpStatus.OK).body("Hello, " + name).build();
        }
    }
}

local.settings. json

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "",
    "FUNCTIONS_WORKER_RUNTIME": "java",
    "ServiceBusConnection":"Endpoint=sb://bowmantest.servicebus.windows.net/;SharedAccessKeyName=test;SharedAccessKey=xxxxxxxxx"
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...