0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Eureka Client的創(chuàng)建案例

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-10-09 17:03 ? 次閱讀

在上篇中已經(jīng)講了 Eureka Server 的配置文件讀取。接下來講講 Eureka Client 的創(chuàng)建。每一個 eureka server 都是一個 eureka client,是用來和其他 eureka-server 節(jié)點注冊和通信的。

EurekaInstanceConfig & EurekaClientConfig

Instance 是實例的意思, EurekaInstanceConfig 就是 eureka client 的配置文件中的服務(wù)實例信息

EurekaInstanceConfig instanceConfig = isCloud(ConfigurationManager.getDeploymentContext())
                    ? new CloudInstanceConfig()
                    : new MyDataCenterInstanceConfig();

applicationInfoManager = new ApplicationInfoManager(
        instanceConfig, new EurekaConfigBasedInstanceInfoProvider(instanceConfig).get());

EurekaClientConfig eurekaClientConfig = new DefaultEurekaClientConfig();

EurekaInstanceConfig 就是將 eureka-client.properties 文件中的服務(wù)實例信息加載到 ConfigManager 中,然后基于 EurekaInstanceConfig 對外暴露接口,并且提供配置項的默認值。

圖片

ApplicationInfoManager,包含了服務(wù)實例的信息、配置,作為服務(wù)實例管理的一個組件,由 EurekaInstanceConfig 和 InstanceInfo 構(gòu)建完成,InstanceInfo 的創(chuàng)建是在 new EurekaConfigBasedInstanceInfoProvider(instanceConfig).get() 中,用了構(gòu)造器模式 LeaseInfo.Builder.newBuilder() 構(gòu)造了一個復(fù)雜的代表一個服務(wù)實例的 InstanceInfo 對象。核心思想就是在 EurekaInstanceConfig 中讀取各種實例相關(guān)的配置信息,再構(gòu)造了一些其他的對象,最終完成 InstanceInfo 對象的構(gòu)建。

public synchronized InstanceInfo get() {
    if (instanceInfo == null) {
        // Build the lease information to be passed to the server based on config
        LeaseInfo.Builder leaseInfoBuilder = LeaseInfo.Builder.newBuilder()
                .setRenewalIntervalInSecs(config.getLeaseRenewalIntervalInSeconds())
                .setDurationInSecs(config.getLeaseExpirationDurationInSeconds());

        if (vipAddressResolver == null) {
            vipAddressResolver = new Archaius1VipAddressResolver();
        }
        //代碼太長,省略其他代碼
    }
}

DefaultEurekaClientConfig 就是和 DefaultEurekaServerConfig 一樣,讀取 erueka-client.properties 配置文件的內(nèi)容。具體方法在 com.netflix.discovery.internal.util.initConfig() 中。最后都是交給 ConfigurationManager 管理。

EurekaInstanceConfig 和 EurekaClientConfig 雖然都是讀取的 erueka-client.propeties ,但是讀取的內(nèi)容是不一樣的。

EurekaInstanceConfig 接口

圖片EurekaClientConfig 接口

圖片

DiscoveryClient

DiscoveryClient 是創(chuàng)建 Erueka Client 的類,由 ApplicationInfoManager 和 EurekaClientConfig 組成。

eurekaClient = new DiscoveryClient(applicationInfoManager, eurekaClientConfig);

DiscoveryClient 代碼很長。

  1. appPathIdentifier,服務(wù)實例的標識符, appName,代表了一個服務(wù)名稱,但是一個服務(wù)可能部署多臺機器,每臺機器上部署的就是一個服務(wù)實例,如:serviceABC/001
appPathIdentifier = instanceInfo.getAppName() + "/" + instanceInfo.getId();
  1. 是否需要注冊到別的注冊中心。eurekaServer 有個配置:eureka.client.fetchRegistry,單機情況下為 false。false 表示自己就是注冊中心。職責就是維護服務(wù)實例,并不需要去檢索服務(wù)。
if (!config.shouldRegisterWithEureka() && !config.shouldFetchRegistry()) {}
  1. 支持調(diào)度的線程池。
scheduler = Executors.newScheduledThreadPool(2,
        new ThreadFactoryBuilder()
                .setNameFormat("DiscoveryClient-%d")
                .setDaemon(true)
                .build());
  1. 支持心跳的線程池。
heartbeatExecutor = new ThreadPoolExecutor(
            1, clientConfig.getHeartbeatExecutorThreadPoolSize(), 0, TimeUnit.SECONDS,
            new SynchronousQueue< Runnable >(),
            new ThreadFactoryBuilder()
                    .setNameFormat("DiscoveryClient-HeartbeatExecutor-%d")
                    .setDaemon(true)
                    .build()
    );
  1. 支持緩存刷新的線程池。
cacheRefreshExecutor = new ThreadPoolExecutor(
            1, clientConfig.getCacheRefreshExecutorThreadPoolSize(), 0, TimeUnit.SECONDS,
            new SynchronousQueue< Runnable >(),
            new ThreadFactoryBuilder()
                    .setNameFormat("DiscoveryClient-CacheRefreshExecutor-%d")
                    .setDaemon(true)
                    .build()
    );
  1. 支持底層的 eureka client 和 eureka server 進行通信的組件。
eurekaTransport = new EurekaTransport();
  1. 初始化調(diào)度任務(wù)。
initScheduledTasks();

總結(jié)

先創(chuàng)建了 EurekaInstanceConfig,基于 EurekaInstanceConfig 和 InstanceInfo 創(chuàng)建 ApplicationInfoManager,之后才創(chuàng)建 DiscoveryClient。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8357

    瀏覽量

    150517
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    555

    瀏覽量

    24636
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4695

    瀏覽量

    68080
  • eureka
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    1758
收藏 人收藏

    評論

    相關(guān)推薦

    請問while循環(huán)中是怎么調(diào)用tcp_client_senddata()和tcp_client_recv()發(fā)送接收數(shù)據(jù)的?

    在這個while循環(huán)中,是怎么調(diào)用tcp_client_senddata()和tcp_client_recv()發(fā)送接收數(shù)據(jù)的?是要等到創(chuàng)建一個新的pcb?while(res==0){ key
    發(fā)表于 06-28 02:29

    怎樣實現(xiàn)創(chuàng)建TCP Server后連接多個Client?

    版主你好,請問使用UCOS3+LWIP時,怎樣實現(xiàn)創(chuàng)建TCP Server后,連接多個Client,然后能在每個Client之間進行不同數(shù)據(jù)格式的收發(fā)?比如我有2個設(shè)備需要連接407,但是都只能通過一個網(wǎng)口,是否再開一個任務(wù)?謝
    發(fā)表于 09-26 00:51

    Symantec Client Security使用入門

    Symantec Client Security使用入門 Symantec Client Security 為工作站提供可調(diào)整、跨平臺的防火牆、入侵偵測,以及防毒保護,並為網(wǎng)路伺服器提供防毒保護。您可以建
    發(fā)表于 06-10 17:11 ?7次下載

    CLIENT99SE下載

    電子發(fā)燒友網(wǎng)站提供《CLIENT99SE下載.exe》資料免費下載
    發(fā)表于 10-30 13:10 ?225次下載

    CLient相關(guān)資料

    CLient,好東西,喜歡的朋友可以下載來學(xué)習(xí)。
    發(fā)表于 02-19 17:00 ?0次下載

    Eureka的集群搭建方法-保證高可用

    在微服務(wù)架構(gòu)中,注冊中心是一個必不可少的組件 前面我們搭建的注冊中心只適合本地開發(fā)使用,在生產(chǎn)環(huán)境必須搭建一個集群來保證高可用 Eureka的集群搭建很簡單,每一臺Eureka都需要在配置中指定另外N個Eureka的地址就可以。
    發(fā)表于 11-29 10:41 ?7515次閱讀
    <b class='flag-5'>Eureka</b>的集群搭建方法-保證高可用

    ApiBoot Logging整合Spring Cloud Eureka負載均衡上報日志

    ApiBoot Logging支持整合服務(wù)注冊中心(Eureka、Consul、Nacos Discovery、Zookeeper...)進行上報請求日志,Logging Client會從服務(wù)注...
    的頭像 發(fā)表于 12-10 22:08 ?371次閱讀

    eureka優(yōu)瑞家殺菌洗地機全球首發(fā),清潔更專業(yè)、健康、高效!

    擁有112年歷史的美國百年清潔品牌eureka優(yōu)瑞家2021年正式登錄中國市場,3月4日全球首發(fā)顛覆性新品——吸塵+拖地+除菌三合一的eureka優(yōu)瑞家殺菌洗地機。這款洗地機也是全球首家研發(fā)出的僅僅
    的頭像 發(fā)表于 03-05 12:10 ?1334次閱讀

    danmu-client彈幕客戶端

    ./oschina_soft/danmu-client.zip
    發(fā)表于 06-01 10:24 ?1次下載
    danmu-<b class='flag-5'>client</b>彈幕客戶端

    VB6 OPC Client文件分享

    VB6 OPC Client文件分享
    發(fā)表于 08-28 10:20 ?0次下載

    LabVIEW Actor Framwork:邊學(xué)邊做server和client

    現(xiàn)在要做一個類似聊天的demo,一個server端,若干個client端;首先是server啟動,通過server可以打開若干個client端,然后每個client可以獨立給server發(fā)送數(shù)據(jù)。server收到數(shù)據(jù)打印出來帶有
    的頭像 發(fā)表于 06-01 15:49 ?1340次閱讀
    LabVIEW Actor Framwork:邊學(xué)邊做server和<b class='flag-5'>client</b>

    Eureka Server面向接口的方式讀取配置文件

    eureka sersver 配置環(huán)境 在上一篇中已經(jīng)介紹了,spring boot 是調(diào)用 類的 方法啟動 Eureka Server 的。 public void
    的頭像 發(fā)表于 10-09 17:05 ?509次閱讀
    <b class='flag-5'>Eureka</b> Server面向接口的方式讀取配置文件

    Spring Boot啟動 Eureka流程

    在上篇中已經(jīng)說過了 Eureka-Server 本質(zhì)上是一個 web 應(yīng)用的項目,今天就來看看 Spring Boot 是怎么啟動 Eureka 的。 Spring Boot 啟動 Eureka
    的頭像 發(fā)表于 10-10 11:40 ?790次閱讀
    Spring Boot啟動 <b class='flag-5'>Eureka</b>流程

    Eureka!NVIDIA 研究突破為機器人學(xué)習(xí)注入新動力

    AI 智能體利用 LLM 自動生成獎勵算法,訓(xùn)練機器人完成復(fù)雜任務(wù)。 ? ? NVIDIA Research 開發(fā)的一款名為 Eureka 的新型 AI 智能體可以教機器人復(fù)雜的技能,它教會了機器人
    發(fā)表于 10-24 09:48 ?202次閱讀
    <b class='flag-5'>Eureka</b>!NVIDIA 研究突破為機器人學(xué)習(xí)注入新動力

    Eureka!NVIDIA 研究突破為機器人學(xué)習(xí)注入新動力

    AI 智能體利用 LLM 自動生成獎勵算法,訓(xùn)練機器人完成復(fù)雜任務(wù)。 NVIDIA Research 開發(fā)的一款名為 Eureka 的新型 AI 智能體可以教機器人復(fù)雜的技能,它教會了機器人手快速轉(zhuǎn)
    的頭像 發(fā)表于 10-25 15:55 ?220次閱讀
    <b class='flag-5'>Eureka</b>!NVIDIA 研究突破為機器人學(xué)習(xí)注入新動力