介绍
我的意思是我有一篇博客文章,该文章是我一年前(2022年7月14日,是我的第一稿)。一天的第一点:跟随孩子。我之所以要尘土飞扬的原因可能是因为我在玩Zelda之类的东西。最近,我偶然发现了这些古老的文字,探索了卡夫卡的美好世界。在阅读了它的光荣文本后,我对这篇文章感到非常失望。我当时就像:“哦,男孩。现在我看着它,这有点丑陋”,尴尬的面孔对我写的东西感到厌恶。但是我仍将向世界分享。我正在为人们批评我的工作开设一个免费的欢迎场所。如果您一直在等待炸毁并告诉某人很烂,这是给您的朋友(或者这只是我是我最糟糕的评论家)。
但笑了,我认为这是一个很酷的机会,可以展示我一年前如何处理一个项目以及我现在采取的方法。因此,我将抛弃所有我认为足够好的旧东西,至少可以学到一些东西,然后我会回来一些更好的东西。对于上下文,我只是在我有一段时间之前使用Kafka构建一些微服务。但是,我认为如果您阅读任务并自己实施,那就更好了。然后,如果您愿意,请回来检查我如何比较项目的实现。这样,我们都可以学习更多。因此,如果您想跟随我,我将指定下面的作业供您浏览,然后我的实现。现在,请享受:路易斯·米兰达(Luis Miranda)和《迷失博客》的突袭者。
ps:这是针对所有在撰写此博客时给我回馈的同胞。我只想说,尽管我忽略了您的反馈,但我会记住续集ð。但是说真的,谢谢!
ð作业
大约两年前,在为客户工作时,有一个与卡夫卡有关的内部任务。当时,我和一些同事从事任务。现在回头看,我不太了解如何完成任务。它已经挑战学习kafka。但是最近看看,我决定再拍摄。
在分配作业之前,我会假设您知道春季,kafka(基本知识),docker和数据库。如果没有,请不要担心!我和你在同一条船上,我喜欢学习这些不同的技术。我将为您提供一些资源来审查和学习。
问题陈述
§§«设计并使用Spring Boot,Kafka,MySQL作为技术堆栈来设计并实施驱动程序微服务。该服务应该能够存储商店的GPS位置以及商店ID。该服务应该能够捕获驾驶员的lat/long。然后,对于给定的商店,该服务应能够返回以距离该商店距离排序的驾驶员列表,即,最接近商店的驾驶员应该是列表中的第一个条目。
这就是问题陈述的一般思想。现在让我们看一下应用程序应该执行的一些关键功能:
- 服务应该能够通过 kafka事件 当前(最新)位置。
{
"driverID": "m123@gmail.com",
"latitude": 27.876,
"longitude": -128.33
}
- 服务应能够通过 REST API 进行存储配置。
{
"storeID": "1234",
"latitude": 27.876,
"longitude": -128.33
}
-
该服务应暴露于Get API,以获取商店周围的n个驱动程序。存储ID和N应作为API的查询参数。
- 要计算商店和驾驶员最新位置之间的距离,请使用直线距离(乌鸦距离)。为简单起见,您可以使用坐标几何distance calculation formula。
-
该服务应公开邮政API以进行Kafka事件有效载荷并在Kafka中发布。
-
即使通过Kafka命令行发布消息,该服务也应该能够从主题中消耗KAFKA消息。
系统准则
作业还指定了一些准则要如下:
-
您可以自由选择将与DB,Kafka,API等相互作用的微服务及其组成模块的结构。
-
与本文档一起提供了一个Docker组合文件。该文件已经需要Kafka,Zookeeper和MySQL的容器。
- Zookeeper将在:localhost:2181上运行
- kafka将在:localhost:9092上运行
-
mysql将在:localhost:3306
上运行- 登录用户名= 用户
- 登录密码= user123
-
春季启动服务应在端口号9080上运行。
-
使用kafka主题名称â驱动器_location捕获当前位置。
-
您决定适当的类名称,模块,REST API端点,DB架构。
这是Docker组成的文件:
项目组件
有了上述所有信息,我们有足够的时间开始构建我们的项目。在我们继续进行作业之前,我将提出广泛的想法和我们将要处理的所有组件。
卡夫卡
kafka将在该项目中发挥重要作用,因此我们必须对其有很好的了解。首先,我们将创建一个生产商,该制作人将将事件(又称消息/记录)发送到群集。该集群将持有诸如日志之类的驱动程序信息。接下来,我们将创建一个消费者,该消费者将在任何实时事件中收听指定的群集。考虑到这一点,我们将创建两个服务:生产者和消费者。
春季引导
生产商和消费者将成为Maven的春季启动项目。在从事这项任务时,我想学习一种新语言,即Kotlin。从大学起,我就一直和爪哇一起写作,所以我对此感到有些无聊。我认为这是学习新知识的新机会。与Kafka有关的一切都将在Kotlin。该项目的其余部分将在Java中。
mysql
这将是我们的主要数据库。我们将主要将其用于存储信息。我们将使用春季数据JPA作为持续技术。
评估
即使我没有提交该项目,该任务也对如何评估这一点也有一些指控。我认为,请记住这一点是一个好主意,以创建我们可以的最佳产品。
-
您如何在时间/空间复杂性方面有效地解决给定问题。
-
REST API的延迟。
-
编码标准,JUNIT覆盖范围,休息合规性,多模块Maven项目的结构,数据库设计(用于比例)。
-
能够通过运行docker-compose noth而无需任何错误就可以在工作条件下启动服务。
结论
这个项目将分为部分,将有很多信息和代码要涵盖。另外,我将逐步更新我的GitHub,因此您可以在那里看到完整的项目,如果您也想继续工作,我将接受建议。