Spring Cloud之—— OpenFeign(服务间调用)

简介

OpenFeign 声明性REST客户端:OpenFeign 创建用JAX-RS或Spring MVC注释修饰的接口的动态实现,OpenFeign 是Netflix的一个声明性HTTP客户端,它简化了我们与其他服务交互的方式。

OpenFeign 提供了两个重要标注@FeignClient@EnableFeignClients
@FeignClient 标注用于声明Feign客户端可访问的Web服务。
@EnableFeignClients 标注用于修饰Spring Boot应用的入口类,以通知Spring Boot启动应用时,扫描应用中声明的Feign 客户端可访问的Web服务。

OpenFeign 是通过Eureka调用的组件并做为EurekaClient端一起使用,所以提前启动Eureka 服务,请看上一篇博客

构建项目

  • 跟我们之前构建项目一样, 使用idea工具直接创建一个新的SpringBoot项目,在选择依赖的界面勾选Cloud Discovert -> OpenFeign依赖,创建完成后的pom.xml配置文件内容如下:
		
		<dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-openfeignartifactId>
        dependency>
	
		<dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
        dependency>
  • 在主启动类上添加OpenFeign的注解@EnableFeignClients,如下所示:
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class OpenFeignClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(OpenFeignClientApplication.class, args);
    }

}
  • 新建一个接口,通过FeignClient调用接口,FeignClient参数值为Eureka注册中心的Application Name@GetMapping是请求服务接口地址。代码和图如下:
@FeignClient("city-eureka")
public interface CityClient {

	//这里调用无参方法,如果是有参数把提供者暴露接口方法复制过来,把mapping换成完整路径
    @GetMapping("/cities")
    String listCity();

	@GetMapping("/weather/cityId/{cityId}")
    WeatherResponse getDataByCityId(@PathVariable("cityId") String cityId);
}

Spring Cloud之—— OpenFeign(服务间调用)_第1张图片

spring.application.name=feign-client

#客户端注册进eureka
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
#自定义服务名称信息
eureka.instance.instance-id=feign-client
#访问路径可以显示IP
eureka.instance.prefer-ip-address=true

#建立连接超时时间
feign.client.config.feignName.connect-timeout=5000
#读取资源超时时间
feign.client.config.feignName.read-timeout=5000

运行测试

新建一个Controller代码如下:

@RestController
public class CityController {

    @Autowired
    private CityClient cityClient;

    @GetMapping("/cities")
    public String listCity(){
        String body = cityClient.listCity();
        return body;
    }
}

在浏览器访问:localhost:8080/cities 得到数据就是Feign调用接口返回数据

你可能感兴趣的:(架构)