文章出處

微服務里一個重要的概念就是服務注冊與發現技術,當你有一個新的服務運行后,我們的服務中心可以感知你,然后把加添加到服務列表里,然后當你死掉后,會從服務中心把你移除,而你作為一個服務,對其它服務公開的只是服務名稱,而不是最終的服務地址URL,這對于云平臺,容器化架構來說是非常重要的!

  1. 安裝單獨的Eureka服務(server)
  2. 服務注冊-aspnetcore建立Eureka客戶端(client)
  3. 服務發現-實現服務與服務的調用

一 安裝單獨的Eureka服務

  1. 安裝tomcat,到apache官網http://tomcat.apache.org下載tomcat
  2. 下載Eureka,可以到http://mvnrepository.com/artifact/com.netflix.eureka/eureka-server選擇一下版本下載
  3. 配置端口,默認是8080,tomcat\webapps\eureka\WEB-INF\classes\eureka-client.properties
  4. 重啟tomcat服務即可

二 aspnetcore建立Eureka客戶端(client)

  1. nuget添加包包Pivotal.Discovery.Client
  2. 在startup.cs里添加客戶端的自動發現代碼(相對于eureka是客戶端,事實上它是微服務里的一種服務)
  3. program里添加對某個端口的監聽
  4. 將EurekaServer的地址添加到appsettings里
  5. 啟動項目,然后去服務中心查看自己的新服務

在startup.cs里

 

       public void ConfigureServices(IServiceCollection services)
        {
            services.AddDiscoveryClient(Configuration);
            services.AddMvc();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseMvc();
            app.UseDiscoveryClient();
        }

 

program里添加對某個端口的監聽

 public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .UseUrls("http://*:8010")
                .Build();

將EurekaServer的地址添加到appsettings里,其中8010是自己監聽的端口,Order是自己的名稱

 "spring": {
    "application": {
      "name": "Order"
    }
  },
  "eureka": {
    "client": {
      "serviceUrl": "http://localhost:8080/eureka/V2/",
      "shouldFetchRegistry": false,
      "shouldRegisterWithEureka": true
    },
    "instance": {
      "port": 8010
    }

然后啟動項目,在你的服務中心就可以看到新加的服務了(http://localhost:8080/eureka/),這就是服務的注冊!

三 服務發現-實現服務與服務的調用

我們在某個微服務的項目里,可以調用其它的服務,這類似于一種請求鏈的過程,以后我們講spring cloud里會說其它相關的技術

       [HttpGet]
        public IEnumerable<string> Get()
        {
            DiscoveryClient _discoveryClient = new DiscoveryClient(new EurekaClientConfig
            {
                EurekaServerServiceUrls = "http://localhost:8080/eureka/V2/",
                ProxyHost = "http://localhost:8080/eureka/V2/",
                ProxyPort = 8080,

            });
            //得到服務中心所有服務和它的Url地址
            foreach (var item in _discoveryClient.Applications.GetRegisteredApplications())
                yield return $"{item.Name}={item.Instances.FirstOrDefault().HomePageUrl}";
        }

頁面顯示的結果中我們看到了所有的服務,它的名稱和它的URL,這種URL在容器化部署里是動態的,所以我們不能像原來那樣,把它寫死了,這也就是服務發現產生的原因!

好了,今天對于服務注冊與服務發現就說到這里,都是比較實干的東西!

感謝各位閱讀!

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()