Maven配置
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-kafka</artifactId>
</dependency>
Application配置
application.proerties/application.yaml
儘管我配置了生產者和消費者key-serializer和value-serializer,但是在使用的時候還是有點問題,下文會提到。
spring:
kafka:
bootstrap-servers: 127.0.0.1:9092
producer:
value-serializer: org.apache.kafka.common.serialization.ByteArraySerializer
key-serializer: org.apache.kafka.common.serialization.StringSerializer
consumer:
value-serializer: org.apache.kafka.common.serialization.ByteArraySerializer
key-serializer: org.apache.kafka.common.serialization.StringSerializer
生產者代碼示例
@Slf4j
@Service
public class KafkaServiceImpl implements KafkaService {
private KafkaTemplate<String, byte[]> kafkaTemplate;
@Autowired
public void setKafkaTemplate(KafkaTemplate<String, byte[]> kafkaTemplate) {
this.kafkaTemplate = kafkaTemplate;
}
@Override
public void test() {
String topic = "test";
String key = "name";
byte[] data = "NO爺".getBytes();
ListenableFuture<SendResult<String, byte[]>> result = this.kafkaTemplate.send(topic, key, data);
}
}
消費者代碼示例
@Service
@Slf4j
public class KafkaSyncListener {
private final CountDownLatch latch = new CountDownLatch(1);
/**
* groupId是必須的,用於多個消費者讀取同一個主體時作區分。
* @param consumerRecord
* @throws Exception
*/
@KafkaListener(groupId = "aaaa", topics = "test")
public void listenUserNode(ConsumerRecord<byte[], byte[]> consumerRecord) throws Exception {
log.debug("consumerRecord:" + consumerRecord.toString());
String key = new String(consumerRecord.key());
String value = new StringconsumerRecord.value());
log.debug("key:" + key);
log.debug("value:" + value);
}
latch.countDown();
}
}
上文代碼可以看到key值和value值的類型都是byte[],上文配置文件沒起作用,不知道啥情況,後面再說吧,總之都用byte[]就不會報錯了。