Java 如何传递一般信息<;T>;作品
我正在试图了解使用kafka消息处理器时,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
消息
是如何工作的。我是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框架的新手……很想知道消息是如何发挥作用的