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

本文共 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

你可能感兴趣的文章
Golang(笔记) 顺序编程
查看>>
20170511 Python练习册0000 将头像右上角加上红色的数字
查看>>
基于Java SE集合的图书管理系统
查看>>
reset-damo
查看>>
vue简单路由(一)
查看>>
合并数组里面的数据增加重复数量标记
查看>>
PHP之cURL(爬虫)
查看>>
Linux一些基本命令
查看>>
[Angular2 Form] Angular 2 Template Driven Form Custom Validator
查看>>
[Backbone]7. Collection Views, Custom Events
查看>>
hadoop-05-mysql修改密码
查看>>
与最大公约数和最小公倍数相关的题目
查看>>
购物车简单系统实现
查看>>
C#使用Selenium实现QQ空间数据抓取 说说抓取
查看>>
Gold Smith第一章
查看>>
毫秒级百万数据分页存储过程
查看>>
堆排序例子
查看>>
文件输入输出流->带缓冲的输入输出流(过滤流)->基本数据的输入输出流 链接 增强了文件输入输出流的功能...
查看>>
deviceMotion.userAcceleration加速度方向
查看>>
PHP错误级别
查看>>