Thi*_*ran 1 spring-boot microservices
我目前正在从事Spring Boot微服务项目。我已经创建了服务,并且每个服务都单独运行。这样,我需要一些服务来与其他服务进行通信。我该如何实现?
我看到一些有关此的博客,这些博客使用Netflix,Eureka云服务器来实现此目的。在不使用云服务器的情况下,有什么方法可以在本地环境中实现?
微服务之间有不同的通信方式。但是使用哪一个:取决于用例。
Api call:这是使用使实际的REST API调用其他服务RestTemplate,FeignClient等如。 Run Code Online (Sandbox Code Playgroud)ResponseType obj= new RestTemplate().getForObject(URL, ResponseType.class, params);
customer name其他详细信息orders。一旦客户更新了他们的名字,您也必须更新 Orders 数据库中的详细信息。如何做到这一点。通过API call?那么如果账户微服务也需要这个更新呢。所以 Rest api 将是一个开销。在这个用例中,我们可以使用MessageQueueslike RabbitMQ。客户微服务将创建一个客户更新事件,任何对此感兴趣的微服务都可以订阅。像RabbitMQ一样通过消息队列进行通信
小智 8
这取决于您的选择、您希望服务之间进行同步通信还是异步通信。对于同步服务,您可以使用以下第三方工具之一:
对于异步,您可以使用消息传递解决方案,例如:
当然可以。微服务只是REST服务。您需要了解REST服务的工作方式。之后,只需使用Spring-boot编写2个微服务(2个REST服务:生产者服务和消费者服务),让它们在不同的服务器端口下运行,从另一个服务器端口调用消费者服务即可,就是这样:您拥有了微服务。现在,这是编写微服务的原始方法。
为了使它们发展,您需要添加一些“魔术”(无火箭科学),例如,使用Ribbon在“生产者服务”的两个实例之间分配负载。
您可以使用带有注解@EnableEurekaServer的发现服务,它只是一个春季启动应用程序(您需要在pom中添加适当的依赖项)。现在,将(@EnableDiscoveryClient)注解添加到第一个(原始)微服务中,并添加到主类和在两者的application.properties(或application.yml)中指向您的eureka服务的defaultZone,启动您的eureka服务(发现服务)和2个微服务:这两个微服务将在发现服务上注册。当然,现在您无需在消费者服务中硬编码生产者服务的http地址。
看一下本教程
于格林威治标准时间2018年11月21日12:41编辑
假设您的第一个(简单)微服务(纯休息服务)在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);
Run Code Online (Sandbox Code Playgroud)
其中url:您的第一个(微型)(其余)服务的url。responseType:等待作为响应的对象的类/类型。uriVariables:是包含URI模板变量的映射。
正如 @g00glen00b 在评论中提到的,Eureka 不用于微服务之间的通信。它用于服务发现。据我所知,您可以通过两种方式与其他微服务进行通信:
RestTemplate 使用起来非常简单。它不需要配置。
例如
ResponseType obj= new RestTemplate().getForObject(URL, ResponseType.class, params);
Run Code Online (Sandbox Code Playgroud)
url - 网址
responseType - 返回值的类型
params- 扩展模板的变量
Spring Doc链接供您参考
| 归档时间: |
|
| 查看次数: |
12608 次 |
| 最近记录: |