Azure Functions Service Bus输出绑定:如何自定义消息属性?
问题描述
以下是我的Azure Functions代码:
@FunctionName("MyFunction") public void run( @ServiceBusQueueTrigger(name = "message", queueName = "Input", connection = "connStr") String message, @BindingName("UserProperties") Map<String, Object> properties, @ServiceBusQueueOutput(name = "result", queueName = "Output", connection = "connStr") OutputBinding<String> result, ExecutionContext context ) { // do something result.setValue("output msg"); }
在输入绑定里,我可以通过@BindingName("UserProperties")注解轻松获取消息属性。想问下有没有类似的方式,通过绑定来设置输出绑定的自定义消息属性?
我知道可以在函数末尾用Service Bus SDK发送带自定义属性的消息,但更倾向于用绑定方式实现。
解决方案
可以直接通过绑定ServiceBusMessage类型来实现,不用调用额外的SDK。具体做法是把输出绑定的类型从OutputBinding<String>改成OutputBinding<ServiceBusMessage>,然后直接操作ServiceBusMessage的属性即可。
修改后的代码示例:
@FunctionName("MyFunction") public void run( @ServiceBusQueueTrigger(name = "message", queueName = "Input", connection = "connStr") String message, @BindingName("UserProperties") Map<String, Object> properties, @ServiceBusQueueOutput(name = "result", queueName = "Output", connection = "connStr") OutputBinding<ServiceBusMessage> result, ExecutionContext context ) { // 构造输出消息 ServiceBusMessage outputMessage = new ServiceBusMessage("output msg"); // 添加自定义属性 outputMessage.getApplicationProperties().put("CustomKey", "CustomValue"); outputMessage.getApplicationProperties().put("NumericProperty", 456); // 绑定输出 result.setValue(outputMessage); }
这样就能完全通过绑定机制设置自定义消息属性,不需要额外调用SDK发送消息。只要你的项目依赖了azure-functions-java-library包,就能直接使用ServiceBusMessage这个类。
内容的提问来源于stack exchange,提问作者xKrasusX
相关产品推荐
相关产品推荐

