项目中系统通知需要进行实时通知,选用Kafka,入门很简单,这里记录下来,方便查看。
1.什么是Kafka
Kafka是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的特性就是高吞吐量、消息持久化、高可靠性、高扩展性,可以实时的处理大量数据以满足各种需求场景;主要应用于消息系统、日志收集、用户行为追踪、流式处理等。
2.Kafka的下载与启动
下载:
可以去官网(http://kafka.apache.org/downloads)选择版本下载,为方便,博主这里提供已下载好的(方便演示以Windows方式启动,文件包含启动命令),点我。
启动:
(Windows)进入Kafka的bin目录,由于Kafka是依赖zookeeper进行启动的,
输入命令启动zookeeper:bin\windows\zookeeper-server-start.bat config\zookeeper.properties,窗口不要关闭,
新打开窗口启动Kafka:bin\windows\kafka-server-start.bat config\server.properties
3.整合使用
引入Kafka依赖:
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
配置application.properties:
spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.consumer.group-id=test-consumer-group
spring.kafka.consumer.enable-auto-commit=true
spring.kafka.consumer.auto-commit-interval=3000
编写测试类:
@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = CommunityApplication.class)
public class KafkaTests {
@Autowired
private KafkaProducer kafkaProducer;
@Test
public void testKafka() {
kafkaProducer.sendMessage("test", "你好");
kafkaProducer.sendMessage("test", "在吗");
try {
Thread.sleep(1000 * 10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//生产者
@Component
class KafkaProducer {
@Autowired
private KafkaTemplate kafkaTemplate;
public void sendMessage(String topic, String content) {
kafkaTemplate.send(topic, content);
}
}
//消费者
@Component
class KafkaConsumer {
//接收主题为test的消息
@KafkaListener(topics = {"test"})
public void handleMessage(ConsumerRecord record) {
System.out.println("接收并消费消息:"+record.value());
}
}