问题描述
我需要基于Service Bus消息触发Azure函数,该消息将执行某些逻辑,并将某些消息写回到Service Bus,这可能会触发另一个Azure函数,等等。
我不了解如何以标准方式正确进行操作。
基于此文档Azure Service Bus trigger for Azure Functions,我们可以做第一部分:通过服务总线消息触发天蓝色功能。
代码:
@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",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从第一个函数调用第二个函数,这对我来说似乎有点尴尬,还是我应该在拳头函数中使用Service bus sdk。
感谢您的帮助。
解决方法
我不使用Java,但是您可以将Trigger和Output组合在一个函数中。
@FunctionName("sbtopicprocessor")
public void run(
@ServiceBusTopicTrigger(
name = "message",topicName = "mytopicname",subscriptionName = "mysubscription",connection = "ServiceBusConnection"
) String messageRequest,@ServiceBusTopicOutput(name = "message",connection = "ServiceBusConnection") OutputBinding<String> message,final ExecutionContext context
) {
message.setValue(messageRequest.name);
}
您可以在一个功能中组合任何类型的触发器和任何类型的输出。