KafkaTemplate生产者回调

例子如下:

 @Autowired
    KafkaTemplate<String, String> kafkaTemplate;

    public void testKafkaTemplate () {
        ListenableFuture<SendResult<String, String>> future = kafkaTemplate.send("topic", "{\"key\": \"value\"}");

        CompletableFuture<SendResult<String, String>> completable = future.completable();
        completable.whenCompleteAsync((n, e) -> {
            if (null != e) {
                System.out.println("发送报错了");
            } else {
                System.out.println("发送成功了!");
            }
        });
    }

    public void testKafkaTemplate1() {
        ListenableFuture<SendResult<String, String>> future = kafkaTemplate.send("topic", "{\"key\": \"value\"}");
        future.addCallback(new ListenableFutureCallback<SendResult<String, String>>() {
            @Override
            public void onFailure(Throwable throwable) {
                //
            }

            @Override
            public void onSuccess(SendResult<String, String> stringStringSendResult) {
                //
            }
        });
    }
Spring Kafka允许你在Spring应用中方便地管理Kafka生产者和消费者。如果你需要自定义多个Kafka生产者和消费者工厂,你可以这样做: 首先,你需要配置多个`KafkaTemplate`实例,每个实例对应于不同的生产者或消费者群组。这通常通过定义一个@Configuration类,并在里面创建多个@Bean来实现。 例如: ```java @Configuration public class KafkaConfig { @Bean(name = "myProducerA") public ProducerFactory<String, String> producerFactoryA() { // 配置生产者A,如设置bootstrap servers、key deserializer、value serializer等 Map<String, Object> props = new Properties(); props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092"); props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class); return new DefaultKafkaProducerFactory<>(props); } @Bean(name = "myConsumerB") public ConcurrentKafkaListenerContainerFactory<String, MyEvent> consumerFactoryB() { ConcurrentKafkaListenerContainerFactory factory = new ConcurrentKafkaListenerContainerFactory<>(); factory.setConsumerFactory(consumerBuilderFactory()); // 自定义其他配置,如设置group id、回调处理器等 factory.getContainerProperties().setGroupId("consumerGroupB"); factory.setConcurrency(2); // 设置并发处理数 return factory; } private ConsumerFactory<MyEvent, String> consumerBuilderFactory() { // 配置消费者B,如设置主题订阅、属性解析器等 Map<String, Object> consumerProps = new HashMap<>(producerFactoryA().getConfiguration()); consumerProps.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest"); // 设置偏移量策略 return new DefaultKafkaConsumerFactory<>(consumerProps, new MyEventDeserializer(), new StringDeserializer()); } } ``` 在这个例子中,`myProducerA` 和 `myConsumerB` 分别代表两个不同的生产者和消费者的实例。`MyEventDeserializer` 应该是一个实现了`KafkaDeserializing`接口的类,用于从接收到的消息中解码数据。 然后,在需要使用的地方,你可以注入对应的`KafkaTemplate`或`KafkaMessageListenerContainer`,比如: ```java @Autowired private KafkaTemplate<String, String> producerA; @Autowired private ConcurrentKafkaListenerContainerFactory<String, MyEvent> consumerBFactory; ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值