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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringCloud |第二篇: 服务消费者(Ribbon)

發(fā)布時(shí)間:2023/12/19 javascript 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringCloud |第二篇: 服务消费者(Ribbon) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

一、Ribbon簡介

????Ribbon是Netflix發(fā)布的開源項(xiàng)目,主要功能是提供客戶端的軟件負(fù)載均衡算法,將Netflix的中間層服務(wù)連接在一起。Ribbon客戶端組件提供一系列完善的配置項(xiàng)如連接超時(shí),重試等。簡單的說,就是在配置文件中列出Load Balancer后面所有的機(jī)器,Ribbon會自動的幫助你基于某種規(guī)則(如簡單輪詢,隨即連接等)去連接這些機(jī)器。我們也很容易使用Ribbon實(shí)現(xiàn)自定義的負(fù)載均衡算法。

二、準(zhǔn)備工作

????這一篇文章基于上一篇文章的工程,啟動eureka-server 工程;啟動user-service工程,它的端口為8084;將user-service的項(xiàng)目復(fù)制出來一個(gè)將其名稱修改為user-service1,配置文件的端口改為8085.

?

?

啟動,這時(shí)你會發(fā)現(xiàn):user-service在eureka-server注冊了2個(gè)實(shí)例,這就相當(dāng)于一個(gè)小的集群。訪問localhost:1001如圖所示:

三、建一個(gè)服務(wù)消費(fèi)者(Ribbon)

????重新新建一個(gè)工程,取名為:da-ribbon-service;?

????在它的pom.xml文件分別引入起步依賴spring-boot-starter-web,代碼如下:

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>da-ribbon-server</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>da-ribbon-server</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.0.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Finchley.M8</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories></project>

????在工程的配置文件指定服務(wù)的注冊中心地址為http://localhost:1001/eureka/,程序名稱為 ribbon-service,程序端口為2001。配置文件application.yml如下:

eureka:client:serviceUrl:defaultZone: http://localhost:1001/eureka/instance:lease-renewal-interval-in-seconds: 30 server:port: 2001 spring:application:name: ribbon-service

????在工程的啟動類中,通過@EnableEurekaClient向服務(wù)中心注冊;并且向程序的ioc注入一個(gè)bean: restTemplate;并通過@LoadBalanced注解表明這個(gè)restRemplate開啟負(fù)載均衡的功能。

@EnableEurekaClient @SpringBootApplication public class DaRibbonServerApplication {public static void main(String[] args) {SpringApplication.run(DaRibbonServerApplication.class, args);}@Bean@LoadBalancedRestTemplate restTemplate(){return restTemplate();} }

寫一個(gè)測試類HelloService,通過之前注入ioc容器的restTemplate來消費(fèi)service-hi服務(wù)的“/hi”接口,在這里我們直接用的程序名替代了具體的url地址,在ribbon中它會根據(jù)服務(wù)名來選擇具體的服務(wù)實(shí)例,根據(jù)服務(wù)實(shí)例在請求的時(shí)候會用具體的url替換掉服務(wù)名,代碼如下:

@Service public class HelloService {@AutowiredRestTemplate restTemplate;public String getHello(String name){return restTemplate.getForObject("http://user-service/hi?name="+name,String.class);} }

寫一個(gè)controller,在controller中用調(diào)用HelloService 的方法,代碼如下:

@RestController public class HiController {@AutowiredHelloService helloService;@RequestMapping("/hi")public String hi(@RequestParam String name){return helloService.getHello(name);} }

在瀏覽器上多次訪問http://localhost:2001/hi?name=zhangsan,瀏覽器交替顯示:

這說明當(dāng)我們通過調(diào)用restTemplate.getForObject("http://user-service/hi?name="+name,String.class)方法時(shí),已經(jīng)做了負(fù)載均衡,訪問了不同的端口的服務(wù)實(shí)例。

四、此時(shí)的架構(gòu)

  • 一個(gè)服務(wù)注冊中心,eureka-server,端口為1001
  • user-service跑了兩個(gè)工程實(shí)例,端口分別為8084,8085,分別向服務(wù)注冊中心注冊
  • ribbon-sercvice端口為2001,向服務(wù)注冊中心注冊
  • 當(dāng)ribbon-sercvice通過restTemplate調(diào)用user-service的hi接口時(shí),因?yàn)橛胷ibbon進(jìn)行了負(fù)載均衡,會輪流的調(diào)用user-service:8084和8085 兩個(gè)端口的hi接口;

五、源碼下載

????RibbonServer源碼下載:https://gitee.com/Clarences/Ribbon-Service

????UserServer1源碼下載:https://gitee.com/Clarences/User-server1

轉(zhuǎn)載于:https://my.oschina.net/Clarences/blog/1635795

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的SpringCloud |第二篇: 服务消费者(Ribbon)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。