博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Feign实现服务调用
阅读量:6983 次
发布时间:2019-06-27

本文共 2413 字,大约阅读时间需要 8 分钟。

 上一篇博客我们使用ribbon+restTemplate实现负载均衡调用服务,接下来我们使用feign实现服务的调用,首先feign和ribbon的区别是什么呢?

  ribbon根据特定算法,从服务列表中选取一个要访问的服务;

  1. RoundRobinRule:轮询
  2. RandomRule:随机
  3. AvailabilityFilteringRule: 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,以及并发的连接数量,超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问;
  4. WeightedResponseTimeRule: 根据平均响应时间计算所有服务的权重,响应时间越快,服务权重越大,被选中的机率越高,刚启动时,如果统计信息不足,则使用RoundRobinRule策略,等统计信息足够时,会切换到WeightedResponseTimeRule
  5. RetryRule: 先按照RoundRobinRule的策略获取服务,如果获取服务失败,则在指定时间内会进行重试,获取可用的服务;
  6. BestAvailableRule: 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务;
  7. ZoneAvoidanceRule: 默认规则,复合判断server所在区域的性能和server的可用性选择服务器;

     Spring Cloud Netflix 的微服务都是以 HTTP 接口的形式暴露的,所以可以用 Apache 的 HttpClient 或 Spring 的 RestTemplate 去调用, Feign 是一个使用起来更加方便的 HTTP 客戶端,使用起来就像是调用自身工程的方法,而感觉不到是调用远程方法。接下来我们简单使用一下Feign:

前提:有两个服务,一个movie,一个user,user运行在多个端口(模拟多台机器部署服务)。

 首先引入Feign依赖

  

org.springframework.cloud
spring-cloud-starter-feign

第二步:在movie服务中写一个接口UserInterface.java,调用user服务,接口代码如下:

package com.xing.movie.FeignInteface;import org.springframework.cloud.netflix.feign.FeignClient;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import com.xing.movie.entity.User;@FeignClient("xing-user")//服务名public interface UserInterface {    @RequestMapping(value ="/user/findByNameEn/{nameEn}" ,method =RequestMethod.GET )//必须使用RequestMapper,使用GetMapping启动报错    public User findByNameEn(@PathVariable("nameEn") String nameEn);//@PathVariable后面需要指定nameEn,不然可能报错    }

第三步:在启动类中添加注解@EnableFeignClients(basePackages = {"com.xing.movie"})指定上面接口所在的类,可以只到父包

第四步:在MovieController中调用上面写的接口

@Autowiredprivate UserInterface userInterface; @ApiOperation(value = "查询用户", notes = "查询用户By英文名")//方法说明@ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Movie.class)})//响应数据说明,可以有多个@ApiImplicitParam(name = "nameEn", value = "用户英文名", paramType = "path", required = true, dataType = "String")@GetMapping(value = "/findUserByNameEn/{nameEn}",produces = { "application/json;charset=UTF-8" })public User findUserByNameEn(@PathVariable String nameEn) {    User user = userInterface.findByNameEn(nameEn);    System.out.println("findUserByNameEn----"+user);    return user; }

之后直接访问测试,ok!

 源码地址:https://github.com/OnlyXingxing/SpringCloud

  

 

转载于:https://www.cnblogs.com/xing-12/p/9910282.html

你可能感兴趣的文章
Linux下安装oracle数据库步骤
查看>>
yum 不小心删除后安装
查看>>
vim 使用
查看>>
为敏感信息设置安全屏障
查看>>
进程与线程
查看>>
经典SQL
查看>>
维基百科:主流移动设备的屏幕参数
查看>>
使用CGContext画线操作小记
查看>>
mysql fabric安装使用测试
查看>>
java 对 mongoDB 分组统计操作 以及一些常用操作
查看>>
当你扛不住的时候就读读
查看>>
解决安装rrdtool遇到的一个问题
查看>>
linux启动过程
查看>>
QString与LPCWSTR互转
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
xmlUtil 解析 创建
查看>>
我的友情链接
查看>>
linux 命令(3)echo
查看>>
Nginx基础入门之nginx基础配置项介绍(2)
查看>>