如何通过服务总线消息触发 Azure 函数并将消息输出到单个 Azure 函数中的服务总线

How to trigger both Azure Function by Service Bus message and output message to Service Bus within single Azure Function

我需要触发一个基于服务总线消息的 Azure 函数,它会执行一些逻辑并将一些消息写回服务总线,这些消息可能会触发另一个 Azure 函数等。

我不明白如何以标准方式正确地做到这一点。

基于这篇文档Azure Service Bus trigger for Azure Functions我们可以做第一部分:通过服务总线消息触发 azure 函数。

代码:

@FunctionName("sbtopicprocessor")
    public void run(
        @ServiceBusTopicTrigger(
            name = "message",
            topicName = "mytopicname",
            subscriptionName = "mysubscription",
            connection = "ServiceBusConnection"
        ) String message,
        final ExecutionContext context
    ) {
        context.getLogger().info(message);
    }

基于此文档Azure Service Bus output binding for Azure Functions我们可以做第二部分:触发输出消息到服务总线。

代码:

@FunctionName("sbtopicsend")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req", methods = {HttpMethod.GET, HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
            @ServiceBusTopicOutput(name = "message", topicName = "mytopicname", subscriptionName = "mysubscription", connection = "ServiceBusConnection") 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();
        
    }

但是我需要在一个函数中同时具备输入/输出功能?我应该通过 http 从第一个函数调用第二个函数,这对我来说有点尴尬,还是应该在第一个函数中使用服务总线 sdk。

感谢您的帮助。

我不使用 Java 但您可以将触发器和输出组合在一个函数中。

@FunctionName("sbtopicprocessor")
public void run(
    @ServiceBusTopicTrigger(
        name = "message",
        topicName = "mytopicname",
        subscriptionName = "mysubscription",
        connection = "ServiceBusConnection"
    ) String messageRequest,
   @ServiceBusTopicOutput(name = "message", topicName = "mytopicname", subscriptionName = "mysubscription", connection = "ServiceBusConnection") OutputBinding<String> message, final ExecutionContext context
) {
    message.setValue(messageRequest.name);
}

您可以在一个函数中组合任何类型的触发器和任何类型的输出。