.net framework 4.5 +steeltoe+ springcloud(一) 實現服務注冊功能


首先得先了解並熟悉一下springcloud,並手動去搭建一個服務中心,也可參照 eurake官方示例
如果是.net core的話,實現注冊也是沒有問題的,網上教程很多,可自行度娘。
最難的就是基於Framework的項目怎么實現注冊,跟core的實現方式區別還是蠻大的,研究過程中也有不少坑。
下面就分享一下我踩完坑之后初步總結的實現步驟:
1.用VS2017或者其他創建NF4.5+的webAPI項目(webAPI的結構基本是保持MVC一致的,所以MVC項目基本也能按這個步驟來的)
2.在項目根目錄內新建文件appsettings.json(這個文件主要是配置服務中心eurke地址等信息的):
{
  "spring": {
    "application": {
      "name": "demoService"
    }
  },
  "eureka": {
    "client": {
      "serviceUrl": "http://localhost:8761/eureka/",//服務中心地址
      "shouldFetchRegistry": false,
      "shouldRegisterWithEureka": true,//是否允許注冊到服務中心
 
 
      "validate_certificates": false
    },
    "instance": {
      "port": 3001
   
    }
  },
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "Pivotal": "Debug",
      "Steeltoe": "Debug"
    }
  }
}

 

 
3.在項目文件夾App_Start下創建ApplicationConfig.cs:
 
 
public static class ApplicationConfig
    {
​
        public static IConfigurationRoot Configuration { get; set; }
​
        public static void RegisterConfig(string environment)
        {
 
            // Set up configuration sources.
            var builder = new ConfigurationBuilder()
                .SetBasePath(GetContentRoot())
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: false)
                .AddJsonFile($"appsettings.{environment}.json", optional: true)
                .AddCloudFoundry()
                .AddEnvironmentVariables();
​
            Configuration = builder.Build();
        }
​
        public static string GetContentRoot()
        {
            var basePath = (string)AppDomain.CurrentDomain.GetData("APP_CONTEXT_BASE_DIRECTORY") ??
               AppDomain.CurrentDomain.BaseDirectory;
            return Path.GetFullPath(basePath);
        }
    }

 

 
注意這里需要添加的引用:
using Microsoft.Extensions.Configuration;
using Steeltoe.Extensions.Configuration.CloudFoundry;
這兩個是需要在引用點右鍵選擇NuGet程序包里添加的。
 
4.修改Global.asax文件,在Application_Start()內加入代碼:
GlobalConfiguration.Configure(WebApiConfig.Register);
​
 var config = GlobalConfiguration.Configuration;
​
// Build application configuration
 ApplicationConfig.RegisterConfig("development");
​
 var builder = new ContainerBuilder();
​
// Add Microsoft Options to container
  builder.RegisterOptions();
​
// Add Microsoft Logging to container
  builder.RegisterLogging(ApplicationConfig.Configuration);
​
// Add Console logger to container
  builder.RegisterConsoleLogging();
​
// Register your Web API controllers.
  builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
​
// Register IDiscoveryClient, etc.
  builder.RegisterDiscoveryClient(ApplicationConfig.Configuration);
​
// Initialize and Register FortuneContext
  builder.RegisterInstance(SampleData.InitializeFortunes()).SingleInstance();
​
// Register FortuneRepository
  builder.RegisterType<FortuneRepository>().As<IFortuneRepository>().SingleInstance();
​
  var container = builder.Build();
  config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
​
// Get a logger from container
  var logger = container.Resolve <ILogger<WebApiApplication>>();
​
  logger.LogInformation("Finished container build, starting background services");
​
// Start the Discovery client background thread
  container.StartDiscoveryClient();
​
  logger.LogInformation("Finished starting background services");

 

添加引用:
using Autofac;
using Autofac.Integration.WebApi;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Console;
using Pivotal.Discovery.Client;
using Steeltoe.Common.Discovery;
using Steeltoe.Common.Logging.Autofac;
using Steeltoe.Common.Options.Autofac;
using System;
using System.Diagnostics;
using System.Reflection;
using System.Web.Http;

 

 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM