Spring boot Spring云流:标题kafka_确认值为空
我正试图根据应用程序中消息的处理状态控制kafka主题上的偏移提交。若消息成功,则可以提交偏移量。为此,我尝试在我的方法if中获取标题,以便可以手动确认消息Spring boot Spring云流:标题kafka_确认值为空,spring-boot,spring-integration,spring-cloud-stream,spring-kafka,Spring Boot,Spring Integration,Spring Cloud Stream,Spring Kafka,我正试图根据应用程序中消息的处理状态控制kafka主题上的偏移提交。若消息成功,则可以提交偏移量。为此,我尝试在我的方法if中获取标题,以便可以手动确认消息 spring: cloud: stream: default: contentType: application/json default-binder: binder1-kafka bindings: myChannel: binde
spring:
cloud:
stream:
default:
contentType: application/json
default-binder: binder1-kafka
bindings:
myChannel:
binder: binder1-kafka
destination: my_topic
content-type: text/plain
consumer:
autoCommitOffset: false
outChannel:
binder: binder2-kafka
destination: my_topic
content-type: text/plain
consumer:
autoCommitOffset: false
binders:
#Connection config to different clusters
binder1-kafka:
type: kafka
defaultCandidate: true
environment:
spring:
cloud:
stream:
kafka:
binder:
brokers: some-url1:9092
binder2-kafka:
type: kafka
defaultCandidate: false
environment:
spring:
cloud:
stream:
kafka:
binder:
brokers: some-url2:9092
但是当使用侦听器作为
@StreamListener(target = IBrokerChannel.myChannel )
public void handlePayload(@Payload MyPayload payload, @Headers Map<String, Object> headers) {
Acknowledgment acknowledgment= (Acknowledgment) headers.get("kafka_acknowledgment"); // acknowledgment object is always null.
acknowledgment.acknowledge();
}
@StreamListener(target=IBrokerChannel.myChannel)
public void handlePayload(@Payload MyPayload Payload,@Headers Map Headers){
Acknowledgement=(Acknowledgement)headers.get(“kafka_Acknowledgement”);//Acknowledgement对象始终为空。
确认。确认();
}
确认
始终为null
。我正在使用kafka producer cli向主题发送消息spring boot
版本为1.5.10。发布版您的配置属性定义中缺少kafka
分支。一定是这样的:
spring:
cloud:
stream:
default-binder: kafka
kafka:
bindings:
myChannel:
consumer:
autoCommitOffset: false
您的配置属性定义中缺少kafka
分支。一定是这样的:
spring:
cloud:
stream:
default-binder: kafka
kafka:
bindings:
myChannel:
consumer:
autoCommitOffset: false
对我来说很好
@SpringBootApplication
@EnableBinding(Sink.class)
public class So51159949Application {
public static void main(String[] args) {
SpringApplication.run(So51159949Application.class, args);
}
@Bean
public ApplicationRunner runner(KafkaTemplate<byte[], byte[]> template) {
return args -> {
template.send("so51159949", "foo".getBytes());
};
}
@StreamListener(Sink.INPUT)
public void in(String in, @Headers MessageHeaders headers) {
System.out.println(in);
System.out.println(headers);
Acknowledgment ack = headers.get(KafkaHeaders.ACKNOWLEDGMENT, Acknowledgment.class);
ack.acknowledge();
}
}
及
对我来说很好
@SpringBootApplication
@EnableBinding(Sink.class)
public class So51159949Application {
public static void main(String[] args) {
SpringApplication.run(So51159949Application.class, args);
}
@Bean
public ApplicationRunner runner(KafkaTemplate<byte[], byte[]> template) {
return args -> {
template.send("so51159949", "foo".getBytes());
};
}
@StreamListener(Sink.INPUT)
public void in(String in, @Headers MessageHeaders headers) {
System.out.println(in);
System.out.println(headers);
Acknowledgment ack = headers.get(KafkaHeaders.ACKNOWLEDGMENT, Acknowledgment.class);
ack.acknowledge();
}
}
及
应用它。现在侦听器没有接收到消息:(.在我的应用程序中,我也有多个集群的绑定器。我只向您展示了如何修复这个特殊的autocommitofset
属性-其余的一切都必须保持不变。尽管您可能需要重新检查文档,看看您的所有属性是否都在正确的分支中。我刚刚测试了它,没有任何问题-请参阅我的答案。@Artem:我编辑了我应用程序中的配置详细信息。您仍然缺少autocommitofset
属性的Kafka
分支…应用了它。现在侦听器没有接收到消息:(.在我的应用程序中,我也有多个集群的绑定器。我只向您展示了如何修复这个特殊的autocommitofset
属性-其余的一切都必须保持不变。尽管您可能需要重新检查文档,看看您的所有属性是否都在正确的分支中。我刚刚测试了它,没有任何问题-请参阅我的答案。@Artem:我编辑了我应用程序中的配置详细信息。你仍然缺少autocommitofset
属性的Kafka
分支…我编辑了这个问题。我使用了你建议的配置,仍然不走运。再看看这个问题。正如Artem所说,你仍然缺少autoC路径中的Kafka:
ommitOffset
property。这是一个卡夫卡特定的设置,而不是一般的消费者设置。我在eclipse中作为一个未知属性获取此设置。请您帮助不要在注释中提出新问题。提出一个显示代码和配置的新问题。我编辑了该问题。我放置了您建议的配置,仍然没有运气。请再次查看该任务ion。正如Artem所说,在autocommitofset
属性的路径中,您仍然缺少kafka:
。这是一个特定于kafka的设置,而不是一般的使用者设置。我在eclipse中将其作为未知属性获取。请您帮忙不要在注释中提出新问题。提出一个显示代码和配置的新问题。有任何解决方案吗“这件事怎么办?”Pradeep KrKaushal@beginner_coder.是的,看答案。这个问题有什么解决办法吗?@Pradeep KrKaushal@beginner_coder.是的,看答案。