Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何传递一般信息<;T>;作品_Java_Apache Kafka_Spring Kafka - Fatal编程技术网

Java 如何传递一般信息<;T>;作品

Java 如何传递一般信息<;T>;作品,java,apache-kafka,spring-kafka,Java,Apache Kafka,Spring Kafka,我正在试图了解使用kafka消息处理器时,消息是如何工作的。我是spring框架的新手 例如,我在@Service类中使用了下面的方法(不要担心代码错误)。此方法正在处理kafka consumer在运行时在方法下方推入的消息 @kafkaListener(id="id", topics="$consumer.topic", groupId = "$group-id", autoStartUp = "false" p

我正在试图了解使用kafka消息处理器时,
消息
是如何工作的。我是spring框架的新手

例如,我在
@Service
类中使用了下面的方法(不要担心代码错误)。此方法正在处理kafka consumer在运行时在方法下方推入的消息

@kafkaListener(id="id", topics="$consumer.topic", groupId = "$group-id", autoStartUp = "false"
public void myKafkaConsumerMessages(Message<BusinessEvents> message, @Header(KafkaHeaders.Received_Partition_Id) Integer id, @Header(KafkaHeaders.Offset) Integer offset, Acknowledgement ack) {

    BusinessEvents bi = message.getPayload();

}
@kafkaListener(id=“id”,topics=“$consumer.topic”,groupId=“$group id”,autoStartUp=“false”
public void myKafkaConsumerMessages(消息消息消息,@Header(KafkaHeaders.Received_Partition_Id)整数Id,@Header(KafkaHeaders.Offset)整数偏移量,确认确认){
BusinessEvents bi=message.getPayload();
}
我没有访问
BusinessEvents
类的权限,所以看不到其中的内容。所以想知道,如果我的代码与上面的代码类似,那么
BusinessEvents
必须实现
消息
接口

如果答案是否,那么只要使用
getPayload()
,哪里
消息
进入流程并能够生成
BusinessEvents
的消息

我很想知道
Message
是如何发挥作用的,能够生成
BusinessEvents
类型?要生成
BusinessEvents
类型,来自卡夫卡的消息必须是
BusinessEvents
类型


我希望我的问题对所有人来说都是清楚的,如果不是,请让我知道我将尝试解释更多。

我认为注释足够清楚,但有时因为看到代码可以帮助您更好地理解它,所以下面是一个简单的消息实现:

public class Message<T> {
    
    private final T payload;
    
    public Message(final T payload) {
        this.payload = payload;
    }
    
    public T getPayload() {
        return payload;
    }
}
公共类消息{
专用最终T载荷;
公共消息(最终有效载荷){
这个有效载荷=有效载荷;
}
公共T getPayload(){
返回有效载荷;
}
}

消息对象是Spring消息传递的容器对象。它不是必需的,因为您可以使用
K键、V value
参数,甚至仅仅是值类型来定义
@KafkaListener
方法。一般来说,如果您是不访问Kafka记录头,不与其他spring消息传递依赖项交互,只关心记录值(有效负载)


如果您确实使用了
消息
,那么您需要定义一个封装Kafka序列化过程的函数。

您了解泛型吗?@ThorbjørnRavnAndersen,是的,先生,我不知道Kafka,但我可以想象BusinessEvents在一端序列化,在另一端反序列化。如果您了解泛型,其余的应该很明显,您可以将消息视为任何类型的消息的容器。不知道
消息
的定义,很难确定,但是
消息
对象很可能是表示包含BusinessEvents对象的消息的对象。给定
消息
对象,我希望您可以n来自它的
BusinessEvents
对象(使用
getPayload()
maybe?)。泛型与继承无关,因此
BusinessEvents
不需要实现
Message
或其他任何东西。如果
Message
的定义实际上只是
Message
,那么它将采用任何类型。@TrinTrin说“那么BusinessEvents必须已经实现了Message接口”这不是
Message
的意思。您可能想进一步研究泛型。这不是一个自定义类,它来自Spring,我知道。我只是想向他展示容器类如何使用泛型。显然这不是真正的实现。当然,但我认为更好的答案可以解释Spring如何实际使用Me总的来说,信息类(因为它不是必需的)比简单地解释泛型如何工作我认为这不是他要问的,也许他可以把问题说得更清楚。试图理解消息如何工作,同时使用kafka消息处理器。我是spring框架的新手……很想知道消息是如何发挥作用的