成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SpringCloud之Netfix微服務應用框架詳解

開發 架構
當服務出現異常情況時,服務本身可以觸發熔斷,直接返回統一的錯誤;另外一個是消費方,這種情況下熔斷有了另外一個名詞,也叫降級,一般是服務方不能正常提供服務,比如訪問超時,或者主動斷開服務的情況下,消費方做出的反應,這種壓根就不會向服務提供方發起請求。

SpringCloud是目前微服務轉型的首選,主要得益于其活躍的社區支持度以及全量的配套組件,本章筆者將會把SpringCloud Netfix的幾個核心組件組合起來,和老鐵們一起逐步完成全套的應用框架搭建,這樣有需要的老鐵們在項目中就可以直接使用啦。

在SpringCloud Netfix中,核心的組件包括:注冊中心(Eureka)、負載均衡(Ribbon)、服務調用(Feign)、熔斷及降級(Hystrix)、網關(Gateway)、配置中心(Config)、鏈路追蹤(Sleuth)等幾大組件。我們都知道SpringCloud是基于SpringBoot整出來的微服務框架,換言之在開發SpringCloud微服務的時候,咱就少不了要使用SpringBoot,所以這里的整合SpringCloud也就遵循了SpringBoot的某種整合的規范,比如對于依賴的引用就遵守:spring-cloud-starter-xxx這種規范,這里的xxx值得就是咱們使用的組件,比如如果咱們需要整合Ribbon,那它的依賴名稱就是spring-cloud-starter-netflix-ribbon。

首先筆者將應用的整體情況做如下介紹:

1.應用的整體架構圖:

2.使用的SpringCloud的版本是Hoxton.SR9,老鐵們可以根據自己需要選擇版本。

3.微服務的代碼層級關系

其中parent為所有模塊的父依賴,主要管理公共依賴;common是各個模塊都需要用到的一些通用類;springcloud-demo-eureka-service則是eureka注冊中心以及配置中心;global-gateway是網關;order-demo和product-demo是具體的服務。

4.JDK版本筆者用的是JDK1.8。

5.需要提前下載zipkin服務,下載地址大家到網上搜,下載后執行:java -jar zipkin.jar啟動即可,然后訪問:http://localhost:9411/zipkin/看看能否正常訪問,正常情況下訪問顯示如下:

6.登錄到github上,創建一個服務,比如筆者這里創建了springcloud-demo-config的服務,用于存放配置文件。

7.啟動順序:注冊中心和配置中心->服務提供者->消費者->網關。

接下來就看每個模塊的代碼了:

1.parent

parent的主要作用是管理公共的依賴,核心就是一個pom.xml文件,需要注意的是,它的parent是spring-boot-starter-parent:

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.6.RELEASE</version>
</parent>
<groupId>my.springcloud.demo</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>

<properties>
<java.version>8</java.version>
<spring-cloud.version>Hoxton.SR9</spring-cloud.version>
</properties>

<modules>
<module>product-demo</module>
<module>springcloud-demo-eureka-service</module>
<module>order-demo</module>
<module>springcloud-demo-eureka-service2</module>
<module>common</module>
<module>global-gateway</module>
</modules>

<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>
<dependency>
<groupId>my.springcloud.demo</groupId>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</dependencyManagement>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

2.eureka+config

該模塊主要是注冊中心和配置中心。

2.1.依賴

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!--config server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>

它主要的兩個依賴是spring-cloud-config-server和spring-cloud-starter-netflix-eureka-server。

2.2.配置文件

它的配置文件application.properties如下:

server.port=8761
spring.application.name=springcloud-demo-eureka-service
#最好取個名字,方便區分
eureka.instance.instance-id=springclouddemo1.com

#false不注冊自己,當然也可以設置為true,注冊自己
eureka.client.register-with-eureka=false

#config服務使用git存儲數據,這里配置git倉庫的地址
spring.cloud.config.server.git.uri=https://github.com/xxxx/springcloud-demo-config.git
spring.cloud.config.server.git.username=xxxxxx@126.com
spring.cloud.config.server.git.password=xxxxxxxx
#指定倉庫分支
spring.cloud.config.server.git.default-label=master

eureka.instance.prefer-ip-address=true

2.3.啟動類注解

在啟動類上增加三個注解:@EnableEurekaServer @SpringBootApplication @EnableConfigServer。

3.gateway

網關作為作為應用的入口,它的主要作用就是請求轉發、統一驗證、路由、限流等,這里我們通過網關向后臺應用轉發。作為訪問的入口,網關同時也應該是調用鏈路的發起者。

3.1.依賴

<!--服務發現eureka client依賴-->
<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-gateway</artifactId>
</dependency>
<!--調用鏈路依賴-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

<!--config client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>

3.2.在配置文件bootstrap.yml中指定配置服務

spring:
application:
name: global-gateway
cloud:
config:
uri: http://localhost:8761
label: master

3.3.遠程倉庫配置文件

這里我們使用的是配置中心的遠程配置,所以在git倉庫的springcloud-demo-config.git應用下,添加gateway的配置文件:global-gateway-${active}.properties,指定注冊中心、zipkin的地址,同時配置網關自動發現,內容如下:

spring.application.name=global-gateway
server.port=9006

eureka.client.fetch-registry=true
eureka.client.register-with-eureka=true
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

#配置網關自動發現
spring.cloud.gateway.discovery.locator.enabled=true

spring.zipkin.base-url=http://localhost:9411/
spring.sleuth.sampler.probability=1

3.4.啟動類注解

然后在啟動類上添加如下注解:

@SpringBootApplication
@EnableDiscoveryClient

通過網關訪問時通過指定服務名和服務URL,如:

??http://localhost:9006/ORDER-DEMO/order/getOrder?id=1??

4.商品服務

作為具體的服務提供者,它需要往注冊中心注冊服務;

同時需要從配置中心讀取配置文件,也就是作為配置服務的客戶端;

上報調用鏈路數據;

4.1.依賴

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!--熔斷-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

<!--調用鏈路依賴-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

<!--config client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>

4.2.在配置文件bootstrap.yml中指定配置服務

spring:
application:
name: product-demo
cloud:
config:
uri: http://localhost:8761
label: master

4.3.遠程倉庫配置文件

這里我們使用的是配置中心的遠程配置,所以在git倉庫的springcloud-demo-config.git應用下,添加商品服務的配置文件:product-demo-${active}.properties

spring.application.name=product-demo
eureka.instance.instance-id=productdemo
eureka.instance.hostname=localhost
server.port=8080

eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

management.endpoint.info.enabled=true

management.endpoints.web.exposure.include=*
management.endpoint.health.enabled=true

management.endpoint.health.show-details=always
management.endpoint.shutdown.enabled = true
info.app.name=productDemo
info.company.name=test
info.test.tt=this is product

spring.zipkin.base-url=http://localhost:9411/

spring.sleuth.sampler.probability=1

4.4.啟動類注解

如果需要開啟熔斷,則需要在啟動類上增加注解:SpringBootApplication和EnableCircuitBreaker

5.訂單服務

同商品服務類似,但是它需要消費商品服務,作為服務的消費者,它需要往注冊中心注冊服務,同時需要從注冊中心同步服務信息;

同時需要從配置中心讀取配置文件,也就是作為配置服務的客戶端;

上報調用鏈路數據;

5.1.依賴

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<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.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

<!--熔斷依賴-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

<!--調用鏈路依賴-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

<!--config client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>

5.2.在配置文件bootstrap.yml中指定配置服務

spring:
application:
name: order-demo
cloud:
config:
uri: http://localhost:8761
label: master

5.3.遠程倉庫配置文件

這里我們使用的是配置中心的遠程配置,所以在git倉庫的springcloud-demo-config.git應用下,添加商品服務的配置文件:product-demo-${active}.properties

spring.application.name=order-demo
server.port=8081

eureka.instance.hostname=localhost

eureka.instance.instance-id=orderdemo
management.endpoint.info.enabled=true

eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=5000

#zipkin
spring.zipkin.base-url=http://localhost:9411/

spring.sleuth.sampler.probability=1

5.4.啟動類注解

如果需要開啟熔斷,則需要在啟動類上增加注解:

@SpringBootApplication
@EnableHystrix

如果微服務調用使用Feign,則還需要增加@EnableFeignClients注解,并且添加接口,同時在接口上添加FeignClient注解,如筆者這里將調用PRODUCT-DEMO服務:

@FeignClient("PRODUCT-DEMO")
public interface ProductFeignService {
@RequestMapping("/product/getProduct")
public Product getProduct(@RequestParam(value="id") Integer id);
}

當然如果是想使用Ribbon調用,則需要在配置類中增加如下代碼:

@Bean
@LoadBalanced
public RestTemplate createRestTemplate(){
return new RestTemplate();
}

使用時,直接通過如下注解方式直接注入即可使用:

@Autowired
private RestTemplate restTemplate;

然后編寫其他代碼,完成服務之間的調用,這里筆者想對熔斷的使用啰嗦兩句,發送熔斷的地方有兩個地方:一個是服務提供方,當服務出現異常情況時,服務本身可以觸發熔斷,直接返回統一的錯誤;另外一個是消費方,這種情況下熔斷有了另外一個名詞,也叫降級,一般是服務方不能正常提供服務,比如訪問超時,或者主動斷開服務的情況下,消費方做出的反應,這種壓根就不會向服務提供方發起請求。

所有代碼完成后,以此啟動,然后通過網關訪問,然后登錄http://localhost:9411/,可以查看整體的調用依賴和調用鏈路信息,至此整體搭建完成。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2023-01-12 08:00:00

SpringClou微服務框架

2021-03-09 09:33:42

網關授權微服務

2021-05-14 09:15:32

SpringCloud微服務日志

2021-01-28 10:10:51

微服務后端SpringCloud

2020-06-04 09:24:26

微服務數據框架

2022-10-08 07:31:26

微服務編排體系

2021-08-02 09:27:02

微服務接口場景

2024-07-02 10:58:53

2015-01-04 09:30:32

云計算Docker容器技術

2021-04-22 09:31:58

服務器微服務配置

2021-05-31 11:22:24

微服務開發框架

2022-04-09 14:45:02

微服務常見概念Spring

2024-03-18 08:48:52

Spring多端認證微服務

2023-03-13 08:02:55

斷路器應用API

2020-11-27 10:50:06

微服務架構框架

2021-03-02 16:25:52

微服務架構技術

2023-02-17 18:06:33

微服務架構

2020-08-14 09:27:50

微服務容器架構

2021-07-13 10:00:00

微服務SleuthElasticSear

2018-08-01 14:20:11

微服務架構人工智能
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩亚洲视频 | 久久精品一区 | 日韩一区二区三区视频 | 国产一区2区 | 精品国产99 | 久久久精品视频一区二区三区 | 国产毛片久久久久久久久春天 | 成人在线免费观看 | 久久综合一区二区 | 在线视频亚洲 | 久久国产精品无码网站 | av一区二区在线观看 | 国产福利视频 | 色网站在线 | 久久成人免费视频 | 久久成人综合 | 精品国产乱码久久久久久88av | 亚洲入口 | 美女在线观看av | 亚洲一区 中文字幕 | 一级黄色毛片免费 | 国产精品久久久久久久久久久免费看 | 综合久久综合久久 | 中文字幕不卡在线观看 | 天堂成人国产精品一区 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 日韩一区二区三区在线视频 | 欧美亚洲视频 | 亚洲精品国产成人 | 午夜视频精品 | 久久这里只有精品首页 | 成人性生交大片免费看r链接 | 国产精品一区二区三区在线播放 | 久久精品99国产精品 | 国色天香综合网 | 日韩在线第一 | 亚洲日韩中文字幕一区 | 亚洲精品成人av久久 | 亚洲 精品 综合 精品 自拍 | 五月花丁香婷婷 | 欧美三级三级三级爽爽爽 |