@Component
public class MqProviderImpl{
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;
@Override
public void sendSkMessage(String message, Properties properties) {
// 发送消息,注册一个回调事件
ListenableFuture<SendResult<String, String>> futureMessage = KafkaConfig.kafkaTemplateStatic.send(“test_topic”,
message);
futureMessage.addCallback(new ListenableFutureCallback<SendResult<String, String>>(){
@Override
public void onSuccess(SendResult<String, String> sendResult) {
log.info(" rev "+sendResult.getProducerRecord().value());
}
@Override
public void onFailure(Throwable ex) {
log.error(" error "+ex.getMessage());
}
});
}}
4.消息消费端:
@KafkaListener(topics = {“test_topic”})
public void receiveSkMessageInfo(ConsumerRecord<String, String> record, @Header(KafkaHeaders.RECEIVED_TOPIC) String topic, Acknowledgment ack) {
log.info(record.value());
}
以上实现是最简单的方式,但使用springboot自动配置的方式,所有配置项必须事先写好在在applicantion.yml的spring.kafka下面,试想在分布式的场景中,如果某一项发生变动,每个应用下面的配置都需要修改,这就需要将这些配置使用服务治理统一管理起来,这里就需要一种自定义配置的方式来解决。
springboot自动配置kafka是在KafkaAutoConfiguration这个类中实现的,它有一个成员KafkaProperties,这个properties中保存所有关于kafka的配置。
// 自动配置是在KafkaAutoConfiguration类实现的
@Configuration
@ConditionalOnClass(KafkaTemplate.class)
@EnableConfigurationProperties(KafkaProperties.class)
@Import({ KafkaAnnotationDrivenConfiguration.class,
KafkaStreamsAnnotationDrivenConfiguration.class })
public class KafkaAutoConfiguration {
private final KafkaProperties properties;
KafkaProper