消息中间件kafka在spring工程中收发消息的使用
导入依赖(生产者和消费者都需要)
<!-- kafkfa -->
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
</dependency>
配置生产者模块,在application.yml中
spring:
application:
name: app-name
kafka:
#kafka服务的IP和端口要指定
bootstrap-servers: 192.168.200.130:9092
producer:
#重试次数
retries: 10
#配置键值的序列化方式均为string,指定序列化器
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
往Kafka中发送消息,注入@kafkatemplate注意配置序列化方式为string,使用send方法发送消息
//注入KafkaTemplate ,spring整合了Kafka,直接注入即可
@AutoWired
KafkaTemplate KafkaTemplate;
kafkaTemplate.send("string类型的主题名称","需要发送的内容,string类型");
配置消费者
消费者application.yml中编写配置
spring:
application:
name: app-name
kafka:
bootstrap-servers: 192.168.200.130:9092
consumer:
#kafka的组名
group-id: ${spring.application.name}-kafka-group
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
消费端写监听Kafka消息的类 @Component @KafkaListener两个重要注解
import java.util.Optional;
//加入到spring容器中
@Component
public class KafkaAutoListener {
//监听指定主题的方法,若监听到则执行
@KafkaListener(topics = "需要监听的主题名称")
//消息内容会封装到record的value中
public void recevieMessage(ConsumerRecord<?,?> record){
//jdk8中的判空方法
Optional<? extends ConsumerRecord<?, ?>> optional = Optional.ofNullable(record);
//判断是否有值
if(optional.isPresent()){
//消息中的值在value中存着
Object value = record.value();
//编写当监听到消息后需要执行的逻辑
}
}
}