springcloud-ribbon、fein服务调用的对比使用以及重试机制的使用

这篇博客主要是在代码层面对比fein和ribbon的使用方式的不同,有一点需要强调的是fein的基础是ribbon,所以原理性的东西还是在ribbon的基础上进行学习,不过从使用方式看,fein的使用方式有点类似dubbo,下边从引入的jar等方式进行对比,首先jar
<!--ribbon-->
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-ribbon</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
    </dependencies>


	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Brixton.RELEASE</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
	
<!--fein-->
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>


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


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


	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Brixton.SR5</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
看配置文件
#ribbon
spring.application.name=ribbon-consumer
server.port=8099
#eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8095/eureka/,http://127.0.0.1:8096/eureka/,http://127.0.0.1:8097/eureka/
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8080/eureka/
#fein
spring.application.name=fein-consumer
server.port=8082
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8080/eureka/
再看主启动类:
//ribbon
@SpringBootApplication
@EnableDiscoveryClient
public class RibbonConsumerApplication {


	@Bean
	@LoadBalanced
	RestTemplate restTemplate() {
		return new RestTemplate();
	}


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


//fein
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class FeinConsumerApplication {


	public static void main(String[] args) {
		SpringApplication.run(FeinConsumerApplication.class, args);
	}
}
最后看调用方式
//ribbon
    @Autowired
    RestTemplate restTemplate;


    @RequestMapping(value = "/add", method = RequestMethod.GET)
    public String add() {
        return restTemplate.getForEntity("http://compute-service/add?a=10&b=20", String.class).getBody();
    }


//fein
@RestController
	//在controller中
    @Autowired
    private Service service;


    @RequestMapping(value = "/feinAdd", method = RequestMethod.GET)
    public String getResultFrom(){
        return "通过fein的方式调用返回的数据:"+service.getResultFromAdd(1,2);
    }
	//在接口中
@FeignClient("compute-service")
public interface Service {


    @RequestMapping(value = "/add" ,method = RequestMethod.GET)
    Integer getResultFromAdd(@RequestParam("a") Integer wea, @RequestParam("b") Integer web);


}
经过上边的对比应该可以得出相应的结论,另外再说一个比较方便的功能就是他们的重试机制,通过以下的配置文件就可以对重试次数时间等进行设置,应用的场景是两个以上提供服务的实例,其中一个服务挂掉的时候请求打到这个挂掉的机器上的时候需要的处理方式,如果不在请求端加下边的配置文件,当服务挂掉的时候就会相应的失败报出。
#是否开启重试,默认是关闭的
spring.cloud.loadbalancer.retry.enabled=true
#请求连接的超时时间
compute-service.ribbon.ConnectTimeout=250
#请求处理的超时时间
compute-service.ribbon.ReadTimeout= lOOO
#对所有操作请求都进行重试
compute-service.ribbon.OkToRetryOnAllOperations=true
#切换实例的重试次数
compute-service.ribbon.MaxAutoRetriesNextServer=2
#对当前实例的重试次数
compute-service.ribbon.MaxAutoRetries=2
除此之外在服务的调用端还需要添加以下jar包:
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.retry</groupId>
			<artifactId>spring-retry</artifactId>
		</dependency>

发布了223 篇原创文章 · 获赞 308 · 访问量 84万+

猜你喜欢

转载自blog.csdn.net/maoyeqiu/article/details/78795977