博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringCloud-服务的消费者(rest+ribbon)
阅读量:5133 次
发布时间:2019-06-13

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

SpringCloud-服务的消费者(rest+ribbon)

在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的。Spring Cloud有两种服务调用方式,一种是ribbon+restTemplate,另一种是feign,先来说下ribbon+rest

Ribbon简介

Ribbon是一个负载均衡客户端,可以很好的控制http和tcp的一些行为。Feign默认集成了ribbon

实现负载均衡,我们可以通过服务器端和客户端做负载均衡。服务器端做负载均衡,可以使用Nginx。而客户端做负载均衡,就是客户端有一个组件,知道有哪些可用的微服务,实现一个负载均衡算法。
Ribbon工作流程主要分为两步:
第一:先选择Eureka Server,优先选择在同一个Zone且负载较少的Server
第二:再根据用户指定的策略,再从server取到的服务注册列表中选择一个地址。其中Ribbon提供了很多种策略,例如轮询round bin ,随机random,很具响应时间加权

 

Ribbon已经默认实现了这些配置bean

IClientConfig ribbonClientConfig: DefaultClientConfigImpl
IRule ribbonRule: ZoneAvoidanceRule
IPing ribbonPing: NoOpPing
ServerList ribbonServerList: ConfigurationBasedServerList
ServerListFilter ribbonServerListFilter: ZonePreferenceServerListFilter
ILoadBalancer ribbonLoadBalancer: ZoneAwareLoadBalancer

项目创建

新建一个Eureka Client项目

pom文件如下

4.0.0
com.SpringCloud
service-ribbon
0.0.1-SNAPSHOT
jar
service-ribbon
service-ribbon-description
org.springframework.boot
spring-boot-starter-parent
1.5.13.RELEASE
UTF-8
UTF-8
1.8
Edgware.SR3
org.springframework.cloud
spring-cloud-starter-eureka
org.springframework.cloud
spring-cloud-starter-ribbon
org.springframework.cloud
spring-cloud-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin

application.yml如下

spring:  application:    name: service-ribbonserver:  port: 8764eureka:  client:    service-url:      defaultZone: http://localhost:8761/eureka/

  

项目启动类修改如下

@EnableDiscoveryClient@SpringBootApplicationpublic class ServiceRibbonApplication {   public static void main(String[] args) {      SpringApplication.run(ServiceRibbonApplication.class, args);   }      @Bean   @LoadBalanced   RestTemplate restTemplate(){      return new RestTemplate();   }}

通过@EurekaDiscoveryClient向服务中心注册;并且向程序的IOC注入一个bean:restTemplate;并通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。

新建测试service

@Servicepublic class HelloService {    @Autowired    RestTemplate restTemplate;    public String hiService(String name) {        return restTemplate.getForObject("http://eureka-client/hello?name=" + name, String.class);    }}

 

新建测试controller

@RestControllerpublic class HelloController {    @Autowired    HelloService helloService;    @RequestMapping("/hi")    public String hi(@RequestParam String name) {        return helloService.hiService(name);    }}

浏览器访问

http://localhost:8764/hi?name=test

可看到以下效果

 

转载于:https://www.cnblogs.com/EnzoDin/p/9247160.html

你可能感兴趣的文章
Linux(CentOS7.1)修改默认yum源为国内的阿里云yum源
查看>>
delphi三方控件的安装方法
查看>>
(转)C# Color类图示
查看>>
寒假作业3(传说中的写软件)
查看>>
c/c++ static
查看>>
Threadump analyzed Learning plan
查看>>
Xinlinx 7系列FPGA概览
查看>>
【Linux 命令】- tail命令
查看>>
2018软工实践第二次作业
查看>>
报错Caused by: org.hibernate.AnnotationException: No identifier specified for entity:
查看>>
MySQL教程(十二)—— 数据的导入与导出
查看>>
《人月神话》读书笔记2--空间技能
查看>>
ZooKeeper系列(3):znode说明和znode状态
查看>>
JavaScript面向对象和原型函数
查看>>
DPDK 网卡绑定和解绑
查看>>
configparser模块简介
查看>>
phpMailer在CentOS 6.5下无法发送邮件的解决办法
查看>>
request之额外路径
查看>>
Android WebView无法播放视频或直播,关闭界面后任在播放的问题;
查看>>
POJ1201 Intervals 【差分约束】
查看>>