博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(二)Ribbon(负载均衡的客户端)+Rest
阅读量:6092 次
发布时间:2019-06-20

本文共 2948 字,大约阅读时间需要 9 分钟。

前面讲了服务的注册与发现,微服务项目会把项目的各个业务需求划分成几个模块来单独提供服务,各服务间的调用都是采用Http Restful来实现,但是在SpringClound中服务间的调用有两种方式:一种是ribbon+ restTemplate;另一种是feign;

 Ribbon:在SpringClound中是作为一个负载均衡的客户端,控制访问入口,定制访问策略等功能; Feign组件同时也是集成了ribbon的

 

 

在Idea里,新建项目,选择Spring initializer.

勾选组件

 

下面的pom

org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
1.4.4.RELEASE
org.springframework.cloud
spring-cloud-starter-netflix-ribbon
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test

  

配置properties文件参数;

#服务端口server.port=8885#注册服务中心地址eureka.client.service-url.defaultZone=http://localhost:8882/eureka/#注册服务端namespring.application.name=service-ribbon#调用连接时间eureka.client.eureka-server-read-timeout-seconds=6000#调用连接时间eureka.client.eureka-server-connect-timeout-seconds=6000hystrix.metrics.polling-interval-ms=6000

  

在启动类上添加注解@EnableDiscoveryClient

@EnableDiscoveryClient@SpringBootApplicationpublic class SpringCloundRibbonExampleApplication {    public static void main(String[] args) {        SpringApplication.run(SpringCloundRibbonExampleApplication.class, args);    }    /**     * ioc注入一个bean: restTemplate;并通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能     *     * @return     */    @Bean    @LoadBalanced    RestTemplate restTemplate() {        return new RestTemplate();    }}

  

创建conroller、service

@RestControllerpublic class HelloController {    @Autowired    IHelloService helloService;    @RequestMapping(value = "/index")    public String index() {        return helloService.index();    }}

  

@Servicepublic class HelloServiceImpl implements IHelloService {    @Autowired    RestTemplate restTemplate;    @Override    public String index() {        return restTemplate.getForObject("http://SERVICE-HELLO/index",String.class);    }}

  

启动项目,然后再看服务中心,已经注册成功

 

 

回到浏览器,输入http://localhost:8885/index

刷新:

 

Ribbon本身提供了下面几种负载均衡策略:

核心组件IRule

  • RoundRobinRule: 轮询策略,Ribbon以轮询的方式选择服务器,这个是默认值。所以示例中所启动的两个服务会被循环访问;
  • RandomRule: 随机选择,也就是说Ribbon会随机从服务器列表中选择一个进行访问;
  • BestAvailableRule: 最大可用策略,即先过滤出故障服务器后,选择一个当前并发请求数最小的;
  • WeightedResponseTimeRule: 带有加权的轮询策略,对各个服务器响应时间进行加权处理,然后在采用轮询的方式来获取相应的服务器;
  • AvailabilityFilteringRule: 可用过滤策略,先过滤出故障的或并发请求大于阈值一部分服务实例,然后再以线性轮询的方式从过滤后的实例清单中选出一个;
  • ZoneAvoidanceRule: 区域感知策略,先使用主过滤条件(区域负载器,选择最优区域)对所有实例过滤并返回过滤后的实例清单,依次使用次过滤条件列表中的过滤条件对主过滤条件的结果进行过滤,判断最小过滤数(默认1)和最小过滤百分比(默认0),最后对满足条件的服务器则使用RoundRobinRule(轮询方式)选择一个服务器实例。
@Configuration public class RibbonConfiguration {
@Bean public IRule ribbonRule() {
return new RandomRule(); } }
我们可以通过继承ClientConfigEnabledRoundRobinRule,来实现自己负载均衡策略。

 

转载于:https://www.cnblogs.com/skyLogin/p/10002662.html

你可能感兴趣的文章
老妈-养生
查看>>
backbone实例todos分析(三)总结 (转)
查看>>
Eclipse add external jars导致运行出现java.lang.NoClassDefFoundError的解决方法
查看>>
如何察看SQL Server 数据库中各个表的空间占用情况
查看>>
现代软件工程 第一章 概论 第2题——韩婧
查看>>
MSSQL孤立用户的解决办法
查看>>
Threads in Spring
查看>>
【HDOJ】1073 Online Judge
查看>>
TCHAR2char、CString2TCHAR*、TCHAR*2CString
查看>>
Hystrix是个什么玩意儿
查看>>
Storm入门(四)WordCount示例
查看>>
redis是单进程数据库,多用户排队对统一数据进行访问,不存在并发访问生产的线程安全问题...
查看>>
java8函数式编程实例
查看>>
jqgrid滚动条宽度/列显示不全问题
查看>>
在mac OS10.10下安装 cocoapods遇到的一些问题
查看>>
angularjs表达式中的HTML内容,如何不转义,直接表现为html元素
查看>>
css技巧
查看>>
Tyvj 1728 普通平衡树
查看>>
[Usaco2015 dec]Max Flow
查看>>
javascript性能优化
查看>>