国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

詳解Java Chassis 3與Spring Cloud的互操作

這篇具有很好參考價(jià)值的文章主要介紹了詳解Java Chassis 3與Spring Cloud的互操作。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

本文分享自華為云社區(qū)《Java Chassis 3技術(shù)解密:與Spring Cloud的互操作》,作者: liubao68。

Java Chassis 3一個(gè)很重要的設(shè)計(jì)原則:利用架構(gòu)的韌性設(shè)計(jì)來解決兼容性問題。

比如通過引入微服務(wù)網(wǎng)關(guān),來解決不同語(yǔ)言、不同框架、遺留系統(tǒng)之間的互操作問題。 本文在這個(gè)架構(gòu)原則基礎(chǔ)上,討論一個(gè)更加細(xì)粒度的互操作問題,并借此解密Java Chassis3在運(yùn)行時(shí)設(shè)計(jì)依賴上的技術(shù)細(xì)節(jié)。

首先,我們描述一個(gè)互操作的場(chǎng)景和假設(shè)。

  • Spring Cloud和Java Chassis應(yīng)用同時(shí)注冊(cè)到注冊(cè)中心。引入了Spring Cloud Gateway作為網(wǎng)關(guān),網(wǎng)關(guān)也注冊(cè)到注冊(cè)中心。
  • Spring Cloud微服務(wù)和Java Chassis微服務(wù)相互調(diào)用。它們彼此作為消費(fèi)者的時(shí)候,不需要感知對(duì)方是不同的框架,做到透明調(diào)用。

從技術(shù)原理上梳理下上述互操作需要滿足的條件:

  • Spring Cloud和Java Chassis需要有相互認(rèn)識(shí)的注冊(cè)信息。核心包括:應(yīng)用名稱、服務(wù)名稱、地址信息和格式等。 需要的共同注冊(cè)中心越少,越容易對(duì)注冊(cè)中心和客戶端進(jìn)行選型。 在本例子中,我們選擇?Service Center?或者?Nacos?作為注冊(cè)中心,并選擇Spring Cloud Huawei實(shí)現(xiàn)Spring Cloud注冊(cè)。
  • Spring Cloud訪問Java Chassis,只需要一個(gè)地址信息,依賴較少。 Java Chassis訪問Spring Cloud,需要知道Spring Cloud應(yīng)用提供的契約信息。

Java Chassis區(qū)別于Spring Cloud的REST調(diào)用的部分,就是契約依賴。 Spring Cloud通過FeignClient來聲明客戶端契約,客戶端都需要在FeignClient中重復(fù)書寫REST標(biāo)簽;Java Chassis有兩種模式發(fā)現(xiàn)契約:從注冊(cè)中心發(fā)現(xiàn)和從Provider實(shí)例發(fā)現(xiàn)。 Java Chassis3默認(rèn)采用從Provider實(shí)例發(fā)現(xiàn), Java Chassis2采用從注冊(cè)中心發(fā)現(xiàn)。 從Provider發(fā)現(xiàn)的好處是可以降低對(duì)于注冊(cè)中心元數(shù)據(jù)管理能力的要求,本例既可以采用?Service Center?作為注冊(cè)中心,也可以選擇?Nacos?作為注冊(cè)中心。

從Provider發(fā)現(xiàn),要求Provider實(shí)現(xiàn)如下接口:

/**
 * Java Chassis internal management apis.
 */
@Path("/scb/management")
public interface ManagementEndpoint {
  String NAME = "scb-management";

  /**
   * Health of this instance. If the instanceId match this instance, and this service is ready
   * to service return true. Otherwise, return false.
   *
   * This api is for internal instance status usage. Load balancer will call this api to check if
   * the target instance is alive.
   */
  @GET
  @Path("/health")
  boolean health(@QueryParam("instanceId") String instanceId, @QueryParam("registryName") String registryName);

  /**
   * Schemas of this instance.
   *
   * This api is for internal schema loading usage.
   */
  @POST
  @Path("/schema/contents")
  Map<String, String> schemaContents();
}

它包含一個(gè)健康檢查接口和一個(gè)查詢契約的接口。 當(dāng)Spring Cloud應(yīng)用實(shí)現(xiàn)上述接口以后,它就具備了Java Chassis微服務(wù)需要的基礎(chǔ)特征,這樣Java Chassis就可以像訪問本框架的微服務(wù)一樣訪問Spring Cloud框架開發(fā)的微服務(wù)應(yīng)用。 為了簡(jiǎn)化,在Spring Cloud簡(jiǎn)單實(shí)現(xiàn)了該接口,該實(shí)現(xiàn)接口從?export?目錄加載契約信息,只需要將Spring Cloud需要對(duì)外暴露的 REST 接口的符合 Open API 3.0規(guī)范的契約文件放到這個(gè)目錄下面 。

@RestController
@RequestMapping(("/scb/management"))
public class JavaChassisManagementEndpoint {
  private static final Logger LOGGER = LoggerFactory.getLogger(JavaChassisManagementEndpoint.class);

  @Autowired
  private Registration registration;

  @GetMapping(path = "/health")
  public boolean health(@RequestParam("instanceId") String instanceId,
      @RequestParam("registryName") String registryName) {
    return "sc-registry".equals(registryName) && registration.getInstanceId().equals(instanceId);
  }

  @PostMapping(path = "/schema/contents")
  public Map<String, String> schemaContents() {
    try {
      List<URI> resourceUris = ResourceUtil.findResourcesBySuffix("export", ".yaml");
      Map<String, String> result = new HashMap<>(resourceUris.size());
      for (URI uri : resourceUris) {
        String path = uri.toURL().getPath();
        String[] segments = path.split("/");
        if (segments.length < 2 || !"export".equals(segments[segments.length - 2])) {
          continue;
        }
        result.put(segments[segments.length - 1].substring(0, segments[segments.length - 1].indexOf(".yaml")),
            IOUtils.toString(uri, StandardCharsets.UTF_8));
      }
      return result;
    } catch (IOException | URISyntaxException e) {
      LOGGER.error("Load schema ids failed from microservices. {}.", e.getMessage());
      return Collections.emptyMap();
    }
  }
}

Java Chassis與Spring Cloud互操作的例子放到了ServiceComb Samples?, 這個(gè)例子也提供了使用 Nacos 作為注冊(cè)中心和配置中心的實(shí)現(xiàn), 只需要將 Profile 設(shè)置為 Nacos 即可。

客戶故事:在架構(gòu)選型變化的時(shí)候,解決功能遷移和兼容性問題是最大的挑戰(zhàn)。一些客戶將Spring Cloud應(yīng)用改造為Java Chassis的過程中,發(fā)現(xiàn)一些功能不支持,比如SseEmitter、WebSocket等。 如果選擇支持這些能力,Java Chassis需要實(shí)現(xiàn)很多Servlet能力,這些能力規(guī)劃會(huì)和微服務(wù)技術(shù)架構(gòu)存在沖突。 對(duì)于這些場(chǎng)景,我們選擇通過架構(gòu)韌性來保留這些功能,比如將提供SseEmitter、WebSocket功能的獨(dú)立出微服務(wù),采用Spring Boot開發(fā),這些應(yīng)用可以通過調(diào)用Java Chassis微服務(wù)的REST接口來實(shí)現(xiàn)其特殊功能。通過這種架構(gòu)韌性的理念,降低了技術(shù)持續(xù)演進(jìn)的包袱,為敏捷迭代,持續(xù)創(chuàng)新奠定了方向,減少了兼容性問題的爭(zhēng)論。

?文章來源地址http://www.zghlxwxcb.cn/news/detail-846447.html

點(diǎn)擊關(guān)注,第一時(shí)間了解華為云新鮮技術(shù)~

?

到了這里,關(guān)于詳解Java Chassis 3與Spring Cloud的互操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring Cloud詳解

    Spring Cloud詳解

    Spring Cloud 組件: Spring Cloud Netflix Eureka(服務(wù)注冊(cè)中心),Consul、Zookeeper Spring Cloud Netflix Ribbon(負(fù)載均衡) Spring Cloud Netflix Hystrix(斷路器、熔斷器:服務(wù)降級(jí)、緩存、異常處理、請(qǐng)求合并) Spring Cloud OpenFeign(聲明式服務(wù)調(diào)用) Spring Cloud Netflix Zuul(服務(wù)網(wǎng)關(guān)) Spring Cloud G

    2024年02月05日
    瀏覽(10)
  • 詳解Spring Cloud版本問題

    詳解Spring Cloud版本問題

    目錄 1.讓人頭疼的多版本號(hào)體系 2.目錄關(guān)系 3.為什么會(huì)有多個(gè)版本號(hào)體系 由于歷史原因,spring cloud分為了Alibaba和Netflix兩個(gè)體系。 想要了解原因以及整個(gè)spring cloud體系的來龍去脈的同學(xué)可以去看我的另一篇文章: SpringCloud概論__BugMan的博客-CSDN博客 知道以上前情后,我們來看

    2024年02月08日
    瀏覽(16)
  • Spring Cloud Kubernetes詳解

    目錄 一、 為什么你需要 Spring Cloud Kubernetes? 二、 Starter 三、 用于 Kubernetes 的 DiscoveryClient 四、Kubernetes 原生服務(wù)發(fā)現(xiàn)(service discovery) 五、Kubernetes PropertySource 的實(shí)現(xiàn) 1、使用 ConfigMap PropertySource Spring Cloud Kubernetes提供了眾所周知的Spring Cloud接口的實(shí)現(xiàn),允許開發(fā)者在Kubernet

    2024年02月08日
    瀏覽(10)
  • Spring Cloud Nacos詳解

    Spring Cloud Nacos詳解

    Spring Cloud Nacos 是一個(gè)由阿里巴巴集團(tuán)開發(fā)的開源分布式系統(tǒng)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理的平臺(tái)。Nacos 支持多種服務(wù)發(fā)現(xiàn)方式,包括 DNS 方式、HTTP 和 RPC 方式,同時(shí)提供了靈活的配置管理功能,支持配置的推送和拉取。Nacos 可以幫助開發(fā)者輕松地構(gòu)建和管理云原生應(yīng)用,提

    2024年02月11日
    瀏覽(15)
  • 微服務(wù)Spring Cloud架構(gòu)詳解

    微服務(wù)Spring Cloud架構(gòu)詳解

    \\\"Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智能路由,微代理,控制總線)。分布式系統(tǒng)的協(xié)調(diào)導(dǎo)致了樣板模式, 使用Spring Cloud開發(fā)人員可以快速地支持實(shí)現(xiàn)這些模式的服務(wù)和應(yīng)用程序。他們將在任何分布式環(huán)

    2024年01月23日
    瀏覽(104)
  • Spring cloud Gateway 配置詳解

    斷言(Predicate):參照 Java8 的新特性Predicate,允許開發(fā)人員匹配 HTTP 請(qǐng)求中的任何內(nèi)容,比如請(qǐng)求頭或請(qǐng)求參數(shù),最后根據(jù)匹配結(jié)果返回一個(gè)布爾值。 路由(route):由ID、目標(biāo)URI、斷言集合和過濾器集合組成。如果聚合斷言結(jié)果為真,則轉(zhuǎn)發(fā)到該路由。 過濾器(filter):可

    2024年02月09日
    瀏覽(25)
  • Spring Cloud 之 Gateway詳解

    大家好,我是升仔 前言 在微服務(wù)架構(gòu)中,網(wǎng)關(guān)扮演著至關(guān)重要的角色。它不僅是服務(wù)與外界交流的門戶,還負(fù)責(zé)路由、過濾和安全等重要功能。Spring Cloud Gateway作為Zuul的繼任者,憑借其更高的性能和靈活的配置方式,成為了現(xiàn)代微服務(wù)架構(gòu)的首選網(wǎng)關(guān)解決方案。在本文中,

    2024年02月20日
    瀏覽(16)
  • 【Spring Cloud系列】Hystrix應(yīng)用詳解

    【Spring Cloud系列】Hystrix應(yīng)用詳解

    在一個(gè)分布式系統(tǒng)中,每個(gè)服務(wù)都可能會(huì)調(diào)用其它的服務(wù)器,服務(wù)之間是相互調(diào)用相互依賴。假如微服務(wù)A調(diào)用微服務(wù)B和微服務(wù)C,微服務(wù)B和微服務(wù)C又調(diào)用其他的微服務(wù)。這就是構(gòu)成所謂“扇出”。 如果扇出的鏈路上某個(gè)微服務(wù)的調(diào)用響應(yīng)的時(shí)間過長(zhǎng)或者不可用,對(duì)微服A的調(diào)

    2024年02月16日
    瀏覽(23)
  • 【Spring Cloud系列】- Eureka使用詳解

    【Spring Cloud系列】- Eureka使用詳解

    Eureka2.0版本已經(jīng)停止維護(hù),為什么要寫這篇博客重復(fù)已停止更新的中間件,其目的主要是: 認(rèn)識(shí)微服務(wù)注冊(cè)中心:雖然Eureka已經(jīng)停止維護(hù),但微服務(wù)架構(gòu)在當(dāng)今非常流程,學(xué)習(xí)Eureka可以更好的理解微服務(wù)。 便于老舊系統(tǒng)維護(hù):如果使用微服務(wù),公司一定會(huì)存在使用Eureka服務(wù)

    2024年02月09日
    瀏覽(94)
  • 【Spring Cloud系列】- RestTemplate使用詳解

    RestTemplate是Spring框架提供用于調(diào)用Rest接口的一個(gè)應(yīng)用,它簡(jiǎn)化了與http服務(wù)通信方式。RestTemplate統(tǒng)一Restfull調(diào)用的標(biāo)準(zhǔn),封裝HTTP鏈接,只要需提供URL及返回值類型即可完成調(diào)用。相比傳統(tǒng)的HttpClient與Okhttp,RestTemplate是一種優(yōu)雅,簡(jiǎn)潔調(diào)用RESTfull服務(wù)的方式。 RestTemplate默認(rèn)依賴

    2024年02月08日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包