Spring Cloud Kafka簡單學習

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[]就不會報錯了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章