±à¼ÍƼö: |
ÎÄÕÂÖ÷Òª½éÉÜÁËJimu ¹¦Äܼ¼Êõ¡¢¿ò¼Ü¼òͼ¡¢ÈçºÎʹÓá¢Ê¹Ó÷½Ê½ ¼°Í¼½â¡£
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£ |
|
.Net Core ·Ö²¼Ê½Î¢·þÎñ¿ò¼Ü½éÉÜ - Jimu
Ò»¡¢Ç°ÑÔ
½üЩÄêÒ»Ö±½þÒùÔÚ .Net ƽ̨×öÆóÒµÓ¦Óÿª·¢£¬ÓùýµÄ .Net ¿ò¼Ü²»¶à£¨¾ßÌåÊýÁ¿²»Ç壬ӡÏóÉî¿ÌµÄÓÐ
Asp.Net MVC£¬WPF£¬ÆäËûºÜ¶à¶¼ÊÇ»ùÓÚ΢Èí¿ª·¢µÄ¿ò¼Ü×öЩ·â×°¶øÐγÉеĿò¼Ü£¬´ó¶¼ÊÇ»¹Ã»ÆðºÃÃû¾ÍäÎÃðÔÚÀúÊ·³¤ºÓÖУ©£¬¶ø×Ô¼º¿ª·¢µÄ¿ò¼Üµ¹ÊDz»ÉÙ£¨5
- 8 Ì×°É£©£¬ »»¿ò¼ÜÓë»»¹«Ë¾³ÉÕý±È£¨Ã¿»»Ò»¼Ò¹«Ë¾£¬ÖÁÉÙ»»Ò»Ì׿ò¼Ü£©£¬ºÜ¶à¶¼¼û²»µÃÈË£¨µ±Ê±¾õµÃ¸ß´óÉÏ£¬ºóÀ´¾õµÃºÜlow£©¡£
Ëæ²¨ÖðÁ÷´Ó winform Äê´úµ½ÏÖÔÚÈÈ»ð³¯ÌìµÄ΢·þÎñ£¬ÍøÉÏÔĶÁ¸÷ʽ¸÷ÑùµÄ²©¿Í¡¢ÐÂÎÅ¡¢ÆÀÂÛ¡¢´úÂ룬¶®Á˵ã΢·þÎñµÄ¸ÅÄ½áºÏÍøÉÏ¿ªÔ´´úÂëºÍ˼Ï룬Ããǿƴ´Õ³öÒ»¸öÃ»Ê²Ã´ÌØÉ«µÄ΢·þÎñ¿ò¼Ü
- Jimu (ÖÐÎÄÃû£º»ýľ)¡£
²»¹ý¿ò¼ÜµÄÌØÉ«¾ÍÏñÈé¹µ£¬¼·¼·»¹ÊÇÓеģºJimu ÊÇÒ»¸ö»ùÓÚ.Net Core 2.0 ¼òµ¥Ò×ÓõÄ΢·þÎñ¿ò¼Ü£¬Ê¹ÓÃÁË´óÁ¿µÄ¿ªÔ´¿â,
Ö§³Ö·Ö²¼Ê½¡¢¸ß²¢·¢ºÍ¸ºÔؾùºâ£¬ ʵÏÖÁË·þÎñÖÎÀíºÍ RPC µ÷Óá£Jimu ÔÚ³ÖÐøµü´ú¿ª·¢ÖУ¬ºÜ¶à¹¦ÄÜ»¹ÔÚÅÅÆÚ£¨Èç¿ÉÊÓ»¯¼à¿ØºÍ¹ÜÀí¹¤¾ß£¬ÈȸüУ¬·þÎñÈÛ¶Ï¡¢ÏÞÁ÷ºÍ½µ¼¶
...£©£¬Èç·Ç°®ÕÛÌڵĸßÊÖ£¬²»½¨ÒéÉÏÉú²ú»·¾³¡£ÕýÈçÆäÖÐÎÄÃû - »ýľ£¬Ï£ÍûÓÃËýÀ´¿ª·¢ÏîÄ¿Ïñ´î»ýľһÑù¼òµ¥¿ìËٿɿأ¬Ê¹ÏîÄ¿°²È«¿É¿¿Îȶ¨£¬ÕûÌå¼Ü¹¹¿ÉÍØÕ¹¡¢¸ß²¢·¢¡¢·Ö²¼Ê½¡£
¶þ¡¢¹¦Äܼ¼Êõ
·þÎñ×¢²á£ºÖ¸¶¨·þÎñÆ÷µØÖ·£¬»òͨ¹ýÀ©Õ¹Ö§³ÖÆäËûÓ¦Óã¨Èç consul - ÒÑÖ§³Ö£¬redis£¬ zookeeper£©
·þÎñ·¢ÏÖ£ºÖ¸¶¨·þÎñÆ÷µØÖ·£¬»òͨ¹ýÀ©Õ¹Ö§³ÖÆäËûÓ¦Óã¨Èç consul - ÒÑÖ§³Ö£¬redis £¬zookeeper£©
·þÎñµ÷ÓãºÊ¹Óà DotNetty »ò Flurl.Http ʵÏÖ RPC µ÷ÓÃ
·þÎñ´úÀí£ºMicrosoft.CodeAnalysis ½âÎö·þÎñ½Ó¿ÚÉú³É¶¯Ì¬´úÀí
½¡¿µ¼à²â£ºQuartz.Net ¶¨Ê±µ÷¶È Socket ÈÎÎñ¼ì²é·þÎñÆ÷ÐÄÌø
¸ºÔؾùºâ£ºÂÖѯËã·¨£¨Î´ÊµÏÖµÄÓУº ¼ÓȨÂÖѯ·¨£¬ ×îСÁ¬½ÓÊý·¨£¬Ëæ»ú·¨£¬¼ÓÈ¨Ëæ»ú·¨£¬Ô´µØÖ·¹þÏ£·¨£©
ÊÚȨÈÏÖ¤£ºjose-jwt ʵÏÖ JWT ÊÚȨ
Ðò ÁÐ »¯£ºJson.Net
ϵͳÈÕÖ¾£ºlog4net¡¢NLog
Èý¡¢¿ò¼Ü¼òͼ

ÈçͼËùʾ£¬ÕâÀïÓÐËÄÖÖ½ÇÉ«£º
Client£º¸÷ÖÖ¿Í»§¶Ë£¬ ÕâÊdzéÏóµÄ˵·¨£¬Ö»Òª·ÃÎÊÁË ApiGateway ¶¼ÊôÓÚ¿Í»§¶Ë£¨ÊÖ»ú¡¢µçÄÔ
...£¬ Èç¹û Service Server1 ºÍ Service Server2 ·ÃÎÊÁË ApiGateway
Ò²ÊôÓÚ¿Í»§¶Ë£©
ApiGateway£º ·þÎñÍø¹Ø£¬ÍⲿҪ¾¹ýËü²Å¿É·ÃÎÊÄÚ²¿µÄ·þÎñ¡£Íø¹ØÊǷdz£ÖØÒªµÄÒ»¸ö½ÇÉ«£¬ËûÏ൱ÓÚÍⲿºÍÄÚ²¿·þÎñÖ®¼äµÄÖн飬¸ºÔð½ÓÊܺÍÏìÓ¦ÍⲿÇëÇó£¬ÒÔ¼°µ÷ÓÃÄÚ²¿·þÎñ£¬»¹ÓзþÎñÖÎÀíµÈ¹¦ÄÜ
Service Discovery Server£º¸ºÔð±£´æÒÑ×¢²áµÄ·þÎñ£¬Ï൱ÓÚ·þÎñµÄ»¨Ãû²á£¬ Service
Server ×¢²á·þÎñ¾ÍÊÇÏò»¨Ãû²á¼Ç¼×Ô¼ºµÄÃû³Æ£¬ ApiGateway ·¢ÏÖ·þÎñ¾ÍÊÇÈ¥»¨Ãû²áÕÒÓÐÄÄЩÒÑ×¢²áµÄ·þÎñ
Service Server£ºÕâ¾ÍÊÇ΢·þÎñ£¬ËùÓÐÒµÎñÐèÇó¶¼ÔÚÕâÀïʵÏÖ
ËÄ¡¢ÈçºÎʹÓÃ
·þÎñ×¢²áÓë·¢ÏÖ£¬ ÒѾʵÏÖÁËÁ½ÖÖ·½Ê½£º
²»ÒÀÀµµÚÈý·½Ó¦Óã¬Ö±½Ó×¢²áµ½±¾µØ·þÎñ£¬ ¿É²Î¿´ github É쵀 Quick Start
ÒÀÀµÓÚ consul, ÐèÒªÏÈÆô¶¯ consul£¬È»ºó·þÎñ×¢²á consul, ApiGateway
·ÃÎÊ consul ·¢ÏÖ·þÎñ
ÏÂÃæÓà consul ×÷Ϊ·þÎñÈÝÆ÷£¬ÑÝʾÔõôÓà Jimu ʵÏÖÒ»¸ö·Ö²¼Ê½µÄ΢·þÎñ
1. Æô¶¯ consul
ÏÂÔØ°²×° consul
Æô¶¯
2. ΢·þÎñÏîÄ¿
´´½¨Ò»¸ö»ùÓÚ .Net Core 2.0 µÄÀà¿âÏîÄ¿£¬²¢Ìí¼Ó jimu
ÒÀÀµ
Ìí¼Ó·þÎñ£¬ÒýÓÿռ䣺 using Jimu;
[JimuServiceRoute("api/{Service}")]
// RPC µ÷Ó÷¾¶
public class UserService : IJimuService
{
[JimuService (CreatedBy = "grissom")]
// Ö¸¶¨·þÎñµÄÔªÊý¾Ý, ¸Ã·þÎñµ÷Ó÷¾¶Îª api/user/getname?id=
public string GetName(string id)
{
return $"user id {id}, name enjoy!";
}
}
|
3. ΢·þÎñ·þÎñ¶ËÏîÄ¿
´´½¨Ò»¸ö»ùÓÚ .Net Core 2.0 µÄ¿ØÖÆÌ¨ÏîÄ¿£¬ ²¢Ìí¼Ó
Jimu.Server ºÍ Jimu.Common.Discovery.ConsulIntegration
ÒÀÀµ
Install-Package
Jimu.Server
Install-Package Jimu.Common.Discovery.ConsulIntegration |
ÔÚ Main º¯ÊýÖÐÌí¼Ó·þÎñÆ÷Æô¶¯´úÂ룬ÒýÓÿռ䣺 using Jimu.Server;
static void Main(string[]
args)
{
var hostBuilder = new ServiceHostServerBuilder(new
Autofac.ContainerBuilder())
.UseLog4netLogger()
.LoadServices ("QuickStart.Services")
.UseDotNettyForTransfer ("127.0.0.1",
8001)
.UseConsulForDiscovery ("127.0.0.1",
8500, "JimuService")
;
using (var host = hostBuilder.Build())
{
host.Run();
Console.ReadLine();
}
} |
4. ΢·þÎñ¿Í»§¶Ë£¨ApiGateway£©ÏîÄ¿
´´½¨Ò»¸ö»ùÓÚ .Net Core 2.0 µÄ Asp.Net Core
Web Ó¦ÓóÌÐò£¨¿ÉÑ¡Ôñ API ÏîĿģ°æ£©£¬²¢Ìí¼Ó Jimu.Client ºÍJimu.Common.Discovery.ConsulIntegration
ÒÀÀµ
Install-Package
Jimu.Client
Install-Package Jimu.Common.Discovery.ConsulIntegration
|
ÐÞ¸Ä Startup.cs ÀàµÄ´úÂ룬 ÒÔ±ãÌí¼Ó¶Ô jimu µÄÖ§³Ö
using Jimu.Client;
using Jimu.Client.ApiGateway;
public class Startup
{
public Startup (IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get;
}
// This method gets called by the runtime.
Use this method to add services to the container.
public void ConfigureServices (IServiceCollection
services)
{
//services.AddMvc();
services.UseJimu();
}
// 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();
var host = new ServiceHostClientBuilder (new
Autofac.ContainerBuilder())
.UseLog4netLogger()
.UsePollingAddressSelector()
.UseDotNettyForTransfer()
.UseServerHealthCheck(1)
.SetDiscoveryAutoUpdateJobInterval(1)
.UseConsulForDiscovery ("127.0.0.1",
8500, "JimuService")
.Build();
app.UseJimu(host);
host.Run();
}
} |
5. ͬʱÆô¶¯ ·þÎñ¶Ë ºÍ ¿Í»§¶Ë
È»ºóÔÚä¯ÀÀÆ÷·ÃÎÊ£º http://localhost:58156/
api/user/getname?id=666
6. ¸ü¶à demo
¸ü¶àÇ¿º·µÄ¹¦ÄÜʹÓã¬Çë×Ô¼º¿´ demo ÁìÎò£¬ÓÉÓÚʱ¼äÓÐÏÞ£¬ÕâÀï¾Í²»Ò»Ò»Ïê½âÁË£¬Èç¹û´ó¼ÒÓÐÐËȤ£¬ÈÕºó»òÕß»áÓÐ¶àÆª·ùºÍÎĵµÀ´½éÉÜ¡£
ÇëÏÂÔØ Jimu Ô´Âë, »òÕßÏÂÔØÏîÄ¿ jimu.demo
.Net Core ·Ö²¼Ê½Î¢·þÎñ¿ò¼Ü - Jimu Ìí¼Ó Swagger Ö§³Ö
Ò»¡¢Ç°ÑÔ
×î½üÓпվÍÓÅ»¯ Jimu £¨Ò»¸ö»ùÓÚ.Net Core µÄ·Ö²¼Ê½Î¢·þÎñ¿ò¼Ü£©£¬¿¼Âǵ½ÏÖÔڵĿª·¢×éÖ¯¶¼Ïòǰºó¶Ë·ÖÀë·¢Õ¹£¬Ç°ºó¶Ë¸÷˾ÆäÖ°£¬ºÃµÄ
api Îĵµ¿ÉÒÔ¼õÉÙ´ó¼Ò¹µÍ¨µÄʱ¼ä³É±¾£¬ËùÒÔÓÅÏȸø Jimu Ìí¼Ó¶Ô api ÎĵµÉú³ÉµÄÖ§³Ö¡£ÊÐÃæÉϷdz£ÖøÃûºÍÅ£±ÆµÄµÄ
api ÎĵµÉú³É¿ò¼Ü·Ç swagger ĪÊô¡£ Ëü¿ÉÒÔÓÃÀ´Éú³É¡¢ÃèÊö¡¢µ÷ÓÿÉÊÓ»¯µÄ Web ·þÎñ¡£»¨ÁË
¶þÌì¶àµÄʱ¼ä°ÑËü¼¯³Éµ½ Jimu µÄ apigateway¡£
Èçͼ
api Áбí

api Ã÷ϸ

¶þ¡¢Ê¹Ó÷½Ê½
1. »·¾³
Net Core 2.0
»ùÓÚJimu ¿ò¼ÜµÄ ApiGateway
2. Ìí¼ÓÒýÓÃ
Install-Package
Jimu.Client.ApiGateway .SwaggerIntegration |
3. Æô¶¯´úÂë
ÔÚ Startup ÀïÌí¼Ó UseJimuSwagger()
public void
ConfigureServices (IServiceCollection services)
{
services.UseJimuSwagger(); // Ìí¼Ó Swagger Ö§³Ö
}
public void Configure (IApplicationBuilder app,
IHostingEnvironment env)
{
app.UseJimuSwagger(); // Ìí¼Ó Swagger Ö§³Ö |
4. ¶¨Òå½Ó¿Ú£¨·þÎñ/·½·¨£©
½Ó¿Ú¶¨Òå¿ÉÒÔÌí¼ÓÈýÖÖ±ê×¢£¬ÕâЩ±ê×¢×îÖÕ»áÏÔʾÔÚ swagger Éú³ÉµÄÎĵµ¡£
a. JimuService ±ê×¢ÊǶԽӿÚÔªÊý¾ÝµÄ¶¨ÒåºÍÃèÊö£¬Èç´´½¨ÈË¡¢Ê±¼ä¡¢ÃèÊö¡¢·ÃÎʽÇÉ«ÏÞÖÆµÈ¡£
b. JimuFieldComment ±ê×¢ÊǶÔÐÎʽ²ÎÊýµÄ×¢ÊÍ¡£
c. JimuReturnComment ±ê×¢ÊǶԽӿڵķµ»ØÀàÐÍ×ö×¢ÊÍ¡£
[JimuService(EnableAuthorization
= true, CreatedBy = "grissom", CreatedDate
= "2018-07-17", Comment = "¸ù¾ÝÐÂÎÅ
id »ñÈ¡ÐÂÎÅÄÚÈÝ")]
[JimuFieldComment("id", "ÐÂÎÅid")]
[JimuReturnComment("һƪÐÂÎÅÄÚÈÝ")]
News GetNews(string id); |
5. ¶¨Òå¶ÔÏó (DTO)
Èç¹û½Ó¿Ú²ÎÊý»ò·µ»ØÀàÐÍÊÇÒ»¸öÓû§¶¨ÒåµÄÀ࣬¶ÔÓ¦µÄÊôÐÔÒ²¿ÉÒÔÌí¼Ó×¢Êͱê×¢
JimuFieldComment£¬ ÕâЩ±ê×¢×îÖÕ»áÏÔʾÔÚ swagger Éú³ÉµÄÎĵµ¡£
public class
News
{
[JimuFieldComment("ÐÂÎÅid")]
public string Id { get; set; }
[JimuFieldComment("ÐÂÎűêÌâ")]
public string Title { get; set; }
[JimuFieldComment("×÷Õß")]
public string Director { get; set; }
[JimuFieldComment("·¢²¼Ê±¼ä")]
public string PostTime { get; set; }
[JimuFieldComment("ÐÂÎÅÄÚÈÝ")]
public string Content { get; set; }
} |
Èý¡¢Í¼½â

ËÄ¡¢×ܽá
Ö§³Ö¿ªÔ´ÊǺÜÀۺͺܺÄʱ¼äµÄ»î£¬²»¹ý¿ªÔ´¹ý³ÌÖÐ×Ô¼ºÒ²Ñ§µ½ºÜ¶à֪ʶ£¬Ï£Íû¿ÉÒÔÒ»Ö±¼á³ÖÏÂÈ¥¡£
|