7.微服务的消费

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可能要后启动一次
阅读更多
上一篇6.服务注册与发现
下一篇8.API网关的意义
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭