【发布时间】:2018-12-15 21:18:35
【问题描述】:
我正在尝试启动一个小型微服务应用程序,但我有点卡在一些技术问题上。
我正在尝试构建一个问题跟踪器应用程序作为示例。
它有 2 个数据库表、问题和 cmets。为了示例,这些也将是单独的微服务。
它必须是一个单独的 API,可以被多种类型的客户端使用,例如移动、网络等。
当使用单一方法时,所有代码库都耦合在一起,并且当向 REST API 发出请求时,我会处理例如“/issues/19”请求 通过以下伪代码获取 id 为“19”的问题及其对应的 cmets。
on_request_issue(id) # handler for the route '/issues/<id>'
issue = IssuesModel.findById(id)
issue.comments = CommentsModel.findByIssueId(id)
return issue
但我不确定我应该如何使用微服务来解决这个问题。假设我们有 microservice-issues 和 microservice-cmets。
我可以让客户端同时向“/issues/19”和“/cmets/byissueid/19”发送请求。但在我看来,这并不好,因为如果我们有很多东西 我们正在为一页发送大量请求。
我也可以向 microservice-issues 发出请求,并且在那个请求中也向 microservice-cmets 发出请求,但这对我来说看起来比上面更糟糕,因为从什么 我读过微服务不应该耦合,这很难耦合它们。
然后我阅读了有关 API 网关的信息,它们可以/应该接收请求并散播到其他微服务,但后来我真的不知道如何使用 API 网关。应该 例如,我在其中编写代码来捕获“/issues/19”请求,然后将微服务问题和微服务评论都扇出,组装这些东西并返回它? 那样的话,我感觉我在做双重工作,那 API 网关不会变成一个新的单体吗?
感谢您的宝贵时间
【问题讨论】:
-
您应该查看 Kong konghq.com。 Kong 是一个开源 API 网关。 API 网关的重点是将 HTTP 请求简单地路由到正确的微服务。
-
好吧,但是我仍然需要向客户发送 2 个单独的问题和 cmets 请求,知道我应该如何解决这个问题吗?
-
从一个微服务向另一个微服务发送请求并不是一件坏事。有很多工具可以做到这一点(在 Java 中)。在我们的微服务系统中,我们有许多微服务通信。在某些情况下,一项服务需要使用另一项服务的日期执行某些逻辑。
标签: microservices