准備工作
本篇文章基於上篇基礎上進行的,請先了解此篇 surging+CentOS7+docker+rancher2.0 菜鳥部署運行筆記
開發環境 Visual Studio 2017 15.5
數據庫 sql server 2012
運行環境 虛擬機CentOS 7+Docker+Rancher 2.0+Consul+RabbmitMQ
surging項目下載地址 https://github.com/dotnetcore/surging
demo下載地址 https://github.com/q5934/surgingDemo0.9.git
開始干活
1.新建.NETCore2.1 控制台程序項目解決方案
我參照surging 的源碼將服務模塊分離出來,這樣我們就不用操心網關怎么實現了,安心寫我們的服務就行了。我也假模假樣的用下DDD思想。
surgingDemo.Data 我這邊用於存放EF 實體,算是 基礎設施層
surgingDemo.IModuleServices.UserManager 用戶管理模塊接口
surgingDemo.Modules.UserManager 用戶管理模塊實現
surgingDemo.Sevices.server 服務層,配置好服務層網關會通過consul 發現服務
2.EFCore+DBFirst 實現
把 surgingDemo.Data設為啟動項並 添加 nueget 包
Install-package Microsoft.EntityFrameworkCore --EF框架的核心包 Install-package Microsoft.EntityFrameworkCore.SqlServer --針對SqlServer數據庫的擴展,使用SqlServer數據庫必須 Install-package Microsoft.EntityFrameworkCore.Tools --用戶根據現有的數據庫生成模型代碼等 ,更多參考 :https://docs.microsoft.com/zh-cn/ef/efcore-and-ef6/porting/port-edmx
根據數據生成實體模型,surgingDemo.Data設為啟動項不然生成失敗!
Scaffold-DbContext "Server=.;database=test;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models --根據自己數據自行修改參數
生成成功會創建Models文件 效果如下圖
目前只是生成了默認的DbContext 我們要修改一下做成自定義配置連接字符串。稍后在啟動服務的時候注冊進去。
/// <summary> /// 數據連接字符串 /// </summary> public static string ConnectionString { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { //optionsBuilder.UseSqlServer("Server=.;database=test;Trusted_Connection=True;"); optionsBuilder.UseSqlServer(ConnectionString); } }
依照surging中的surging.Services.Server 層我們將相關的配置文件和啟動內容copy過來。
surging相關引用 可以通過nuget 進行安裝,若是自己對網關進行過定制,那就引用生成后DLL。
Install-package Autofac.Extensions.DependencyInjection Install-package Microsoft.Extensions.Logging Install-package Microsoft.Extensions.Logging.Console
生成成功后,修改surgingSettings.json 配置文件
1 "ConnectionString": "${Register_Conn}|192.168.56.2:8500" --設置consul的地址,根據實際情況配置 2 "EventBusConnection": "${EventBusConnection}|192.168.56.2" --設置rabbitmq 的地址 3 4 --在末尾增加sql連接字符串配置文件 5 "ConnectionStrings": { 6 "SqlServerStr": "${SqlServerStr}|Server=.;Database=test;User ID=sa;Password=S1a2;Trusted_Connection=False;" 7 }
接下來新建一個user的接口和實現,接口文件以 Service 結尾並集成IserviceKey
[ServiceBundle("api/{Service}")] --這是surging的路由設置 必須加上
接口實現,必須繼承 ProxyServiceBase
倉儲層 ,必須繼承 BaseRepository
這樣我們的demo 程序算是完工了。。嘻嘻 開始run起來,前提是你要 surging 網關運行起來 consul和rabbitmq 配置好。
此處的Ip 就是服務的IP地址在VS 本地調試的時候可以設置成本機IP,不然在docker容器中的 網關找不到這個地址的。如果你surging是在本機VS 運行的設置成127.0.01 沒毛病。當我們發布到 服務端到docker容器中的時候,要設置成 0.0.0.0 切記切記
運行成功后網關界面如下圖
開始請求服務 ,Content-Type :application/json 一定要加不管是get請求還是post
成功后我們在調用獲取用列表的方法
本地測試沒毛病后,發布服務端 上傳到,centos 7 上,docker build 鏡像,映射好端口 ,數據庫字符串的IP 記得改成本機IP 了用 . 運行不起來的,然后run起來 。。。(不清楚可以參考上篇網關發布教程)
demo 下載地址 https://github.com/q5934/surgingDemo0.9.git
如有疑問可加surging官方群:615562965