「这是我参与11月更文挑战的24天,活动详情查看:2021最后一次更文挑战」
- 这一片是最近在
docker
上安装kafka及zookeeper- 配合
spring
项目去使用的过程
- 配合
- 首先我们如果用到消息队列的时候,无非就是最火的几个
**mq
或者kafka
- 在
terminal
中使用如下命令
- 在
docker pull wurstmeister/zookeeper 拉取zookeeper
docker pull wurstmeister/kafka
- 我们项目中需要创建消费者和生产者 生产者
@Component
public class StudentProducer {
@Autowired
private KafkaTemplate kafkaTemplate;
/**
* 发送数据
* @param stuid
*/
public void sendLog(String stuid){
Student stu = new Student();
stu.setName("xiaoHong").setUserid(stuid).setState("111");
System.err.println("发送学生数据:"+stu);
kafkaTemplate.send("test", JSON.toJSONString(stu));
}
}
- 发送数据主要是
kafkaTemplate.send
消费者
@Component
@Slf4j
public class UserLogConsumer {
@KafkaListener(topics = {"test"},groupId = "testGroup")
public void consumer(ConsumerRecord<?,?> consumerRecord){
//判断是否为null
Optional<?> kafkaMessage = Optional.ofNullable(consumerRecord.value());
log.info("======== data =" + kafkaMessage);
if(kafkaMessage.isPresent()){
//获取Optional实例中的值
Object message = kafkaMessage.get();
System.err.println("data:"+message);
}
}
}
隐患
- 在
Mac
中遇到的最大的坑是
- 如果我们使用上面两个命令去启动
kafka/zookeeper
在本机是完全没有问题的- 而且在本机测试一下 如下图,消费者和生产者这个也是完全没有问题的
- 但是当我们启动程序的时候,会一直循环报警
# No route to host
- 顺藤摸瓜,我们可以发现,最开始启动两个镜像的时候,是配置的
host.docker.internal
- 所以是我们的程序去读取了我们的
macOS
系统与docker
建立连接
- 顺藤摸瓜,我们可以发现,最开始启动两个镜像的时候,是配置的
- 所以在这里处理的时候,我直接在启动两个镜像的时候传入的是自己的纯ip地址
- 在项目中配置文件也要最开始成本机的ip地址而不是
127.0.0.1