日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Ribbon-1 Ribbon的基本使用

發布時間:2024/4/13 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ribbon-1 Ribbon的基本使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們已經成功的將電影微服務和用戶微服務注冊到Eureka Server上去了,如何讓電影微服務調用用戶微服務不去硬編碼,我們目前是硬編碼的user.userServicePath: http://10.40.8.152:7900/simple/我們怎么讓電影微服務使用到,Eureka Server注冊的信息,假設用戶微服務他有多個節點,我怎么樣做到,電影微服務請求用戶微服務的時候,能做到負載均衡呢,我們先來討論一下實現負載均衡的兩種方式,假設這是一個電影微服務,這是用戶微服務的多個節點,一種負載均衡的做法就是,非常常見的,我這邊加一個Nginx,當我要請求用戶微服務的時候,我請求Nginx,反向代理去實現負載均衡,那我們把這種負載均衡的做法呢,叫服務器端負載均衡,有服務器端負載均衡,那就有客戶端側的負載均衡,假設這是一個電影微服務,這是多個用戶的節點,假設在電影微服務這邊,我可以知道,當前有幾個用戶微服務,我可以知道用戶微服務的IP和端口,然后我在這邊實現一個負載均衡的算法,我把它命中到某一個節點進行請求,客戶端負載均衡和服務器端負載均衡,那Ribbon是什么,Ribbon是實現了客戶端負載均衡的組件,他也是Netflix開發的,這是Ribbon的架構圖,從Eureka拉取可用的服務列表,放到這里,這邊實現一個負載均衡的算法,然后命中到某一個節點,這個是服務器端的實例3,然后他提供了多種的策略,輪詢Round robin,隨機Random,還有根據響應時間的加權,支持多種算法,我們在課程中也會涉及到,現在討論一下怎么繼承Ribbon,我們以movie這個微服務為例,為了不侵入原來的代碼呢,我復制一份,改名叫movie-ribbon,pom文件改一下,我們看一下SpringCloud的官方文檔,How to include Ribbonhttps://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-ribbon.html首先要添加groupId和artifactId,整合某某,就要加starter,我們發現在spring-cloud-starter-eureka里面,已經包含了spring-cloud-starter-ribbon,是不是這一步就可以忽略了

怎么去使用Ribbon呢,使用Ribbon非常的簡單,一個注解就OK,添加這個@LoadBalanced@Bean @LoadBalanced public RestTemplate restTemplate() {return new RestTemplate(); }這個注解就已經整合了Ribbon,讓這個restTemplate具備Ribbon具備負載均衡的能力,然后我們把MovieController改一下@Value("${user.userServicePath}") private String userServicePath;這個就不需要了,還有配置文件的也不要了user.userServicePath: http://10.40.8.152:7900/simple/這邊我們就硬編碼吧,@GetMapping("/movie/{id}") public User findById(@PathVariable Long id) { // http://localhost:7900/simple/ // VIP virtual IP // HAProxy Heartbeat return this.restTemplate .getForObject("http://microservice-simple-provider-user/simple/" + id, User.class); }我們來分析一下這個地址的特點,我們之前的URL是這個東西http://10.40.8.152:7900/simple/我們現在改成了用戶微服務的ServiceId,也就是spring.application.name=microservice-simple-provider-user那這個東西是什么呢,是叫VIP,Vitual IP,虛擬IP,如果大家對HAProxy,或者HeartBeat,這些軟件有了解的話,會很容易了解VIP是什么,如果大家實在不理解什么是VIP的話,我們可以記住這樣的一個規律,我想要請求服務器的ServiceId,也就是服務提供者的spring.application.name,我們把Ribbon啟動一下,現在端口是7901,為了避免與之前的Movie端口沖突,我們把端口改一下,改成8010,重新啟動spring.application.name=microservice-simple-consumer-movie-ribbon訪問一下8010/movie/1http://localhost:8010/movie/1{"id":1,"username":"user1","name":"張三","age":20,"balance":100.00}請求到用戶微服務的,那怎么樣去實現負載均衡呢,那我們得再起一個用戶微服務,用戶微服務叫7901,新增了一個,啟動7901,現在有兩個用戶微服務,直接請求movie,按理來講,假設是負載均衡的話,把請求打到兩個節點上去,說明LoadBanlace已經生效了,已經是可以負載均衡了,那一開始7901沒有呢,一開始還沒有拉到服務消費者那一邊,一開始不知道后來起的7901,這個端口的節點,所以一開始是命中了7900,等到后來拉下來了,然后去做負載均衡的算法,然后也同樣的命中到了7901,我們把日志都清一下,SpringCloud的ribbon負載均衡的策略是輪詢 #debug=true server.port=8010eureka.client.serviceUrl.defaultZone=http://admin:1234@10.40.8.152:8761/eurekaspring.application.name=microservice-simple-consumer-movie-ribbon eureka.instance.prefer-ip-address=true eureka.instance.instance-id=${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}} eureka.client.healthcheck.enabled=true spring.redis.host=10.40.8.152 spring.redis.password=aztech spring.redis.port=6379 package com.learn.cloud;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate;@EnableEurekaClient @SpringBootApplication public class MicroserviceSimpleConsumerMovieApplication {@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}public static void main(String[] args) {SpringApplication.run(MicroserviceSimpleConsumerMovieApplication.class, args);} } #debug=true server.port=7900#server.context-path=/boot02spring.http.encoding.charset=UTF-8 spring.http.encoding.enabled=true spring.http.encoding.force=truelogging.level.com.learn=trace #logging.file=D:/springboot.log logging.file=springboot.log #logging.path=/spring/log logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n logging.pattern.file=%d{yyyy-MM-dd} ==== [%thread] %-5level ==== %logger{50} ==== %msg%n #spring.resources.static-locations=classpath:/hello,classpath:/learnspring.datasource.username=root spring.datasource.password=123456 spring.datasource.url=jdbc:mysql://59.110.158.145:3306/SpringCloud?useSSL=false&useUnicode=true&characterEncoding=UTF-8 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.initialSize=5 spring.datasource.minIdle=5 spring.datasource.maxActive=20 spring.datasource.maxWait=60000mybatis.config-location=classpath:mybatis/mybatis-config.xml mybatis.mapper-locations=classpath:mybatis/mapper/*.xmleureka.client.serviceUrl.defaultZone=http://admin:1234@10.40.8.152:8761/eurekaspring.application.name=microservice-simple-provider-user eureka.instance.prefer-ip-address=true eureka.instance.instance-id=${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}} eureka.client.healthcheck.enabled=true spring.redis.host=10.40.8.152 spring.redis.password=1234 spring.redis.port=6379 package com.learn.cloud;import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@MapperScan(value="com.learn.cloud.mapper") @EnableEurekaClient @SpringBootApplication public class MicroserviceSimpleProviderUserApplication {public static void main(String[] args) {SpringApplication.run(MicroserviceSimpleProviderUserApplication.class, args);} } server.port=7901spring.http.encoding.charset=UTF-8 spring.http.encoding.enabled=true spring.http.encoding.force=truelogging.level.com.learn=trace logging.file=springboot.log logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n logging.pattern.file=%d{yyyy-MM-dd} ==== [%thread] %-5level ==== %logger{50} ==== %msg%nspring.datasource.username=root spring.datasource.password=123456 spring.datasource.url=jdbc:mysql://59.110.158.145:3306/SpringCloud?useSSL=false&useUnicode=true&characterEncoding=UTF-8 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.initialSize=5 spring.datasource.minIdle=5 spring.datasource.maxActive=20 spring.datasource.maxWait=60000mybatis.config-location=classpath:mybatis/mybatis-config.xml mybatis.mapper-locations=classpath:mybatis/mapper/*.xmleureka.client.serviceUrl.defaultZone=http://admin:1234@10.40.8.152:8761/eurekaspring.application.name=microservice-simple-provider-user eureka.instance.prefer-ip-address=true eureka.instance.instance-id=${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}} eureka.client.healthcheck.enabled=true spring.redis.host=10.40.8.152 spring.redis.password=1234 spring.redis.port=6379 package com.learn.cloud;import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@MapperScan(value="com.learn.cloud.mapper") @EnableEurekaClient @SpringBootApplication public class MicroserviceSimpleProviderUser7901Application {public static void main(String[] args) {SpringApplication.run(MicroserviceSimpleProviderUser7901Application.class, args);} }

?

總結

以上是生活随笔為你收集整理的Ribbon-1 Ribbon的基本使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。