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

Spring Boot-微服务之间如何通信?

单于煌
2023-03-14

我目前正在做一个Spring Boot微服务项目。我已经创建了服务,每个服务都是单独运行的。有了这个,我需要一些服务来与其他服务进行通信。我怎样才能做到这一点?

我看到了一些关于这一点的博客,它们使用Netflix、Eureka云服务器来实现这一点。有没有什么方法可以在本地环境中实现这一点,而不使用云服务器?

共有1个答案

王英彦
2023-03-14

你当然可以。微服务只是REST服务。您需要了解REST服务是如何工作的。之后,只需用Spring-boot编写2个微服务(2个REST服务:生产者服务和消费者服务),让它们在不同的服务器端口下运行,从另一个端口调用消费者服务,就这样:你有了你的微服务。现在这是编写微服务的原始方式。

为了使它们进化,您需要添加一些“魔法”(不是火箭科学),例如使用Ribbon在您的“生产者服务”的两个实例之间分配负载。

您可以使用一个发现服务,它只是一个带有注释@enableEureKaserver的spring-boot应用程序(您需要在pom中添加适当的依赖项)。现在将注释@enableDiscoveryClient添加到您的第一个(原语)微服务中的主类中,并在application.properties(或application.yml)中使用指向您的eureka-service的defaultZone,启动您的eureka-service(发现服务)和这两个微服务中的2个微服务:它们将在discovery-service上注册。当然,现在您不需要在消费者服务中硬编码生产者服务的http地址。
看一下本教程

编辑于2018年11月21日格林尼治时间12:41

假设您的第一个(微不足道的)微服务(一个纯粹的REST服务)在您的PC端口8091下运行。

在第二个(平凡的)微服务的控制器中,使用restTemplate.getForEntity(url、responseType、uriVariables)调用第一个服务,如链接教程中的示例所示:

ResponseEntity<CurrencyConversionBean> responseEntity = 
   new RestTemplate().getForEntity(
        "http://localhost:8091/currency-exchange/from/{from}/to/{to}", CurrencyConversionBean.class,  uriVariables);

其中url:您的第一个(微)(rest)服务的url。ResponseType:作为响应等待的对象的类/类型。UriVariables:是一个包含URI模板变量的映射。

 类似资料:
  • 本文向大家介绍微服务之间如何独立通讯的?相关面试题,主要包含被问及微服务之间如何独立通讯的?时的应答技巧和注意事项,需要的朋友参考一下 同步通信:dobbo通过 RPC 远程过程调用、springcloud通过 REST 接口json调用 等。

  • 我正在构建一个基于Spring云的微服务ML管道。我有一个数据摄取服务,它(当前)从SQL接收数据,这些数据需要被预测服务使用。 普遍的共识是写入应该使用kafka/Rabbitmq使用基于异步消息的通信。 我不确定的是如何编排这些服务? 我是否应该使用API网关来调用启动管道的摄取?

  • 我正在设置一个带有API网关(KONG)和微服务(Spring Boot应用程序)的环境,但我对它们之间的SSL通信有很多疑问/担忧。 我应该将SSL设置放在API网关还是微服务上? 目前,我的微服务应用程序有自己的SSL证书,它通过8443端口在容器中运行。 但是现在实现API网关,我不确定是否必须将其从我的微服务中删除并在API网关中设置,或者将其添加到两者中。 我希望我的微服务和API网关之

  • “在微服务之间添加的同步依赖关系越多,例如查询请求,客户端应用程序的总体响应时间就越差。 “这是真的吗?我认为在同步通信中,我们比异步通信更直接地得到反馈。例如,假设一个用户向微服务a发送http请求,微服务a又异步地向另一个微服务B发送请求,并异步地等待它的答复。如果微服务B关闭,那么用户将等待到超时才能得到响应,而在同步通信中,他将立即得到响应。

  • 我正在从事 服务项目,主要从服务间通信之间的安全角度提出疑问。在我的项目中,我们有 API 网关,它可以筛选所有传入请求是否存在安全问题,然后再将它们路由到适当的微服务。API 网关位于客户端应用程序和微服务之间。然后,它会限制微服务的公开,同时提供其他请求管理功能,例如身份验证、SSL 终止、协议转换、监视、请求路由、缓存等。 假设案例微服务1(MS1) 部门答案预计在这里。