如何使用@EventHubTrigger注解在Spring Boot编写的Azure Function中接收Avro Events?

问题描述 投票:0回答:0

这是包含@EventHubTrigger注解的类

package com.function;

import com.microsoft.azure.functions.*;
import com.microsoft.azure.function.annotation.*;

import java.util.Optional;

public class MyFunction extends FunctionInvoker<Object, Object> {

    private static final Logger LOGGER = LoggerFactory.getLogger(MyFunction.class);

    @FunctionName("triggerFunction")
    public void EventHubProcess(
        @EventHubTrigger(name = "message", eventHubName = "myeventhub", connection = "CONN_STRING"), User user, final ExecutionContext context) 
    {
        context.getLogger().info("Java HTTP trigger processed a request: " + message);
        LOGGER.info("User data received :"+user.toString());
        handleRequest(user,context);
    }
}

我的 Avro 生成的 Java 类是这样的:

 package com.myfunction.avromodel;

 import....

 @AvroGenerated
 public class User extends SpecificRecordBase implements SpecificRecord {
    ..........
    ..........
 }

我可以使用此类将事件添加到主题中,但是当我使用@EventHubTrigger 批注接收事件时,我的 Azure 函数日志会给出如下错误:

 Exception: IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $

 Stack: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:225)
    at com.google.gson.Gson.fromJson(Gson.java:991)
    at com.google.gson.Gson.fromJson(Gson.java:956)
    at com.google.gson.Gson.fromJson(Gson.java:905)
    at com.microsoft.azure.functions.worker.binding.DataOperations.convertFromJson(DataOperations.java:158)
    ...........................
    ...........................
    ...........................

我在这里做错了什么?如何使用@EventHubTrigger 注释获取 Avro 数据?我需要添加任何反序列化逻辑吗?如果是,你能举个例子吗?

spring-boot azure azure-functions avro azure-eventhub
© www.soinside.com 2019 - 2024. All rights reserved.