SpringCloud 学习笔记7--SpringCloud 声明式Feign客户端调用工具、服务雪崩效应

摘自:蚂蚁课堂学习视频:http://www.mayikt.com/course/video/2390

1、SpringCloud中支持两种客户端调用工具:

   RestTemplate基本上不用的,

  Feign客户端工具应用比较多,它是一个声明式的http客户端调用工具,采用接口 + 注解方式实现,易读性比较强。

  最大的优势:

2、代码实现(基于Eureka注册中心)

代码1:  pom.xml添加feign依赖,

<!-- feign客户端依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>


代码2:在消费者中建立feign接口

/**
 * Feign书写方式以springmvc接口形式书写,
 * FeignClient调用服务接口,name就是服务名称
 * @author gh
 * 
 */
@FeignClient(name="app-member")
public interface ApiFeign {
	
	@RequestMapping("/getMember")
	public String getMember();

	/**
	 * 实现原理:通过反射机制,获取接口上的服务名称,然后去注册中心获取对应的实际地址,
	 * 再获取接口的调用方法,通过@RequestMapping获取到具体的url地址,
     * 然后在底层转化为rpc远程调用。
	 */
}



代码3:建立消费者调用controller

@RestController
public class FeignController {
	@Autowired
	private ApiFeign apiFeign;
	
	@RequestMapping("/feignGetMember")
	public String feignGetMember(){
		return apiFeign.getMember();
	}

}


代码4:启动类中加入注解
   (注意:如果@EnableFeignClients注解不加basePackages时,可能会导致启动时找不到feign接口,加或不加根据自己的包的位置来定。)

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages={"com.gonghua"})
public class AppOrder {
	public static void main(String[] args) {
		SpringApplication.run(AppOrder.class, args);
	}
}

效果如下:

3、创建Feign客户端依赖聚合项目

(1)建立父项目时,maven的packaging需选择成war类型

(2)父项目中建立子项目,这时候选择maven module

    

4、服务雪崩效应

       默认情况下tomcat只有一个线程池去处理的客户端发送的所有服务请求,这样的话,在高并发情况下,如果客户端所有的请求堆积到同一个服务接口上,就会产生tomcat的所有的线程去处理该服务接口,可能会导致其他服务接口无法访问。就会导致其他服务接口访问的时候,产生延迟和等待。

5、Feign客户端超时时间配置

springcloud的feign客户端默认超时时间为1秒,为了解决这个问题,我们可以进行以下配置:

     application.properties里面配置:(springcloud feign客户端默认开启支持ribbon)

##设置feign客户端超时时间: 
##指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间
ribbon.ReadTimeout: 5000
##指的是建立连接后从服务器读取到可用资源所用的时间
ribbon.ConnectTimeout=5000
发布了27 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/gonghua0502/article/details/103270842
今日推荐