7.微服务的消费

原创 2018年04月17日 07:38:43

1.服务的消费

  1. 微服务的消费模式,经常httpClient,(被广大社区支持):
    (1) 服务直连模式,如restTemplate.getForEntity(uri,String.class),获取资源
    (1) 特点:简洁明了,平台无关性,无法保证服务的可用性,生产模式很少用
    (2) 客户端发现模式,服务实例启动后,将自己的位置信息提交到服务注册表;客户端从服务注册表查询,来获取服务实例;客户端自行使用负载均衡算法从多个服务实例中选择一个 。(负载局衡器在客户端)
    (3) 服务端发现模式,负载均衡器在服务端,(负载局衡器在服务端,独立部署)
  2. 常见微服务的消费者
  3. 使用Feign实现服务的消费者
  4. 实现服务的负载均衡及高可用

2.常见微服务的消费者

  • httpClient、Ribbon、Feign
    1. Apache HttpClient,添加依赖org.apache.httpcomponents:httpclient,
    2. 然后配置中注入
@Configuration
public class RestConfiguration {

    @Autowired
    private RestTemplateBuilder builder;

    @Bean
    public RestTemplate restTemplate() {
        return builder.build();
    }

}
  1. 然后使用,传入uri,类型
public class WeatherDataServiceImpl implements WeatherDataService {

    @Autowired
    private RestTemplate restTemplate;

    private WeatherResponse doGetWeahter(String uri) {
            ResponseEntity<String> respString = restTemplate.getForEntity(uri, String.class);

3. Ribbon,客户端模式负载均衡

  • Ribbon提供服务发现客户端,提供很多算法,随机负载均衡,区域感知
    1. 添加依赖:spring-cloud-starter-netflix-ribbon
    2. 注入,加一个注解声明RibbonClient
@Configuration
@RibbonClient(name = "ribbon-client",configuration = RibbonConfiguration.class)
public class RestConfiguration {

    @Autowired
    private RestTemplateBuilder builder;

    @Bean
    public RestTemplate restTemplate() {
        return builder.build();
    }

}
  1. 配置,怎么过滤等等,RibbonConfiguration,算法
  2. 使用,一样的uri+类型,这里可以是应用名称
@Controller
public class CityController{
   @AutoWired
   private RestTemplate restTemplate

   GetMapping("/cities")
   public String listCity(){
     //通过应用名称查找
     String body = restTemplate.getForEntity("http://msa-weather-city-eureka/cities",String.class);
     return body;   
   }

}
  1. 应用配置
spring.application.name=msa-weather-data-eureka-clirnt-ribbon
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

4.Feign,实现服务的消费者,获取城市

  1. copy新建micro-weather-eureka-client-feign,导入依赖spring-cloud-starter-openfeign
  2. 启用@EnableFeignClients
  3. 新建Service和Controller,对应访问,msa-weather-city-eureka
  4. 启动了城市jar和feign之后,访问:http://localhost:8080/cities,可以获取城市列表

5.天气数据采用微服务使用feign

  • 回顾3个todo:(1)数据采集同步,依赖城市API,(2)天气预报,依赖数据API,(3)天气预报提供的城市列表,依赖城市数据API
  • msa-weather-collection-eureka-feign
    1. 添加依赖
    2. Application添加注解@EnableFeignClients
    3. 查看job,有个//todo 改为由城市数据api服务来提供数据,所有需要Feign的客户端
@FeignClient("msa-weather-city-eureka")
public interface CityClient {

    @GetMapping("/cities")
    List<City> listCity() throws Exception;
}
  1. 修改调用方式,就是注入CityClient使用

6.微服务天气预报

  1. msa-weather-report-eureka-feign

7.实现服务的负载均衡及高可用

  1. 依次运行实例,但是天气定时任务依靠城市列表,可能获取不到(半个小时一次的),所以collection可能要后启动一次

SpringCloud微服务系列(4): 服务发现与消费及客户端负载均衡Ribbon

SpringCloud微服务系列(4): 服务发现与消费及客户端负载均衡Ribbon 作者:家辉,日期:2017-08-07 CSDN博客: http://blog.csdn.net/gobitan...
  • gobitan
  • gobitan
  • 2017-08-07 20:29:28
  • 1882

使用SpringCloud搭建微服务<二>---------创建微服务的消费者

上一节,我们创建了服务的提供者,也就是用户微服务,用户问服务提供了一个接口,根据ID获取用户的余额和其他信息。今天我们来创建微服务的消费者。 一、使用Spring Initializr 来快速创建Sp...
  • u010331823
  • u010331823
  • 2017-10-25 08:44:22
  • 288

Spring Cloud构建微服务架构服务消费Feign

Spring Cloud Feign Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端。它使得编写Web服务客户端变得更加简单。我们只需要通过创建接...
  • qq_40342510
  • qq_40342510
  • 2017-12-11 09:11:06
  • 183

springcloud微服务三:Eureka服务治理之注册服务提供者及服务的发现和消费

当服务注册中心成功建立以后,就需要有服务的注册和消费,否则这个服务注册中心就没有了存在的意义,而实际上,一个简单的服务注册也是非常简单的,仅仅需要实现四部曲就好。首先,还是建立一个基本的spring ...
  • tuzongxun
  • tuzongxun
  • 2017-05-24 08:58:50
  • 3430

Spring Cloud架构教程 (八)消息驱动的微服务(消费组)【Dalston版】

使用消费组实现消息消费的负载均衡 通常在生产环境,我们的每个服务都不会以单节点的方式运行在生产环境,当同一个服务启动多个实例的时候,这些实例都会绑定到同一个消息通道的目标主题(Topic)上。 ...
  • AD11135
  • AD11135
  • 2018-01-30 09:35:35
  • 117

SpringBoot通过restTemplate实现消费服务

一、application.java配置bean //通过RestTemplate来实现消费服务 @Bean public RestTemplate restTemplate(RestT...
  • lla520
  • lla520
  • 2017-08-29 15:57:31
  • 212

CAP,微服务的数据一致性

前言 微服务是当下的热门话题,今天来聊下微服务中的一个敏感话题:如何保证微服务的数据一致性。谈到分布式事务,就避免不了CAP理论。 CAP理论是指对于一个分布式计算系统来说,不可能同时满...
  • hjm824
  • hjm824
  • 2016-10-10 13:22:47
  • 840

Spring Cloud构建微服务架构(二)服务消费者

Spring Cloud构建微服务架构(二)服务消费者
  • pdw2009
  • pdw2009
  • 2016-10-11 12:04:45
  • 1338

使用消息队列来解决微服务数据一致性问题

前言 随着微服务的越来越多,一致性问题也越来越被重视。纠结是怎样才能ACID呢?CAP还是Base呢? 其实强一致性的方案也特别多,比如net的msdtc、java的atomikos...等。但他们这...
  • itsoftchenfei
  • itsoftchenfei
  • 2017-08-25 14:45:16
  • 1057

spring cloud eureka微服务之——服务注册发现、服务消费者,服务提供者简单实例

  • 2017年11月29日 14:49
  • 33KB
  • 下载
收藏助手
不良信息举报
您举报文章:7.微服务的消费
举报原因:
原因补充:

(最多只允许输入30个字)