当前位置: 首页 > 知识库问答 >
问题:

如何使用Spring Cloud和Netflix OSS在微服务之间进行路由

祁建明
2023-03-14

在我们使用Spring Cloud开发微服务的过程中,我们开始使用Zuul作为从外部到微服务的任何连接的代理,以及任何需要联系另一个微服务的微服务的代理。

经过一段时间后,我们得出结论,Zuul被设计成一个边缘服务(仅代理外部到微服务的流量),不应该用于微服务间的通信。特别是Spring Cloud推荐使用eureka直接(潜在的负载平衡)连接到另一个服务的方式,使得我们反对在所有事情之间使用Zuul。

当然,一切都能按照预期正常工作(Spring Cloud总是这样),但我们对如何使用这个设置执行某个用例一无所知。

当部署一个新版本的微服务时,我们希望有一个新旧版本的蓝色/绿色部署。但是,由于微服务之间没有Zuul,两个独立服务之间的通信将继续使用旧版本,直到将其从Eureka中删除。

我们正在考虑如何才能做到这一点。在下面的图片中,我画出了我认为可能是一个选项。

在图片的第一部分,Zuul调用eureka以获得注册表来创建路由。此外,服务1正在调用eureka以使注册表路由到服务2。由于服务2在eureka注册表中,路由成功完成。

在图片的第二部分,部署了服务2(服务2.1)的更新。它也在eureka注册,这使得服务1现在同时路由到服务2和服务2.1。蓝色/绿色部署不需要这一点。

在第三部分中,以eureka的另一个实例展示了这个问题的潜在解决方案,该实例正是为了这个目的而部署的。这个实例不是对等体感知的,不会与第一个eureka实例同步。与第一次不同,这一次的唯一目的是为了方便蓝绿的部署。服务2.1向第二个eureka实例注册,服务1的配置被更改,不是从第一个eureka实例而是从第二个eureka实例获取注册表。

我们面对的主要问题是,这是否一个可行的解决办法。具有Zuul路由的灵活性是一个很大的优势,而我们在这种情况下没有这种优势。我们应该回到通过Zuul路由每个服务到服务调用,还是有其他解决方案(可能是某种类型的功能区配置)更合适?还是第二个eureka实例是这类部署的最佳解决方案?

问候你,安德烈亚斯

共有1个答案

萧允晨
2023-03-14

通过在元数据中设置版本号,您可以轻松地使Svc1获取Svc2的最新版本,即。总是获取具有最新版本号的实例。请将此要点作为指导。

 类似资料:
  • 本文向大家介绍详解SpringCloud微服务架构之Hystrix断路器,包括了详解SpringCloud微服务架构之Hystrix断路器的使用技巧和注意事项,需要的朋友参考一下 一:什么是Hystrix 在分布式环境中,许多服务依赖项中的一些将不可避免地失败。Hystrix是一个库,通过添加延迟容差和容错逻辑来帮助您控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点,停止其间的

  • 为了这个问题,我正在做一个项目,其中有两个微服务: null 根据我所读到的,为了进行这种更改,我们需要做以下几点: 从->切换 更改配置以启用分布式命令 使用SpringCloud或JCloud连接微服务 将AxonFramework添加到遗留InvoiceService项目并处理接收到的saga事件。 这是我们遇到麻烦的第四点:发票服务是由一个不愿意进行更改的单独团队维护的。 在这种情况下,使

  • 我有两个服务运行在谷歌计算引擎。这些服务是用GO编写的。每个服务都有单独的GCP服务帐户。在调用另一个服务时,我可以使用此服务帐户对一个服务进行身份验证吗?有没有适合它的API? 我不知道如何验证访问令牌的身份?正如其中一个答案所指出的,我无法向GCP IAM添加自定义权限(角色+资源)。 有大量关于验证Google云平台API调用的文档,但没有任何关于使用服务帐户来保护自己的endpoint的文

  • 我在这里尝试在两个微服务之间进行通信。我想从另一个微服务中读取写在一个微服务中的消息。我为此使用了RestTemplate。但当我尝试将其转换为字符串时,它不会出现。我正在获得这个‘方法交换(字符串,HttpMethod,HttpEntity<?>,Class,object...)RestTemplate不适用于参数(String,String,null,Class)“ 任何关于如何做到这一点的想

  • 我目前正在做一个Spring Boot微服务项目。我已经创建了服务,每个服务都是单独运行的。有了这个,我需要一些服务来与其他服务进行通信。我怎样才能做到这一点? 我看到了一些关于这一点的博客,它们使用Netflix、Eureka云服务器来实现这一点。有没有什么方法可以在本地环境中实现这一点,而不使用云服务器?

  • 我将使用Laravel框架构建micrservices。我有用户微服务,它处理客户端凭证并验证它们(为客户端创建JWT)。此外,还有另一种需要用户认证的微服务。 问题是,如果秘密访问令牌密钥仅在用户微服务中,我如何验证客户端在微服务(用户微服务除外)中的访问令牌?或者,我应该在每个微服务中保留密钥吗?