Ribbon
设置集群 在 7001注册中心
defaultZone: http://localhost:7002/eureka/,http://localhost:7003/eureka/
7002 则写 7001 7003 三个链接起来
@LoadBalanced // 加上整这个注解就实现了 Ribbon 负载均衡
在客户端 08 配置
#Eureka 配置
eureka:
client:
register-with-eureka: false #不像Eureka注册自己
service-url:
defaultZone: http://localhost:7001/eureka/,http://localhost:7002/eureka/,http://localhost:7003/eureka/
fetch-registry: true
客户端控制层
不用远程直接调用的方法 使用提供者的 Application
private static final String REST_URL_PREFIX = “http://SPRINGCLOUD-PROVIDER-DEPT”; //Application
//Rinbbon 的依赖
<!-- Rinbbon -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
消费者配置文件中写入注册中心
创建ConfigGean写上负载均衡方法
@Bean
@LoadBalanced // 加上整这个注解就实现了 Ribbon 负载均衡
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
写一个方法来实现负载均衡 需要用到@Configuration注解
@Configuration
public class KariRule {
@Bean
public IRule myirule() {//这个方法里面写负载均衡的算法
return new KariRandomRule();
}
}
Rinbbon默认算法是轮询
调用微服务有两中方法:通过名字和通过接口+注解(Feign)
feign接口默认集成Rinbbon
Feign是声明式Web Service客户端,它让微服务之间的调用变得更简单,类似controller调用service。SpringCloud集成了Ribbon和Eureka,可以使用Feigin提供负载均衡的http客户端
只需要创建一个接口,然后添加注解即可~
Feign
主要是社区版,大家都习惯面向接口编程。这个是很多开发人员的规范。调用微服务访问两种方法
微服务名字 【ribbon】
接口和注解 【feign】
Feign能干什么?
Feign旨在使编写Java Http客户端变得更容易
前面在使用Ribbon + RestTemplate时,利用RestTemplate对Http请求的封装处理,形成了一套模板化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一个客户端类来包装这些依赖服务的调用。所以,Feign在此基础上做了进一步的封装,由他来帮助我们定义和实现依赖服务接口的定义,在Feign的实现下,我们只需要创建一个接口并使用注解的方式来配置它 (类似以前Dao接口上标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解),即可完成对服务提供方的接口绑定,简化了使用Spring Cloud Ribbon 时,自动封装服务调用客户端的开发量。
Feign默认集成了Ribbon
利用Ribbon维护了MicroServiceCloud-Dept的服务列表信息,并且通过轮询实现了客户端的负载均衡,而与Ribbon不同的是,通过Feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用。
引入依赖:
<!--Feign的依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
需要在消费者的启动类上加
//feign客户端注解,并指定要扫描的包以及配置接口DeptClientService
@EnableFeignClients(basePackages = {“com.kari.springcloud”})
api接口:
@Component //注册到spring
@FeignClient(value = "SPRINGCLOUD-PROVIDER-DEPT")//Eureak中注册的服务名,需要区分大小写
public interface DeptClientServer {
@RequestMapping("/add")//服务提供者的url
public boolean addDept(Dept dept);
}
消费者的控制层:
@Controller
@RequestMapping({"/consumer"})
public class DeptConsumerController {
@Qualifier("SPRINGCLOUD-PROVIDER-DEPT")
@Autowired
private DeptClientServer server = null;
public DeptConsumerController() {
}
@RequestMapping({"/add"})
public boolean addDept(Dept dept) {
return this.server.addDept(dept);