美文网首页
spring cloud 之客户端调用使用(feign)

spring cloud 之客户端调用使用(feign)

作者: 心灵的震撼 | 来源:发表于2018-11-06 10:42 被阅读0次

    spring cloud 进行服务调用的时候,客户端有2种方式,第一种方式是通过rest方式,第二种方式是通过feign方式。而第一种方式在
    【《spring cloud 之客户端调用使用(restTemplate)和负载均衡》https://www.jianshu.com/p/baa5bacae3f6】文章中介绍了通过rest方式进行调用。今天我们通过fegin方式作为客户端来进行调用。整个项目的演示还是基于上篇文章的订单服务和会员服务之中展开。

    1.POM.xml进行配置

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka-server</artifactId>
                <version>1.4.5.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-feign</artifactId>
                <version>1.4.5.RELEASE</version>
      </dependency>
    

    这块需要注意的是spring-cloud-starter-feign这个包的版本需要和spring-cloud-starter-eureka-server这个包的版本得一致,否则启动的时候会出现错误。

    2.会员服务不需要改动,需要变动订单服务,更改订单服务的通讯方式,更改为fegin方式,配置文件还是一样,application.yml

    server:
      port: 8087
    spring:
      application:
        name: service-order
    eureka:
      instance:
        prefer-ip-address: true
      client:
        register-with-eureka: true
        healthcheck:
          enabled: true
        serviceUrl:
          defaultZone: http://zzh:password123@127.0.0.1:8086/eureka/
    

    3.新增MemberService接口用来调用会员服务的接口

    @FeignClient(name = "service-member")
    public interface MemberService {
    
        @RequestMapping("/member/getAllMemberInfo")
        String getAllMemberInfo();
    }
    

    @FeignClient(name = "service-member") 该注解中的name指向的是会员服务中的设置的

    spring:
      application:
        name: service-member
    

    这个参数。

    4.修改controller中的调用方式

    @RestController
    @RequestMapping("/order")
    public class OrderController {
    
    //    @Autowired
    //    private RestTemplate restTemplate;
    
        @Autowired
        private MemberService memberService;
    
        @RequestMapping("/getAllOrderInfo")
        @ResponseBody
        public String getAllOrderInfo(){
    //        String result = restTemplate.getForObject("http://service-member/member/getAllMemberInfo", String.class);
            String result=memberService.getAllMemberInfo();
            return result;
        }
    }
    

    5.修改服务启动类

    @SpringBootApplication
    //开启服务发现功能
    @EnableDiscoveryClient
    //开启Feign功能
    @EnableFeignClients(basePackages = "com.itshirui")
    @EnableEurekaClient
    @ComponentScan(basePackages = "com.itshirui")
    //@RibbonClient(name = "ribbonclient",configuration = RibbonConfig.class)
    public class ServiceOrderApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ServiceOrderApplication.class, args);
        }
    }
    

    @EnableFeignClients(basePackages = "com.itshirui") 这个注解中必须加上basePackages指定对应的service的包路径,否则服务启动的时候会出现找不到对应的service。

    6.服务启动,看效果,会出现如下效果图

    image.png
    image.png
    通过订单服务调用会员服务成功,并且也实现了负载均衡的效果,如果想更改负载均衡的策略,可以参考《spring cloud 之负责均衡第二篇》https://www.jianshu.com/p/12f15e8270e5,这篇文章,讲的比较详细。
    通过fegin调用就到这里了。

    相关文章

      网友评论

          本文标题:spring cloud 之客户端调用使用(feign)

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