SpringCloud |第二篇: 服務消費者(Ribbon)

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

一、Ribbon簡介

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

二、準備工作

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

113323_eYOy_2940767.png?113349_uV3P_2940767.png

113221_KIPa_2940767.png?113243_Jrjg_2940767.png

啟動,這時你會發現:user-service在eureka-server注冊了2個實例,這就相當于一個小的集群。訪問localhost:1001如圖所示:

113523_vLjg_2940767.png

三、建一個服務消費者(Ribbon)

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

113939_Tk8h_2940767.png

????在它的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>

????在工程的配置文件指定服務的注冊中心地址為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向服務中心注冊;并且向程序的ioc注入一個bean: restTemplate;并通過@LoadBalanced注解表明這個restRemplate開啟負載均衡的功能。

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

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

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

寫一個controller,在controller中用調用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,瀏覽器交替顯示:

135210_fUhV_2940767.png

135222_bkJJ_2940767.png

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

四、此時的架構

  • 一個服務注冊中心,eureka-server,端口為1001
  • user-service跑了兩個工程實例,端口分別為8084,8085,分別向服務注冊中心注冊
  • ribbon-sercvice端口為2001,向服務注冊中心注冊
  • 當ribbon-sercvice通過restTemplate調用user-service的hi接口時,因為用ribbon進行了負載均衡,會輪流的調用user-service:8084和8085 兩個端口的hi接口;

五、源碼下載

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

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

轉載于:https://my.oschina.net/Clarences/blog/1635795

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452341.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452341.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452341.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據庫審計

啟用一個專用的審計日志&#xff08;Audit Log&#xff09;將用戶對數據庫的所有操作記錄在上面。審計員利用審計日志監控數據庫中的各種行為&#xff0c;找出非法存取數據的人、時間和內容。 審計很費時間和空間 DBA可以根據應用對安全性的要求&#xff0c;靈活地打開或關閉…

北海市計算機等級考試,2021上半年北海市計算機二級報名時間|網上報名入口【已開通】...

&nbsp&nbsp[導讀]:2021上半年北海市計算機二級報名時間|網上報名入口【已開通】&#xff0c;更多廣西等級考試報名時間、考試時間以及考試模擬試題&#xff0c;請訪問易考吧廣西等級考試欄目2021上半年北海市計算機二級報名時間|網上報名入口【已開通】一、報名時間網上…

Java實體對象為什么一定要實現Serializable接口呢?

文章目錄Java對象為什么要實現Serializable接口&#xff1f;Serializable接口概述Java對象為什么要實現Serializable接口&#xff1f; 最近這段時間一直在忙著編寫Java業務代碼&#xff0c;麻木地搬著Ctrl-C、Ctrl-V的磚&#xff0c;在不知道重復了多少次定義Java實體對象時“…

C3P0連接池工具類使用

c3p0的基本連接配置文件 c3p0-config.xml <c3p0-config><default-config><property name"driverClass">com.mysql.jdbc.Driver</property><property name"jdbcUrl">jdbc:mysql:///mybase</property><property name…

項目經理常見的溝通壞習慣

溝通失敗有很多原因&#xff0c;每個項目經理都必須熟悉這些原因、了解其中的行為、并且有責任避免溝通失敗的發生。在一些團隊中&#xff0c;會產生失敗的溝通、失敗的項目是因為團隊經理本身的壞習慣行為或者他本人容忍組員有些行為&#xff0c;而這些行為和壞習慣無意中會導…

Android屏幕適配

Android屏幕適配一直是Android開發們的一個痛點&#xff0c;各種各樣的屏幕分辨率等&#xff0c;對Android的屏幕適配帶來了很大的麻煩&#xff0c;而谷歌的解決方案也并不被所有人滿意&#xff0c;所以筆者結合Android官方文檔&#xff0c;來談談這個話題。 術語和基本概念 本…

萬維網www

WWW是環球信息網的縮寫&#xff0c;&#xff08;亦作“Web”、“WWW”、“W3”&#xff0c;英文全稱為“World Wide Web”&#xff09;&#xff0c;中文名字為“萬維網”&#xff0c;"環球網"等&#xff0c;常簡稱為Web。 分為Web客戶端和Web服務器程序。 WWW可以讓W…

飛控計算機的作用,用于波音777飛機的主要飛控計算機

用于波音777飛機的主要飛控計算機飛行控制計算機容錯技術本文介紹了在ERA1992年航空電子會議上介紹的波音777的主要飛控計算機。介紹了系(本文共1頁)閱讀全文>>在對無人機飛控計算機技術發展應用敘述的基礎上,設計了一款基于Zynq平臺的應用于小型無人機的飛控計算機硬件平…

Springboot,SSM框架的區別

參考文獻&#xff1a;文章一 參考文獻&#xff1a;文章二 總結&#xff1a; 1.Springboot 將原有的 xml 配置&#xff0c;簡化為 java 注解 2.使用 IDE 可以很方便的搭建一個 springboot 項目&#xff0c;選擇對應的 maven 依賴&#xff0c;簡化Spring應用的初始搭建以及開發過…

Mysql導入excel數據,解決某些特殊字符亂碼問題

問題 做項目需要從excel表格導入到mysql的數據庫表中&#xff0c;excel表格中的“規格”字段的“”符號導入數據庫表中&#xff0c;會出現部分數據的“”這個符號會亂碼&#xff0c;成“&#xff1f;”的形式。 解決方法 打開excel表格&#xff0c;另存為csv文件&#xff1b;用…

Redis進階實踐之十六 Redis大批量增加數據

原文:Redis進階實踐之十六 Redis大批量增加數據一、介紹 有時候&#xff0c;Redis實例需要在很短的時間內加載大量先前存在或用戶生成的數據&#xff0c;以便盡可能快地創建數百萬個鍵。這就是所謂的批量插入&#xff0c;本文檔的目標是提供有關如何以盡可能快的速度向…

項目經理溝通的四個好習慣

一名項目經理溝通的時間占到工作時間的80%&#xff0c;所以如何提高溝通效率就變成了項目經理提高工作效率的重點。 一名優秀的項目經理&#xff0c;無疑是一個好的溝通者。因為&#xff0c;專業的技能可以使你成為某個領域的專家&#xff0c;但出色的溝通技能&#xff0c…

u盤安裝成功計算機里找不到文件夾,u盤里的文件不見了,詳細教您U盤內容不顯示怎么辦...

在工作、學習中&#xff0c;我們需要把資料攜帶外出的時候&#xff0c;首選的存儲工具基本上都是U盤。不過有用戶在使用U盤時卻遇到了U盤的所有的文件夾不見了的情況&#xff0c;但內存的明明文件還在&#xff0c;這到底是為什么呢&#xff1f;難道U盤的文件真的不見了嗎&#…

五分鐘實現SpringBoot快速入門

文章目錄一、創建Maven工程二、添加SpringBoot的起步依賴三、編寫SpringBoot引導類四、編寫Controller五、測試六、SpringBoot工程熱部署一、創建Maven工程 二、添加SpringBoot的起步依賴 文件位置&#xff1a;pom.xml SpringBoot要求&#xff0c;項目要繼承SpringBoot的起步…

分布式系統開發工具包 —— 基于Kryo的Java對象序列化

Kryo是用于Java語言的一個快速和高效的對象圖序列化框架。Kryo項目的目的是快速、高效、方便地使用API。當需要持久化對象的時候&#xff0c;不論是持久化到文件、數據庫還是網絡&#xff0c;都可以使用Kryo。 目前Kryo已經到了4.0.1版本以上了。本文的介紹適用于V2.0以上版本。…

代碼編輯器Sublime Text 可以跨平臺(linux,window,os x)

說到代碼編輯器&#xff0c;大部分人首先會想到UltraEdit&#xff0c;EmEditor和notepad。但今天要介紹的是另一款功能非常強大的代碼編輯器——Sublime Text。Sublime Text還是一款跨 OS X、Linux 和 Windows 三大平臺的文字/代碼編輯器。除了Sublime Text出色的功能&#xff…

計算機畫圖怎樣更改文字,如何在圖片上改字|超簡單的修改圖片里文字方法

這篇文章將要給大家介紹的是&#xff0c;不用聯網&#xff0c;不用下載專業的圖像處理軟件&#xff0c;單純用畫圖工具&#xff0c;就能修改表情包、圖片上文字的方法&#xff0c;只適合簡單的圖片處理&#xff0c;復雜的還是交給專業的圖像處理工具吧。下面系統吧就給大家帶來…

軟件維護

所謂軟件維護就是在軟件已經交付使用之后&#xff0c;為了改正錯誤或滿足新的需要而修改軟件的過程。可以通過描述軟件交付使用后可能進行的4項活動&#xff0c;具體地定義軟件維護。 1.改正性維護 因為軟件測試不可能暴露出一個大型軟件系統中所有潛藏的錯誤&#xff0c;所以…

【intellij idea】Project Structure 講解

參考文章&#xff1a;戳這里 謝謝樓主分享