世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。
配置:
@Configuration
@EnableConfigurationProperties(KafkaConfigEntity.class)
@EnableKafka
public class KafkaConfig {
@Bean
public ProducerFactory<String, String> producerFactory (KafkaConfigEntity kafkaConfigEntity) {
Map<String, Object> props = producerConfigs(kafkaConfigEntity);
ProducerFactory<String, String> producerFactory = new DefaultKafkaProducerFactory<>(props);
return producerFactory;
}
@Bean
public Map<String, Object> producerConfigs (KafkaConfigEntity kafkaConfigEntity) {
String host = kafkaConfigEntity.getHost();
Map<String, Object> props = new HashMap<>(16);
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, host);
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
return props;
}
@Bean
public KafkaTemplate<String, String> kafkaTemplate (ProducerFactory<String, String> producerFactory) {
KafkaTemplate<String, String> kafkaTemplate = new KafkaTemplate<>(producerFactory);
return kafkaTemplate;
}
@Bean
public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> kafkaListenerContainerFactory (KafkaConfigEntity kafkaConfigEntity) {
ConsumerFactory<String, String> consumerFactory = consumerFactory(kafkaConfigEntity);
ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory);
factory.setConcurrency(3);
return factory;
}
@Bean
public ConsumerFactory<String, String> consumerFactory (KafkaConfigEntity kafkaConfigEntity) {
Map<String, Object> props = consumerConfigs(kafkaConfigEntity);
ConsumerFactory<String, String> consumerFactory = new DefaultKafkaConsumerFactory<>(props);
return consumerFactory;
}
@Bean
public Map<String, Object> consumerConfigs (KafkaConfigEntity kafkaConfigEntity) {
String host = kafkaConfigEntity.getHost();
Map<String, Object> props = new HashMap<>(16);
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, host);
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
return props;
}
}
发消息:
@Autowired
KafkaTemplate<String, String> kafkaTemplate;
@Test
public void test1 () {
kafkaTemplate.send("topic1", "hello kafka");
}
收消息:
@KafkaListener(id = “1”, topics = "topic1")
public void listener1 (String data) {
System.out.println("kafka Receive topic1: " + data);
}