REST服务之间的REST通信 - 摘要远离REST调用中的主机或端口

时间:2017-11-24 13:36:01

标签: angular rest spring-boot microservices

我刚刚开始深入研究微服务主题,所以请原谅这是一个愚蠢的问题。

假设我有两个微服务,一个提供REST api,一个是角度微服务,用于一个不错的前端。预期角度微服务与其他微服务通信。 我看到很多实现这个的例子,它基本上没什么大不了的。我很清楚这一点。然而,在所有这些例子中,我在角度微服务中看到了类似的东西:

this.http.get('http://....:8080....');

起初我很高兴让它运行起来。但是,现在我想知道这些实现是否没有将服务紧密地耦合到彼此。在http URL中,我们看到主机和端口也在修复。在某些情况下,这可能效果很好,但是,如果我们的微服务,例如动态选择一个端口,我们已经有问题吧?然后我们不能以这种方式定义其他微服务中的端口。这同样适用于主机信息。如果微服务可能在不同的主机上运行,​​我们不能总是静态地定义主机。

如果我错了,请纠正我。有没有什么方法可以抽象出这些细节,即主机或端口,但还有另一种方法可以动态地找到它吗?或者,微服务之间的通信还有其他好的替代方案,并不意味着这个问题吗?

我看到了使用服务注册表的服务示例。通过这种方式,我们可以从中抽象出一点 - 不是吗?这是唯一的可能吗?我不确定这是否相关,但到目前为止,我正在使用Spring Boot来实现我的微服务。

2 个答案:

答案 0 :(得分:1)

我认为这里有一个混乱,微服务应该围绕业务能力建立,这意味着你的微服务将包括前端和后端。前端不应被视为微服务。

前端可以使用子域名http://api.example.com

访问后端

答案 1 :(得分:0)

除了Hossam发布的内容之外,我现在还在玩Consul。为此目的,我研究了以下Blog。使用Consul,我可以执行以下操作:restTemplate.getForObject('http://city-service/rest/city/capital', ...);而不是restTemplate.getForObject('http://localhost:8080/rest/city/capital', ...);。这也应该适用于其他服务注册表。我仍然不知道如何在例如Angular,但也许我会为此创建一个新问题。