What is Ribbon? Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随即连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。
服务端代码 一:修改Build.gradle 文件
dependencies { compile "org.springframework.cloud:spring-cloud-starter-ribbon", "org.springframework.cloud:spring-cloud-starter-netflix-eureka-client", "org.springframework.boot:spring-boot-devtools", "org.springframework.boot:spring-boot-starter-test" testCompile 'org.springframework.boot:spring-boot-starter-test'}dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" }}
二:在项目启动类中,通过@EnableDiscoveryClient向服务中心注册;
@SpringBootApplication@EnableDiscoveryClientpublic class RibbonApplication { public static void main(String[] args) { SpringApplication.run(RibbonApplication.class, args); }}
并且向程序的ioc注入一个bean: restTemplate;并通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。
@Componentpublic class ServiceConfig { @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); }}
在controller 抛出要访问得接口
@RestControllerpublic class ServerController { @GetMapping("/hi/{name}") public String sayHi(@PathVariable String name){ return "hello" + name + " 9334"; }}
application-1.propertiese
spring.application.name=spring-cloud-ribbonserver.port=9333eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
application-2.propertiese
spring.application.name=spring-cloud-ribbonserver.port=9334eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
三:启动eureka ,启动ribbon1,ribbon2, 在eureka 查看服务端是否已注册到服务中心, 并分别在浏览器访问接口地址 ,http://desktop-3aggf28:9334/hi/123,http://desktop-3aggf28:9333/hi/123 结果如下:
服务中心已注册
服务端已实现完毕---------
客户端代码如下:
一:修改Build.gradle
dependencies { compile "org.springframework.cloud:spring-cloud-starter-ribbon", "org.springframework.cloud:spring-cloud-starter-netflix-eureka-client", "org.springframework.cloud:spring-cloud-starter-netflix-ribbon", "org.springframework.boot:spring-boot-devtools", "org.springframework.boot:spring-boot-starter-test"}dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" }}
二:编写controller,service, 开启restTemplate ,修改启动类
@Componentpublic class ServiceConfig { @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); }}
restTemplate 访问得地址是服务端配置文件配置得项目名称,
@Componentpublic class HiService { @Autowired RestTemplate restTemplate; public String hiService(String name) { return restTemplate.getForObject("http://SPRING-CLOUD-RIBBON/hi/" + name,String.class); }}
controller 代码一样
@RestControllerpublic class ClientController { @Autowired HiService hiService; @GetMapping(value = "/hi/{name}") public String hiService(@PathVariable String name) { return hiService.hiService( name ); }}
启动类 注册到服务中心
@SpringBootApplication@EnableEurekaClient@EnableDiscoveryClientpublic class RibbonClientApplication { public static void main(String[] args) { SpringApplication.run(RibbonClientApplication.class, args); }}
application.properties
spring.application.name=service-clientserver.port=9555eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
客户端代码完毕
启动客户端项目,访问注册中心看是否发现客户端已注册,并通过访问客户端接口来观察是否服务端实现负载均衡 ,多次刷新返回结果如下,证明服务端已实现负载均衡,轮询执行
代码地址 :https://gitee.com/gavinmars/ribbon-server.git,https://gitee.com/gavinmars/ribbon-client.git