1 引入依赖: pom.xml
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka-test</artifactId>
<scope>test</scope>
</dependency>
2 配置kafka:application.yml
spring:
kafka:
bootstrap-servers: dev.kafka.xxx.com:9092
producer:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
topic:
elsa_test_topic: elsa_test
consumer:
group-id: eds-87651
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
properties:
spring.json.trusted.packages: "*"
listener:
concurrency: 1
3 生产消息
3.1 编写消息生成类:KafkaProducerController
package com.chongdian.api.controller;
import com.chongdian.api.core.http.ResultResponse;
import com.chongdian.api.producer.KafkaSender;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@RequestMapping("/kafka")
@RestController
public class KafkaProducerController {
@Autowired
private KafkaSender kafkaSender;
@PostMapping("topic/{topic}/product")
public ResultResponse sendProduct(@PathVariable String topic, @RequestBody @Valid String message) {
return ResultResponse.ok(kafkaSender.send(topic, message));
}
}
3.2 编写消息生产方法 KafkaSender
package com.chongdian.api.producer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.kafka.support.KafkaHeaders;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Service;
import java.util.UUID;
@Service
@Slf4j
public class KafkaSender {
/**
* kafka推送消息
*/
@Autowired
private KafkaTemplate<String, String> kafkaSendMsg;
public Boolean send(String topic, String messages) {
//插入日志表
String key = UUID.randomUUID().toString();
MessageBuilder<String> stringMessageBuilder = MessageBuilder.withPayload (messages);
stringMessageBuilder.setHeader (KafkaHeaders.TOPIC, topic);
stringMessageBuilder.setHeader (KafkaHeaders.MESSAGE_KEY, key);
Message<String> message = stringMessageBuilder.build ();
kafkaSendMsg.send(message);
return true;
}
}
4 编写消息消费类
写法1:TestListener
package com.chongdian.api.listener.kafka;
import lombok.extern.slf4j.Slf4j;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.support.KafkaHeaders;
import org.springframework.messaging.handler.annotation.Header;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class TestListener {
@KafkaListener(topics = {"elsa_test"})
public void orderRefund(@Payload String message,
@Header(KafkaHeaders.RECEIVED_PARTITION_ID) Integer partitionId,
@Header(KafkaHeaders.OFFSET) Long offset) {
System.out.print (message);
System.out.print (partitionId);
System.out.print (offset);
}
}
结果
写法2:Consumer
package com.chongdian.api.listener.kafka;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;
@Component
public class Consumer {
@KafkaListener(topics = {"elsa_test2"})
public void listen(ConsumerRecord<?, ?> record) {
System.out.printf("topic = %s, offest = %d, value = %s\n",record.topic(),record.offset(),record.value());
//todo
}
}
结果
引用:https://blog.csdn.net/kye055947/ar ticle/details/83692450?utm_source=app