SpringCloud搭建记录(三)Feign服务调用与负载均衡

前两篇记录了服务注册与发现的过程,本篇通过Feign进行服务之间的调用与负载均衡。

通常来说,springcloud的五大常用组件里,第一个是eureka,第二个是ribbon.后者是进行负载均衡的,但相对来说,ribbon的服务调用方式,使用起来还是有些繁琐,比如需要使用template,自己构建http请求等等。所以,为了方便我们直接采用feign来进行服务调用。

可以简单的理解为,feign是在ribbon的基础上进一步进行了封装,使用起来更加的方便了。

一、添加引用

在前面构造的服务模块中,添加feign的依赖。同样,为了依赖版本的管理方便,我们把feign的版本号放入父pom中的dependencyManagement:

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
                <version>2.2.2.RELEASE</version>
            </dependency>

然后在子模块中添加:

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

二、添加服务接口,通过注解来管理服务

前面的例子中,我们的服务d ,存在一个rest接口 http://localhost:8777/d/hello.因此,c模块要调用此接口,则新建一个接口:

package com.boc.hn.facade;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

@FeignClient("SERVICE-OBJECT-D")
public interface ServiceDdFacade {

    @RequestMapping("/d/hello")
    String dHello();

}

通过注解@FeignClient,指明是哪个模块的代理,然后通过@RequestMapping指明其对应的rest端口。

调用时,通过自动注入,我们可以直接调用c模块的功能:

package com.boc.hn.controller;

import com.boc.hn.facade.ServiceDdFacade;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ServiceCcController {

    @Autowired
    ServiceDdFacade serviceDdFacade;
    @RequestMapping("/c/hello")
    public String CtoHello(){
        return "Cc to hello";
    }

    @RequestMapping("/c/callD")
    public String callD(){
        String start = "start time:"+System.currentTimeMillis();
        String result = serviceDdFacade.dHello();
        String end = "end time :"+System.currentTimeMillis();
        return start +"; result:"+result+"; " +end;
    }
}

 在设置完毕后,重启C服务,然后访问:http://localhost:8666/c/callD,如果能够正常返回结果,则说明配置正确。

这里可以设置调用的超时时间,通过在c模块的application.yml增加设置:

ribbon:
  ReadTimeout: 3000
  ConnectTimeout: 3000

重启服务之后,便能够生效。在调用处理时间比较长的服务时,需要设置合理的超时时间。

posted @ 2020-06-01 15:48  sliec  阅读(636)  评论(0编辑  收藏  举报