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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

简单spring cloud服务升级实现

發(fā)布時間:2023/12/18 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简单spring cloud服务升级实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、升級原則

  • 隔離性:v1升級到v2時,相互獨立,互不不干擾。
  • 穩(wěn)定性:服務(wù)不停止,完成升級。接口保持暢通。

2、具體實現(xiàn)

2.1 eureka項目

搭建eureka,網(wǎng)上很多,就省略了。

2.2 feign接口項目

2.2.1 依賴

<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><parent><groupId>com.spring.cloud.pro</groupId><artifactId>com.spring.cloud.pro</artifactId><version>1.0.0.RELEASE</version></parent><artifactId>com.spring.cloud.pro.facade</artifactId><description>接口</description><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency></dependencies> </project>

2.2.2 接口定義

import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam;import com.spring.pro.model.User;/** * @Title: UserFacade.java * @ProjectName com.spring.cloud.pro.facade* @Description: * @author ybwei * @date 2019年1月11日 下午4:18:09 */ @FeignClient("eureka-provider${version}") //name等于服務(wù)提供者的spring.application.name public interface UserFacade {/** * @Description: * @Param: @param id* @Param: @return* @Param: @throws Exception* @return: User* @Author: ybwei* @Date: 2019年1月11日 下午4:20:59*/ @GetMapping("/getUser")public User getUser(@RequestParam("id") Integer id) throws Exception; } import lombok.Data;/** * @Title: User.java * @ProjectName com.spring.cloud.pro.facade* @Description: * @author ybwei * @date 2019年1月11日 下午4:18:49 */ @Data public class User {private Integer id;private String name;private Integer age;}

2.3 生產(chǎn)者

2.3.1 依賴

<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><parent><groupId>com.spring.cloud.pro</groupId><artifactId>com.spring.cloud.pro</artifactId><version>1.0.0.RELEASE</version></parent><artifactId>com.spring.cloud.provider</artifactId><version>1.0.1.RELEASE</version><description>服務(wù)提供者</description><dependencies><dependency><groupId>${project.parent.groupId}</groupId><artifactId>com.spring.cloud.pro.facade</artifactId><version>${project.parent.version}</version></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-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency></dependencies><build><finalName>${project.artifactId}</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build> </project>

2.3.2?application.yml配置

version: '@project.version@' #項目版本 server:port: 8083 spring:application:name: eureka-provider${version} eureka:client:service-url:defaultZone: http://localhost:8761/eureka hystrix:command:default:execution:timeout:enabled: false #hystrix禁止超時設(shè)置

2.3.3 代碼

package com.spring.pro.controller;import org.springframework.web.bind.annotation.RestController;import com.spring.pro.facade.UserFacade; import com.spring.pro.model.User;/** * @Title: UserController.java * @ProjectName com.spring.cloud.provider* @Description: * @author ybwei * @date 2019年1月11日 下午4:25:19 */ @RestController public class UserController implements UserFacade {@Overridepublic User getUser(Integer id) throws Exception {User user=new User();user.setId(id);user.setName("李四");user.setAge(21);return user;}}

2.4 消費者

2.4.1 依賴

<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><parent><groupId>com.spring.cloud.pro</groupId><artifactId>com.spring.cloud.pro</artifactId><version>1.0.0.RELEASE</version></parent><artifactId>com.spring.cloud.pro.consumer</artifactId><version>1.0.1.RELEASE</version><description>消費者</description><dependencies><dependency><groupId>${project.parent.groupId}</groupId><artifactId>com.spring.cloud.pro.facade</artifactId><version>${project.parent.version}</version></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-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency></dependencies><build><finalName>${project.artifactId}</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build> </project>

2.4.2?application.yml配置

version: '@project.version@' #項目版本 server:port: 8084 spring:application:name: eureka-consumer${version} eureka:client:service-url:defaultZone: http://localhost:8761/eureka feign: hystrix:enabled: true #啟用hystrix hystrix:command:default:execution:timeout:enabled: false #hystrix禁止超時設(shè)置

2.4.3 代碼

package com.spring.pro.controller;import javax.annotation.Resource;import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;import com.spring.pro.facade.UserFacade; import com.spring.pro.model.User;/*** @Title: UserController.java* @ProjectName com.spring.cloud.pro.consumer* @Description:* @author ybwei* @date 2019年1月11日 下午4:27:14*/ @RestController public class UserController {@Resourceprivate UserFacade userFacade;@GetMapping("/getUser")public User getUser(Integer id) throws Exception {return userFacade.getUser(id);} }

3、說明

3.1 核心邏輯

消費者調(diào)用的的生產(chǎn)者是spring.application.name+版本號。

3.2 升級過程

當(dāng)系統(tǒng)進(jìn)行從v1升級到v2:

  • 項目的生產(chǎn)者、消費者項目版本號升級。v1升為v2。項目的生產(chǎn)者、消費者項目版本號保持一致。
  • 生產(chǎn)者的50%升級到v2版本。如果全部升級,v1版本消費者都會失敗。
  • 消費者全部升級到v2版本。
  • 生產(chǎn)者全部升級到v2版本。
  • 注意:示例中生產(chǎn)者、消費者項目使用的pom.xml中的版本號,也可以使用常量(如1.0),只要保持兩者一致即可。

    3.3 適用場景

    • 接口v1版本與v2版本不兼容時,app強(qiáng)制更新,適用。
    • 接口v1版本與v2版本兼容,app不需要更新,適用。

    3.4 版本控制

    3.4.1 命名規(guī)范

    參考軟件版本命名規(guī)范

    3.4.2 注意

    多團(tuán)隊開發(fā)時,版本號盡量由一個人來控制,避免沖突。同一天上線,為統(tǒng)一版本號。不同時間上線為不同版本號。

    總結(jié)

    以上是生活随笔為你收集整理的简单spring cloud服务升级实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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