springCloud中的Sidecar多語言支持詳解
一、Sidecar 的介紹
1.1 引言
在 SpringCloud 的項(xiàng)目中,需要接入一些非 java 程序或第三方接口(無法接入eureka,hystrix,feign等組件的程序)。所以我們可以通過啟動(dòng)一個(gè)代理的微服務(wù)去和非 java 的程序或第三方接口進(jìn)行交流,然后再把代理的微服務(wù)計(jì)入 SpringCloud 的相關(guān)組件中。
應(yīng)用程序和服務(wù)通常需要相關(guān)的功能,例如監(jiān)控、日志、集中化配置和網(wǎng)絡(luò)服務(wù)等。這些外圍任務(wù)可以作為單獨(dú)的組件或服務(wù)來實(shí)現(xiàn)。
如果它們緊密集成到應(yīng)用程序中,它們可以在與應(yīng)用程序相同的進(jìn)程中運(yùn)行,從而有效地使用共享資源。但是,這也意味著它們沒有很好地隔離,并且其中一個(gè)組件的中斷可能會(huì)影響其他組件或整個(gè)應(yīng)用程序。此外,它們通常需要使用與父應(yīng)用程序相同的語言或者技術(shù)棧來實(shí)現(xiàn)。因此,組件和應(yīng)用程序彼此之間具有密切的相互依賴性。
如果將應(yīng)用程序分解為服務(wù),則可以使用不同的語言和技術(shù)構(gòu)建每個(gè)服務(wù)。雖然這提供了更大的靈活性,但這意味著每個(gè)組件都有自己的依賴關(guān)系,并且需要特定于語言的庫(kù)來訪問底層平臺(tái)以及與父應(yīng)用程序共享的任何資源。此外,將這些功能部署為單獨(dú)的服務(wù)可能會(huì)增加應(yīng)用程序的延遲。管理這些特定于語言的接口的代碼和依賴關(guān)系也會(huì)增加相當(dāng)大的復(fù)雜性,尤其是對(duì)于托管、部署和管理服務(wù)。
1.2 什么是 Sidecar(邊車)模式
將一組緊密結(jié)合的任務(wù)與主應(yīng)用程序共同放在一臺(tái)主機(jī)(Host)中,但會(huì)將它們部署在各自的進(jìn)程或容器中。這種方式也被稱為“Sidecar(邊車)模式”。
邊車服務(wù)不一定是應(yīng)用程序的一部分,而是與之相關(guān)聯(lián)。它適用于父應(yīng)用程序的任何位置。Sidecar 支持與主應(yīng)用程序一起部署的進(jìn)程或服務(wù)。這就像是如下圖所示的邊三輪摩托車那樣,將邊車安裝在一輛摩托車上,就變成了邊三輪摩托車。每輛邊三輪摩托車都有自己的邊車。類似同樣的方式,邊車服務(wù)共享其父應(yīng)用程序的主機(jī)。對(duì)于應(yīng)用程序的每個(gè)實(shí)例,邊車的實(shí)例被部署并與其一起托管。
1.3 邊車模式的優(yōu)點(diǎn)
- 在運(yùn)行時(shí)環(huán)境和編程語言方面,邊車獨(dú)立于其主要應(yīng)用程序,因此不需要為每種語言開發(fā)一個(gè)邊車。
- 邊車可以訪問與主應(yīng)用程序相同的資源。例如,邊車可以監(jiān)視邊車和主應(yīng)用程序使用的系統(tǒng)資源。
- 由于它靠近主應(yīng)用程序,因此在它們之間進(jìn)行通信時(shí)沒有明顯的延遲。
- 即使對(duì)于不提供可擴(kuò)展性機(jī)制的應(yīng)用程序,也可以使用邊車通過將其作為自己的進(jìn)程附加到與主應(yīng)用程序相同的主機(jī)或子容器中來擴(kuò)展功能
Sidecar模式通常與容器一起使用,并稱為邊車容器。
二、Sidecar 的實(shí)現(xiàn)
2.1 創(chuàng)建一個(gè) springboot 項(xiàng)目
創(chuàng)建一個(gè)名為 06-other-service 的 springboot 項(xiàng)目,當(dāng)作一個(gè)第三方的項(xiàng)目。
編寫其測(cè)試接口
@RestController public class TestController { @GetMapping("list") public String list(){ return "other-service:list"; } }
編寫配置文件
server: port: 7001
2.2 創(chuàng)建一個(gè) Maven 項(xiàng)目
創(chuàng)建一個(gè)名為 06-sidecar 的 Maven 子項(xiàng)目,用來實(shí)現(xiàn) Sidecar。
2.3 編寫導(dǎo)入相關(guān)依賴
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-netflix-sidecar</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
因?yàn)?Sidecar 要注冊(cè)到 Eureka 上所以要導(dǎo)入 Eureka Client 的注解。
2.4 編寫配置類
通過 @EnableSidecar 注解,來開啟 Side 功能。
@SpringBootApplication @EnableSidecar public class SideCarApplication { public static void main(String[] args) { SpringApplication.run(SideCarApplication.class,args); } }
2.5 編寫配置文件
server: port: 81 #指定Eureka服務(wù)的地址 eureka: client: service-url: defaultZone: http://root:root@localhost:8761/eureka, http://root:root@localhost:8762/eureka #指定服務(wù)的名稱 spring: application: name: OTHER-SERVICE # 指定所代理的服務(wù)的端口號(hào) sidecar: port: 7001
Sidecar 只能代理本地的服務(wù),所以不需要指定 ip只需要指定所代理的服務(wù)的端口號(hào)即可。
2.6 測(cè)試
在 Customer 中通過 Feign 的方式去調(diào)用此第三方服務(wù)。
2.6.1 編寫 client
@FeignClient(value = "OTHER-SERVICE") public interface OtherServiceClient { @RequestMapping("list") public String list(); }
2.6.2 編寫 controller
//sideCar @Autowired private OtherServiceClient otherServiceClient; @GetMapping("list") public String list(){ String list = otherServiceClient.list(); return list; }
到此這篇關(guān)于springCloud中的Sidecar多語言支持詳解的文章就介紹到這了,更多相關(guān)Sidecar多語言支持內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringCloud配置動(dòng)態(tài)更新原理解析
在微服務(wù)架構(gòu)的浩瀚星海中,服務(wù)配置的動(dòng)態(tài)更新如同魔法一般,能夠讓應(yīng)用在不重啟的情況下,實(shí)時(shí)響應(yīng)配置的變更,Spring Cloud作為微服務(wù)架構(gòu)中的佼佼者,其動(dòng)態(tài)配置更新的能力尤為引人注目,本文給大家介紹了SpringCloud配置動(dòng)態(tài)更新原理,需要的朋友可以參考下2025-01-01簡(jiǎn)單講解在Java編程中實(shí)現(xiàn)設(shè)計(jì)模式中的單例模式結(jié)構(gòu)
這篇文章主要介紹了簡(jiǎn)單講解在Java編程中實(shí)現(xiàn)設(shè)計(jì)模式中的單例模式結(jié)構(gòu),設(shè)計(jì)模式是最基本直白簡(jiǎn)單的一種設(shè)計(jì)模式,需要的朋友可以參考下2016-04-04解析SpringSecurity+JWT認(rèn)證流程實(shí)現(xiàn)
這篇文章主要介紹了解析SpringSecurity+JWT認(rèn)證流程實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07springboot中的controller參數(shù)映射問題小結(jié)
這篇文章主要介紹了springboot中的controller參數(shù)映射問題小結(jié),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2024-12-12java控制臺(tái)版實(shí)現(xiàn)五子棋游戲
這篇文章主要為大家詳細(xì)介紹了java控制臺(tái)版實(shí)現(xiàn)五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12SpringBoot項(xiàng)目中java -jar xxx.jar沒有主清單屬性的解決方法
這篇文章主要給大家介紹了SpringBoot項(xiàng)目中java -jar xxx.jar沒有主清單的解決方法,文中通過代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-01-01Runtime.getRuntime().exec 路徑包含空格的解決
這篇文章主要介紹了Runtime.getRuntime().exec 路徑包含空格的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11