美文网首页Spring Coud
SpringCloud微服务服务间调用之OpenFeign介绍(

SpringCloud微服务服务间调用之OpenFeign介绍(

作者: 不1见2不3散4 | 来源:发表于2018-12-08 21:15 被阅读0次

    开发微服务,免不了需要服务间调用。Spring Cloud框架提供了RestTemplate和FeignClient两个方式完成服务间调用,本文简要介绍如何使用OpenFeign完成服务间调用

    背景介绍

    本示例使用consul作为服务注册中心,基于SpringCloud框架开发两个微服务,一个user-service(服务提供方),一个feignusercommodity-service(服务调用方),具体版本信息如下

    软件/框架 版本
    consul v1.2.0
    Spring Boot 2.0.1.RELEASE
    Spring Cloud Finchley.RELEASE

    openFeign使用默认版本的,也就是spring-cloud-starter-openfeign 2.0.0版本。

    完整代码这这里, user-servciefeignusercommodity-service, 欢迎加星,fork。

    官方文档在这里http://cloud.spring.io/spring-cloud-openfeign/single/spring-cloud-openfeign.html

    主要代码

    核心代码主要包括两点,
    1, 对应接口添加@FeignClient,并完成对应服务提供者的requestMapping映射。
    2,在启动类加上@EnableFeignClients(basePackages = {"com.yq.client"}), 我的serviceClieng位于com.yq.client包。

    提供方的主要接口如下:


    userSvc001.png

    ServiceClient类的主要实现如下.
    注意:User 类在两个服务中是一样,实际项目中我们可以把它放到公共依赖包中。

    @FeignClient(value = "user-service", fallbackFactory = UserServiceFallbackFactory.class)
    public interface UserServiceClient {
        
        @RequestMapping(value="/v1/users/{userId}", method= RequestMethod.GET, produces = "application/json;charset=UTF-8")
        public User getUser(@PathVariable(value = "userId") String userId);
    
        @RequestMapping(value="/v1/users/queryById", method= RequestMethod.GET, produces = "application/json;charset=UTF-8")
        public User getUserByQueryParam(@RequestParam("userId") String userId);
    
        @RequestMapping(value="/v1/users", method= RequestMethod.POST, produces = "application/json;charset=UTF-8")
        public String createUser();
    }
    
    

    完整代码看 user-servciefeignusercommodity-service,里面的pom文件,serviceClient都是完整的可以运行的。 欢迎加星,fork。

    效果截图

    第一张截图,两个服务都正常在consul上注册,完成服务间调用


    consul001OK_FeignCall.png

    第二张截图,两个服务都正常在consul上注册,完成服务间调用, 这是consul down了,服务间调用可以继续,因为feignusercommodity-service服务缓存了user-service服务的服务提供地址信息


    consul002_shutdownConsul_CallOK.png

    第三张截图,feignusercommodity-service服务正常在consul上注册,但是user-service没有注册,系统给出了“com.netflix.client.ClientException: Load balancer does not have available server for client: user-service”


    consul003_userSvcOff.png

    第四张截图,user-service提供方的对应方法报异常,服务调用能正常获取到该异常并显示。


    consul004_svcCallOriginalSvcException.png

    相关文章

      网友评论

        本文标题:SpringCloud微服务服务间调用之OpenFeign介绍(

        本文链接:https://www.haomeiwen.com/subject/krjchqtx.html