基本上就是标题。 这是我的代码
@FunctionName("Process")
public void run(@ServiceBusTopicTrigger(
name = "req",
topicName = TemplatedConstants.topicName,
subscriptionName = TemplatedConstants.subscriptionName,
connection = "ServiceBusConnectionString")
@BindingName("MessageReceiver") MessageReceiver messageReceiver, String message, final ExecutionContext context) {
我尝试将 MessageReceiver 注入(inject) Java Azure Function,但收到以下错误。
“com.microsoft.azure.servicebus.MessageReceiver”在“com.microsoft.azure.servicebus”中未公开。无法从外部包访问
我的目标是以“破坏性读取”模式而不是默认的“窥视锁定”模式读取消息。我希望在收到消息后立即调用 MessageReceiver 对象上的 .complete() 方法,以便在锁定持续时间结束后消息不会变成死字。
最佳答案
不幸的是,Azure Functions 中的非 C# 语言不支持绑定(bind)到复杂的特定于语言的类型。需要时您必须直接使用 SDK。
但是您仍然可以通过设置 extensions.serviceBus.messageHandlerOptions.autoComplete
来实现“破坏性读取”(又名 ReceiveAndDelete )属性(property)值(value)true
在 host.json
.
唯一的其他选择是使用函数执行通过 REST 等将消息传递给另一个函数,并让触发的函数立即结束。
如果序列号和锁定 token 在 message metadata 中可用,从技术上讲,您应该能够通过 Service Bus API 完成消息。但这将是公开它们的功能请求,更不用说服务总线 SDK 不会公开使用这些参数来允许完成消息的方法。
关于java - 服务总线主题触发的 Java Azure 函数是否支持 MessageReceiver?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63165105/