quarkus应用程序中kafka反序列化程序中的cdi上下文

ergxz8rk  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(727)

我有一个基于kafka的带有smallryeReact式消息传递的quarkus项目。因为我想使用“复杂的pojo”,所以我需要一个自定义的反序列化程序。
我想创建这两个类cdibean,这样我就可以注入并使用我的定制记录器,这是一个cdibean。有办法做到这一点吗?
现在,我的注入记录器对象只是空的:

import org.apache.kafka.common.serialization.Serializer;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;

@ApplicationScoped
public class MySerializer implements Serializer<MyDto>
{
    @Inject MyLogger logger;

    @Override public byte[] serialize(String topicName, MyDto myDto)
    {
        // this causes a java.lang.NullPointerException
        logger.info("serializing");

        ...
    }
}
ny6fqffe

ny6fqffe1#

据我所知,您只能向kafka注册一个类名,它将在内部创建该类,即不使用cdi。
可能的解决方法:使注册对象成为CDIBean的薄 Package 器,并将工作委托给该bean:

public class MySerializer implements Serializer<MyDto> {
    private MySerializerCdi delegate;

    public MySerializer() {
        delegate = CDI.current().select(MySerializerCdi.class).get();
    }

    @Override public byte[] serialize(String topicName, MyDto myDto) {
        return delegate.serialize(topicName, myDto);
    }
    ...
}

... 并相应地重命名原来的cdi类。

相关问题