java - 服务总线主题触发的 Java Azure 函数是否支持 MessageReceiver?

标签 java azure azure-functions azure-servicebus-topics

基本上就是标题。 这是我的代码

   @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/

相关文章:

java - 如何避免 IntelliJ 重置语言级别?

node.js - 如何使用 NodeJS 登录 Azure AD?

Azure Functions 定价和超时

c# - 从哪里获取 Azure Durable Functions 中 RaiseEventAsync 方法的 InstanceId?

java - Vertx 不获取外部 conf 文件

java - Java 中的关闭窗口 (JPanel)

java - 带默认值的 lombok 返回字段的 Spring Rest jackson

azure - Cosmos db 的复合索引没有改善 RU 使用率

wcf - .NET 中的 Azure 服务总线队列集成方法

c# - azure 函数是否在运行的实例之间共享上下文?