成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

微服務(wù)SpringCloudAlibaba之我見-創(chuàng)新互聯(lián)

目前成都創(chuàng)新互聯(lián)公司已為千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計、美蘭網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

作者:Piotr Mińkowski,“Mastering Spring Cloud”一書作者

原文鏈接:

https://dzone.com/articles/microservices-with-spring-cloud-alibaba

 

微服務(wù)Spring Cloud Alibaba之我見

如果你正在尋找一個Spring Cloud Netflix的替代方案,建議可以看下這篇和Spring Cloud Alibaba相關(guān)的文章。

前段時間,Spring Cloud在其官方博客宣布:阿里巴巴開源 Spring Cloud Alibaba,發(fā)布了首個預(yù)覽版本0.2.0,并已和Spring Boot 2.0兼容,該項(xiàng)目支持基于阿里巴巴的開源組件和阿里云云產(chǎn)品,構(gòu)建微服務(wù)體系。

這個項(xiàng)目看起來非常有趣,并且目前已成為SpringCloud孵化器倉庫中最流行的項(xiàng)目之一。

微服務(wù)Spring Cloud Alibaba之我見

Spring Cloud還支持另一個流行的阿里巴巴開源組件——Sentinel,他負(fù)責(zé)流量控制、并發(fā)、斷路和負(fù)載保護(hù)。

我們的演示示例由三個微服務(wù)和API網(wǎng)關(guān)組成,非常類似于我之前寫過的一篇文章《基于SpringBoot 2.0、Eureka和Spring Cloud搭建微服務(wù)的快速指南》中所描述的體系結(jié)構(gòu)。

唯一的區(qū)別在于,用于配置管理和服務(wù)發(fā)現(xiàn)的工具。微服務(wù)調(diào)用服務(wù)暴露的接口,而department-service調(diào)用employee-service暴露的接口,使用OpenFeign客戶端實(shí)現(xiàn)了服務(wù)間的通信。整個系統(tǒng)的復(fù)雜性隱藏在使用NetflixZuul實(shí)現(xiàn)的API網(wǎng)關(guān)之后。

“SpringCloud Alibaba是否可以替代SpringCloud Netflix?”

答案是肯定的,但不是全部。Spring Cloud Alibaba仍然與Ribbon集成,Ribbon是基于服務(wù)發(fā)現(xiàn)的負(fù)載平衡。在這種情況下,Netflix Eureka很有可能被Nacos替換掉。

Nacos(DynamicNaming and Configuration Service)是一個更易于構(gòu)建云原生應(yīng)用的動態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺易于使用的平臺,按照這個定義,您可以使用Nacos用于:

  • 服務(wù)發(fā)現(xiàn)-可以注冊您的微服務(wù),并通過DNS或HTTP接口發(fā)現(xiàn)其他微服務(wù)。它還為注冊服務(wù)提供實(shí)時健康檢查。

  • 分布式配置——Nacos提供的動態(tài)配置服務(wù)允許您在所有環(huán)境中以集中和動態(tài)的方式管理所有服務(wù)的配置。事實(shí)上,您也可以使用它來替換Spring Cloud Config Server。

  • 動態(tài)DNS——它支持加權(quán)路由,使得更容易實(shí)現(xiàn)中間層負(fù)載平衡、靈活的路由策略、流控制和簡單的DNS解析服務(wù)。

Spring Cloud還支持另一個流行的阿里巴巴開源組件——Sentinel,他負(fù)責(zé)流量控制、并發(fā)、斷路和負(fù)載保護(hù)。

我們的演示示例由三個微服務(wù)和API網(wǎng)關(guān)組成,非常類似于我之前寫過的一篇文章《基于SpringBoot 2.0、Eureka和Spring Cloud搭建微服務(wù)的快速指南》中所描述的體系結(jié)構(gòu)。唯一的區(qū)別在于,用于配置管理和服務(wù)發(fā)現(xiàn)的工具。

微服務(wù)調(diào)用服務(wù)暴露的接口,而department-service調(diào)用employee-service暴露的接口,使用OpenFeign客戶端實(shí)現(xiàn)了服務(wù)間的通信。整個系統(tǒng)的復(fù)雜性隱藏在使用NetflixZuul實(shí)現(xiàn)的API網(wǎng)關(guān)之后。

微服務(wù)Spring Cloud Alibaba之我見

1. 運(yùn)行Nacos服務(wù)器

您可以在Windows和Linux系統(tǒng)上運(yùn)行Nacos。首先,您應(yīng)該下載GitHub上提供的最新穩(wěn)定版本。解壓縮之后,必須通過執(zhí)行以下命令以單機(jī)模式運(yùn)行它:

cmd nacos/bin/startup.cmd -m standalone

 默認(rèn)情況下,Nacos從端口8848開始。它提供/nacos/v1下的HTTP API,以及地址http://localhost:8848/nacos下的管理web控制臺。如果查看日志,您會發(fā)現(xiàn)它只是一個使用SpringFramework編寫的應(yīng)用程序。

 2. 依賴關(guān)系

正如我前面提到的,Spring Cloud Alibaba仍然處于孵化階段,因此它不包含在SpringCloud Release Train中。這就是為什么我們需要在pom.xml的依賴關(guān)系管理部分中包括一個針對阿里巴巴的特殊BOM。我們還將使用Spring Cloud的最新穩(wěn)定版本,即現(xiàn)在的Finchley.SR2。

<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Finchley.SR2</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>0.2.0.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies>

Spring Cloud Alibaba為當(dāng)前支持的組件提供了三個啟動器。這些是使用Nacos進(jìn)行服務(wù)發(fā)現(xiàn)的spring-cloud-starter-alibaba-nacos-discovery、用于分布式配置的spring-cloud-starter-alibaba-nacos-config以及用于限流降級的spring-cloud-starter-alibaba-sentinel。

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos- discovery</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos- config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>

3. 使用Nacos啟用分布式配置

為了啟用Nacos的配置管理,我們只需要引入一個starter,即spring-cloud-starter-alibaba-nacos-config。它不提供Nacos服務(wù)器的自動配置地址,因此我們需要為bootstrap.yml文件中的應(yīng)用程序顯式地設(shè)置它。

spring:application:name: employee-servicecloud:nacos:  config:    server-addr: localhost:8848

 我們的應(yīng)用程序嘗試與Nacos連接,并獲取在文件中提供的與屬性spring.application.name的值同名的配置。目前,Spring Cloud Alibaba只支持.properties文件,因此我們需要在文件employee-service.properties內(nèi)創(chuàng)建配置。

Nacos提供了創(chuàng)建和管理配置屬性的優(yōu)雅方式。我們可以使用網(wǎng)絡(luò)管理控制臺來做到這一點(diǎn)。下面圖片中可見的字段Data ID實(shí)際上是配置文件的名稱。配置屬性列表應(yīng)該放在Configuration Content字段中。

微服務(wù)Spring Cloud Alibaba之我見

好消息是,它在修改了Nacos之后會動態(tài)刷新應(yīng)用程序配置。在應(yīng)用程序中,您唯一要做的就是注釋應(yīng)該用@RefreshScope或@ConfigurationProperties刷新的bean。

現(xiàn)在,讓我們考慮以下情況。我們將稍微修改一下配置,以添加一些帶有測試數(shù)據(jù)的屬性,如下所示。

微服務(wù)Spring Cloud Alibaba之我見

 

這是我們存儲庫bean的實(shí)現(xiàn)。它將帶有前綴repository.employees的所有配置屬性注入到employees列表中。

@Repository@ConfigurationProperties(prefix = "repository")public class EmployeeRepository {private List < Employee > employees = new ArrayList < > ();public List < Employee > getEmployees() {return employees;}public void setEmployees(List < Employee > employees) {this.employees = employees;}public Employee add(Employee employee) {employee.setId((long)(employees.size() + 1));employees.add(employee);return employee;}public Employee findById(Long id) {Optional < Employee > employee = employees.stream().filter(a - > a.getId().equals(id)).findFirst();if (employee.isPresent())return employee.get();elsereturn null;}public List < Employee > findAll() {return employees;}public List < Employee > findByDepartment(Long departmentId) {return employees.stream().filter(a -> a.getDepartmentId().equals(departmentId)).collect(Collectors.toList());}public List < Employee > findByOrganization(Long organizationId) {return employees.stream().filter(a -> a.getOrganizationId().equals(organizationId)).collect(Collectors.toList());}}

現(xiàn)在,您可以更改一些屬性值,如下圖所示。然后,如果調(diào)用在端口8090(http://localhost:8090)上可用的employee-service,您應(yīng)該會看到具有修改值的雇員的完整列表。

 

微服務(wù)Spring Cloud Alibaba之我見

對于我們另外兩個微服務(wù),部門服務(wù)和組織服務(wù),應(yīng)該創(chuàng)建相同的配置屬性。假設(shè)您已經(jīng)完成了,那么您應(yīng)該在Nacos上具有以下配置條目。

微服務(wù)Spring Cloud Alibaba之我見

4. 使用Nacos啟用服務(wù)發(fā)現(xiàn)

要使用Nacos實(shí)現(xiàn)服務(wù)發(fā)現(xiàn),首先需要包括starterspring-cloud-starter-alibaba-nacos-discovery。配置服務(wù)器也是如此;您還需要在bootstrap.yml文件中設(shè)置Nacos服務(wù)器的地址。

spring: application:   name: employee-service cloud: nacos:  discovery:    server-addr: localhost:8848

 最后一步是通過使用@EnableDiscoveryClient注釋主類來為應(yīng)用程序啟用發(fā)現(xiàn)客戶端。

@SpringBootApplication@EnableDiscoveryClient@EnableSwagger2public class EmployeeApplication {public static void main(String[] args) {SpringApplication.run(EmployeeApplication.class, args);}}

 如果您為所有的微服務(wù)提供相同的實(shí)現(xiàn)并運(yùn)行它們,您將在Nacos Web控制臺中看到以下已注冊的應(yīng)用程序列表。 

5.  服務(wù)間的通信

微服務(wù)之間的通信是使用標(biāo)準(zhǔn)Spring Cloud組件實(shí)現(xiàn):RestTemplate或OpenFeign客戶端。

默認(rèn)情況下,負(fù)載平衡由Ribbon客戶端實(shí)現(xiàn)。與Spring Cloud Netflix相比,唯一的區(qū)別之前的服務(wù)注冊中心使用的是 SpringCloud Netflix。下面是負(fù)責(zé)與employee service公開的端點(diǎn)GET/department/{departmentId} 通信的 FeignClient 客戶端在部門服務(wù)中集成的實(shí)現(xiàn)。

@FeignClient(name = "employee-service")public interface EmployeeClient {@GetMapping("/department/{departmentId}")List < Employee > findByDepartment(@PathVariable("departmentId") Long departmentId);}

不要忘記為Spring Boot應(yīng)用程序啟用Feign客戶端。

@SpringBootApplication@EnableDiscoveryClient@EnableFeignClients@EnableSwagger2public class DepartmentApplication {public static void main(String[] args) {SpringApplication.run(DepartmentApplication.class, args);}}

我們還應(yīng)該運(yùn)行多個employee-service實(shí)例,以便在客戶端測試負(fù)載均衡。在此之前,我們可以通過在Nacos上存儲的配置中將屬性server.port設(shè)置為0,來啟用端口號的動態(tài)生成。

現(xiàn)在,我們可以使用相同的配置設(shè)置運(yùn)行單個服務(wù)的許多實(shí)例,而不必?fù)?dān)心單個微服務(wù)的端口號沖突。讓我們擴(kuò)大employee-service實(shí)例的數(shù)量。

微服務(wù)Spring Cloud Alibaba之我見

如果希望測試服務(wù)間通信,可以調(diào)用以下方法,這些方法使用OpenFeign客戶端調(diào)用其他微服務(wù)公開的端點(diǎn):GET /organization/{organizationId}/with-employees from department-service, and GET /{id}/with-departmentsGET /{id}/with-departments-and-employeesGET /{id}/with-employees from organization-service.

6. 運(yùn)行API網(wǎng)關(guān)

現(xiàn)在是運(yùn)行體系結(jié)構(gòu)中最后一個組件——API網(wǎng)關(guān)。它建在Spring Cloud Netflix Zuul之上,同樣使用Nacos作為發(fā)現(xiàn)和配置服務(wù)器。

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-zuul</artifactId></dependency>

 在包括所需的依賴項(xiàng)之后,我們需要為應(yīng)用程序啟用Zuul代理和發(fā)現(xiàn)客戶端。

@SpringBootApplication@EnableDiscoveryClient@EnableZuulProxy@EnableSwagger2public class ProxyApplication {public static void main(String[] args) {SpringApplication.run(ProxyApplication.class, args);}}

以下是為我們的三個示例微服務(wù)定義的Zuul路由的配置:  

zuul:  routes:  department:    path: /department/**  serviceId: department-serviceemployee:  path: /employee/**  serviceId: employee-serviceorganization:  path: /organization/**  serviceId: organization-service

在運(yùn)行網(wǎng)關(guān)之后,它為所有定義的微服務(wù)公開的API公開了Swagger2規(guī)范。假設(shè)您已經(jīng)在端口8080上運(yùn)行了它,那么您可以在地址http://localhost:8080/swagger-ui.html下訪問它。由于這個原因,您可以從一個單獨(dú)的位置調(diào)用方法。

7. 結(jié)論

示例應(yīng)用程序的源代碼可以在GitHub上通過阿里巴巴分支中的sample-spring-microservices-new獲得。

本文的主要目的是展示如何使用用于服務(wù)發(fā)現(xiàn)和配置管理的AlibabaNacos替換一些流行的SpringCloud組件。

SpringCloud Alibaba項(xiàng)目處于開發(fā)的早期階段,所以我們可能在不久的將來期待一些新的有趣的特性。您也可以在此處Spring Cloud Alibaba GitHub站點(diǎn)上找到其他一些示例。

當(dāng)前名稱:微服務(wù)SpringCloudAlibaba之我見-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://jinyejixie.com/article4/csdcie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管Google、網(wǎng)站策劃響應(yīng)式網(wǎng)站、搜索引擎優(yōu)化網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
庆城县| 泰来县| 礼泉县| 三明市| 河西区| 苗栗县| 疏勒县| 海南省| 海南省| 五原县| 洛川县| 阿坝县| 鄂尔多斯市| 历史| 富民县| 岑巩县| 岳阳县| 长岭县| 区。| 大庆市| 扶风县| 怀安县| 治县。| 遵义市| 福海县| 闽清县| 南丰县| 西平县| 洛阳市| 千阳县| 施秉县| 灌阳县| 韶关市| 万盛区| 商河县| 横峰县| 兰西县| 涟水县| 延庆县| 陇南市| 嘉禾县|