±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚÑîÀö¡¢ÕÅ»ÔÇ壬±¾ÎÄÖØµã½²ÁË΢·þÎñ¼Ü¹¹MSA ¿ò¼Ü¡¢ÊµÏּܹ¹¡¢Ê¹Óá¢Î¢·þÎñÖÎÀí¡¢Î¢·þÎñÍø¹Ø API GatewayµÈµÈ¡£ |
|
Ò»¡¢MSA ¼ò½é
1.1¡¢MSA ÊÇʲô
΢·þÎñ¼Ü¹¹ MSA ÊÇ Microservice Architect µÄ¼ò³Æ£¬ËüÊÇÒ»Öּܹ¹Ä£Ê½£¬ËüÌᳫ½«µ¥Ò»Ó¦ÓóÌÐò»®·Ö³ÉÒ»×éСµÄ·þÎñ£¬·þÎñÖ®¼ä»¥ÏàͨѶ¡¢»¥ÏàÅäºÏ£¬ÎªÓû§Ìṩ×îÖÕ¼ÛÖµ¡£ËüÓë SOA Ö®¼äµÄÇø±ðÈçÏ£º

1.2¡¢ÎÒÃÇµÄ MSA ¿ò¼Ü
ÎÒÃǵÄ΢·þÎñ¿ò¼Ü MsaFx.dll ÊǸö»ùÓÚ ServiceStack 4.0.60 °üװʵÏÖµÄ.NET Web Services ¿ò¼Ü£¬¶ø ServiceStack ±¾ÉíÖ§³ÖͨÓõÄÇáÁ¿¼¶ÐÒéºÍ Metadata¡£MsaFx ÓëÆÕͨ Web Services ¿ò¼ÜÈç WCF Ïà±È£¬Ö÷ÒªÓÅÊÆÈçÏ£º
- ¸ßÐÔÄÜ£ºÐÔÄܺá¢Ëٶȿ졣
- Ö§³Ö¿çƽ̨ÔËÐУº»ùÓÚ MsaFx ¿ª·¢³öµÄ Web Services ¼ÈÄܹ»ÔËÐÐÔÚ Windows »·¾³ÖУ¬ÓÖÄܹ»ÔËÐÐÔÚÖ§³Ö Mono µÄ Linux »·¾³ÖС£
- Ö§³Ö¶àÐÒ飺Èç JSON ¸ñʽµÄÒ²Ö§³Ö XSD¡£
- ¸ü¼Ó Web »¯£ºRESTful¡£
- ·þÎñ¶ËʵÏÖÓë¿Í»§¶ËʵÏÖµÄÍêÈ«½âñMSA »ùÓÚÏûÏ¢µÄÉè¼Æ£¬Ê¹µÃ·þÎñ¶ËµÄ API ¸Ä±ä²¢²»»áÆÆ»µÏÖÓеĿͻ§¶Ë£¬´ïµ½·þÎñ¶ËʵÏÖÓë¿Í»§¶ËʵÏÖÍêÈ«½âñîµÄÄ¿µÄ¡£
- MSA API ¿ÉÊÓ»¯ËµÃ÷Îĵµ±ãÓÚÄãµ÷ÊÔ¡£
- Ò×ѧ£ºÊ¹Óà MSA ½øÐпª·¢ºÍά»¤·þÎñËùÐèµÄ¼¼ÊõºÍʱ¼äͶÈëҪСºÜ¶à¡£
- Ò×Ó㺼ò»¯ÁË REST ÒÔ¼° WCF SOAP ·ç¸ñµÄ Web Services µÄ¿ª·¢¹ý³Ì¡£
1.3¡¢MSA ¿ò¼ÜʵÏּܹ¹
MSA ·þÎñ¶ËµÄ¼Ü¹¹Çë¼ûÏÂͼµÄµÚÒ»ÕÅͼ£¬MSA µÄ HTTP ¿Í»§¶Ë¼Ü¹¹Çë¼ûÏÂͼµÄµÚ¶þÕÅͼ¡£MSA µÄÄÚ²¿Êǽ¨Á¢ÔÚÔÉúµÄ ASP.NET IHttpHandler Ö®ÉÏʵÏֵģ¬Ö§³Ö JSON¡¢XML¡¢JSV¡¢HTML¡¢Message Pack¡¢ProtoBuf¡¢CSV µÈÏûÏ¢¸ñʽ¡£

MSA ·þÎñ¶ËµÄ¼Ü¹¹

MSA HTTP Client µÄ¼Ü¹¹
¶þ¡¢MSA ¿ò¼ÜµÄʹÓÃ
1¡¢·þÎñÍйÜ
·þÎñ¶ËµÄ·þÎñ¶ÔÍâÌṩ·þÎñǰ£¬±ØÐëÏÈÒª°Ñ·þÎñ¶Ë¸øÍÐ¹ÜÆðÀ´¡£MSA ÌṩÁËͨ¹ý IIS¡¢Self-Host µÈ¶àÖÖÐÎʽ°Ñ·þÎñ¶Ë¸øÍÐ¹ÜÆðÀ´£¬ËÞÖ÷»·¾³¿ÉÒÔÊÇ¿ØÖÆÌ¨Ó¦Óûò Windows Service »ò ASP.NET Web Ó¦Óûò ASP.NET MVC Ó¦Óá£ÌṩµÄ MSA Demo µÄËÞÖ÷»·¾³ÓõÄÊÇ ASP.NET Web Ó¦Óá£
2¡¢ ·ÓÉ
A¡¢MSA ×ÔÉíÌṩµÄĬÈÏ·ÓÉÊÇ£º
/[xml|json|html|jsv|csv]/[reply|oneway]/[Request DTO Ãû] [(?query ²ÎÊý 1={Öµ}&query ²ÎÊý 2={Öµ}&......&query ²ÎÊý n={Öµ})]¡£ |
B¡¢´´½¨×Ô¶¨Òå·ÓÉ£¬Æä´´½¨·½·¨ÊÇ£ºÊ¹Óà RouteAttribute »òÔÚËÞÖ÷»·¾³ÖÐÅäÖá£ÌṩµÄ MSA Demo ²ÉÓõÄÊÇÔÚËÞÖ÷»·¾³ÖÐÅäÖ÷ÓÉÕâÖÖ·½Ê½À´´´½¨×Ô¶¨Òå·ÓÉ¡£
3¡¢ÈçºÎÑéÖ¤ÇëÇó²ÎÊýµÄºÏ·¨ÐÔ
Èç¹ûÄãÐèÒªÔÚÌá½»ÇëÇó²ÎÊýǰ£¬ÑéÖ¤ÇëÇó²ÎÊýÊÇ·ñ±ØÌî»òÊÇ·ñºÏ·¨£¬ÄÇôÑéÖ¤Âß¼±ØÐëдÔڼ̳Ð×Ô MSA µÄ AbstractValidatorµÄÀàÀ²Î¿¼Àý×ÓÇë¼û MSA Demo µÄ OrderValidator.cs£©£¬È»ºóÔÚËÞÖ÷»·¾³ÖнøÐпªÆôÑéÖ¤µÄÅäÖãº
Plugins.Add(new ValidationFeature()); container.RegisterValidator(typeof(OrderValidator)); |
4¡¢·þÎñ
´´½¨ MSA ·þÎñʱ£¬±ØÐë¼Ì³ÐÀ´×Ô MSA µÄ Service Àà¡£
5¡¢MSA ÄÚÖõĿͻ§¶Ë
5.1¡¢MSA ÄÚÖÃÁËһЩ±ã½Ý·ÃÎʵĿͻ§¶Ë£¬ÕâЩ¶ÔÏó¶¼ÊµÏÖÁË IServiceClient ½Ó¿Ú£¬ÆäÖÐÖ§³Ö REST µÄ¿Í»§¶Ë»¹¶¼ÊµÏÖÁË IRestClient ½Ó¿Ú¡£
ÕâЩ¿Í»§¶Ë¶ÔÏó°üÀ¨£ºJsonServiceClient¡¢JsvServiceClient¡¢XmlServiceClient¡¢MsgPackServiceClient¡¢ProtoBufServiceClient¡¢Soap11ServiceClient¡¢Soap12ServiceClient µÈ¡£
´ÓÃû³Æ¿ÉÒÔ¿´³ö£¬Õ⼸ÖÖ²»Í¬Ö®´¦ÔÚÓÚÖ§³ÖµÄÐòÁл¯ºÍ·´ÐòÁл¯¸ñʽ²»Í¬¡£ÒòΪËüÃÇʵÏÖµÄÊÇÏàͬµÄ½Ó¿Ú£¬ËùÒÔËüÃǵÄÓ÷¨Ïàͬ£¬Ò²¿ÉÒÔÏà»¥Ìæ»»¡£
MSA Demo ÖÐÓõ½ÁË JsonServiceClient ºÍ ProtoBufServiceClient ÕâÁ½ÖÖ¿Í»§¶Ë£¬ÆäÖе±Óõ½ ProtoBufServiceClient ¿Í»§¶Ëʱ£¬Ä㻹ÐèÒªÍê³ÉÈçϹ¤×÷£º
a¡¢³ýÁËÐèÒªÒýÓà MSA.dll Í⣬»¹ÐèÒªÒýÓà protobuf-net.dll¡£
b¡¢ÐèÒªÔÚËÞÖ÷»·¾³ÖнøÐÐÈçÏÂÅäÖãº
Plugins.Add(new ProtoBufFormat()); |
c¡¢±ØÐë·Ö±ð¸ø Request DTO ¶ÔÏóºÍ Response DTO ¶ÔÏóµÄ¸÷ÊôÐÔ±êÉÏ [DataMember(Order = {0})] ÌØÐÔ£¬¾ßÌåд·¨Çë¼û MSA Demo µÄ ProductRequestDTO.cs ºÍ ProductResponseDTO.cs¡£
5.2¡¢MSA ÄÚÖõĿͻ§¶ËÌṩ Get¡¢Send¡¢Post¡¢Put¡¢Delete µÈ·½·¨¡£²éѯÊý¾ÝÒ»°ãÓà Get ·½·¨£¬ÐÂÔö²Ù×÷Ò»°ãÓà Post ·½·¨£¬¸üвÙ×÷Ò»°ãÓà Put ·½·¨£¬É¾³ý²Ù×÷Ò»°ãÓà Delete ·½·¨¡£ÕâЩ·½·¨¶¼ÓÐÖØÔØ¡£
ÒÔÏÂÊÇ Get ·½·¨µÄÆäÖÐÒ»¸öÇ©Ãû£º
TResponse Get<TResponse>(IReturn<TResponse> requestDto); |
6¡¢MSA API ¿ÉÊÓ»¯ËµÃ÷Îĵµ×Ô¶¯Éú³ÉµÄʵÏÖ
ÔÚËÞÖ÷»·¾³ÖмÓÈçÏÂÅäÖãº
Plugins.Add(new SwaggerFeature()); |
Èç¹ûÐèÒªÔÚ MSA API ¿ÉÊÓ»¯ËµÃ÷ÎĵµÖÐÄܹ»¿´µ½¸÷ÇëÇó²ÎÊý¡¢ÏìÓ¦µÄº¬Òå˵Ã÷£¬ÄÇôÐèҪΪ Request DTO¡¢Response DTO ¶ÔÏóµÄ¸÷ÊôÐÔ±êÉÏ ApiMember£¬´úÂë²Î¿¼ÈçÏ£º
public class OrderRequest : IReturn<OrderResponse>
{
[ApiMember(Name = "Id", Description = "¶©µ¥ ID ºÅ", IsRequired = false)]
public int Id { get; set; }
[ApiMember(Name = "CustomerName", Description = "¿Í»§Ãû", IsRequired = false)]
public string CustomerName { get; set; }
//......
[ApiMember(Name = "OrderItemList", Description = "¶©¹ºµÄ²úÆ·Áбí", IsRequired = false)]
public List<OrderItem> OrderItemList { get; set; }
} |
ÔËÐнá¹ûÈçÏÂͼËùʾ£º

ÔÚ MSA API ¿ÉÊÓ»¯ËµÃ÷ÎĵµÖÐÏÔʾ¸÷ÇëÇó²ÎÊý¡¢ÏìÓ¦µÄº¬Òå˵Ã÷
7¡¢ÔËÐнá¹û
ÏÈÔËÐÐÍйÜÓ¦Óã¨Èç MSA Demo ÖÐ ServiceHost ÏîÄ¿£©£¬³öÏÖÏÂͼËùʾµÄ Metadata Ò³¡£È»ºóÔÙÔËÐпͻ§¶ËÀ´µ÷ÓÃ΢·þÎñ£»Ò²¿Éͨ¹ýä¯ÀÀÆ÷²é¿´Êý¾Ý£¬ÍøÖ·ÊäÈë¸ñʽÈ磺
http://localhost:34833/orders/1.html?CustomerName= ¿Í»§ _1&IsTakeAway=true&StatusCode=1&CreatedDate=2017-08-21 10:58:48.230 |
»ò£º
http://localhost:34833/html/reply/GetOrderRequest?Id=1&CustomerName= ¿Í»§ _1&IsTakeAway=true&StatusCode=1&CreatedDate=2017-08-21 10:58:48.230 |
ÆäÖУ¬µÚ 1 ¸öÍøÖ·¸ñʽ¹æÔò¾ÍÊÇ MSA Demo ÖÐÔÚËÞÖ÷»·¾³ÖÐËùÅäµÄ×Ô¶¨Òå·ÓɹæÔò£¬µÚ 2 ¸öÍøÖ·¸ñʽ¹æÔò¾ÍÊÇÓÉ MSA ÌṩµÄĬÈÏ·ÓɹæÔò¡£
µ¥»÷ÏÂͼËùʾ Metadata Ò³Öеġ¾MSA API UI¡¿ºó£¬½øÈëÏÂͼËùʾµÄ MSA API ¿ÉÊÓ»¯ËµÃ÷Îĵµ½çÃæ£¬¿ª·¢ÈËÔ±¿ÉÒÔͨ¹ýÕâ·ÝÓÉ MSA ×Ô¶¯Éú³ÉµÄ˵Ã÷Îĵµ½øÐе÷ÊÔ£¬Ê®·Ö·½±ã¡£

Metadata Ò³

MSA API ¿ÉÊÓ»¯ËµÃ÷Îĵµ½çÃæ
Èý¡¢Î¢·þÎñÖÎÀí
ÔÚÎÒÃÇ×ÔÖ÷¿ª·¢µÄ¿ò¼Ü¹ÜÀíϵͳÖУ¬½øÐнӿÚ×¢²á£¬Çë¼ûÏÂͼ¡£ÆäÖУ¬¹æ¶¨ÄÚ²¿·þÎñ·ÃÎÊÃûµÄÃüÃû¹æ·¶ÊÇ£º/{***Service}/ ·½·¨Ãû£¬Èç /OrderService/CreateOrder£»¹æ¶¨Íⲿ·þÎñ·ÃÎÊÃû OpenApiName µÄÃüÃû¹æ·¶ÊÇ£º{¸÷²úÆ·ÏßµÄËõдӢÎÄÃû}·½·¨Ãû£¬Èç FltCreateOrder£¬ÆäÖÐ Flt ±íʾ¹úÄÚ»úƱҵÎñµÄËõдӢÎÄÃû¡£

MSA ½Ó¿Ú×¢²áÒ³
ËÄ¡¢Î¢·þÎñÍø¹Ø API Gateway
4.1¡¢API Gateway µÄ¼ò½é
API Gateway ·ç¸ñµÄºËÐÄÀíÄîÊÇʹÓÃÒ»¸öÇáÁ¿¼¶µÄÏûÏ¢Íø¹Ø×÷ΪËùÓпͻ§¶ËµÄÖ÷Èë¿Ú£¬²¢ÇÒÔÚ API Gateway ²ãÃæÉÏʵÏÖͨÓõķǹ¦ÄÜÐÔÐèÇó¡£ÈçÏÂͼËùʾ£ºËùÓеķþÎñͨ¹ý API Íø¹ØÀ´±©Â¶£¬ÕâÊÇËùÓпͻ§¶Ë·ÃÎʵÄΨһÈë¿Ú£»Èç¹ûÒ»¸ö·þÎñÒª·ÃÎÊÁíÒ»¸ö·þÎñ£¬Ò²ÒªÍ¨¹ýÕâ¸öÍø¹Ø¡£

ËùÓзþÎñͨ¹ýÒ»¸ö API Íø¹ØÀ´±©Â¶
Ò»µ© API Íø¹ØÔÊÐí¿Í»§¶ËÏû·ÑÒ»¸öÊܹÜÀíµÄ API£¬ÄÇôÎÒÃǾͿÉÒÔÒÔÊܹÜÀíµÄ API ÐÎʽʹÓÃËüÀ´±©Â¶Õâ¸ö΢·þÎñËùʵÏÖµÄÒµÎñÂß¼¡£API Íø¹ØÒÔ NIO¡¢IOCP À´Á¬½ÓÄÚ²¿ÊܹÜÀíµÄ API£¬ÒÔʵÏÖ API Íø¹ØµÄ¸ß²¢·¢¡£
4.2¡¢API Gateway µÄÓŵã

- ÍøÂç¸ôÀ룺΢·þÎñ²¿ÊðÔÚÁËÄÚÍø£¬Í¨¹ý API Gateway ¿ª·Å¸ø PartnerAPI¡¢WebAPI »ò MobileAPI¡£
- ÔÚÍø¹Ø²ãÃæµÄÇáÁ¿¼¶ÏûϢ·ÓɺÍת»»¡£
- ÔÚÍø¹Ø²ãÃæ¶Ô´æÔÚµÄ΢·þÎñÌṩ±ØÒªµÄ³éÏó¡£ÀýÈç£¬Íø¹Ø¿ÉÒÔÑ¡Ôñ¶Ô²»Í¬µÄÓû§±©Â¶²»Í¬µÄ API¡£
- Ò»¸öÖÐÐĵĵط½Ìṩ·Ç¹¦ÄÜÐÔµÄÄÜÁ¦£¬ÕâЩÄÜÁ¦¿É¸´Ó㬠±ÈÈ糬ʱ¡¢ÏÞÁ÷¡¢ÈÛ¶Ï¡¢¼à¿Ø¡¢ÈÕÖ¾¼Ç¼µÈ¡£
- ͨ¹ýÊÊÓà API Íø¹ØÄ£Ê½£¬Î¢·þÎñ¿ÉÒÔ±äµÃ¸ü¼ÓÇáÁ¿£¬ÒòΪ·Ç¹¦ÄÜÐÔÐèÇó¶¼ÔÚÍø¹ØÉÏʵÏÖÁË¡£
- ͳһ°²È«¹Ü¿Ø¡£
4.3¡¢API Gateway µÄ¼Ü¹¹

4.4¡¢API Gateway µÄ¹¦ÄÜ
API Gateway Ö÷ҪʵÏÖÒÔϹ¦ÄÜ£º
- ·ÓÉÓ³É䣺Íⲿ·þÎñ·ÃÎÊÃûÓ³Éäµ½¶ÔÓ¦µÄÄÚ²¿·þÎñ·ÃÎÊÃû¡£
- ȨÏÞÑéÖ¤£º°üÀ¨Õë¶Ô¿Í»§½ÇÉ«µÄ·ÃÎÊÊÚȨÑéÖ¤¡¢Õë¶Ô¿Í»§µÄ·ÃÎÊÊÚȨÑéÖ¤¡¢IP ºÚÃûµ¥ÑéÖ¤¡£
- ³¬Ê±´¦Àí£ºµ± API Íø¹Øµ÷ÓõÄÄÚ²¿·þÎñÏìӦʱ¼ä³¬¹ýÁËÔÚ×ÔÖ÷¿ª·¢µÄ API Íø¹Øºǫ́¹ÜÀí×ÓϵͳÖÐËùÉèÖõÄÔÊÐí×µÄ³¬Ê±Ê±¼äʱ£¬API Íø¹Ø»áÁ¢¼´Í£Ö¹µ÷Ó㬲¢·µ»ØÏà¹ØÏûÏ¢¸øÄã¡£
- ÏÞÁ÷¿ØÖÆ£ºµ±Äãͨ¹ý API Íø¹Øµ÷ÓÃÄÚ²¿·þÎñµÄƵÂÊ´ïµ½ÔÚij¸öãÐֵʱ£¬API Íø¹Ø»áÁ¢¼´×ö¶Ï¿ªÁ´Â·´¦Àí¡£¹ýÁËʱ¼äºó£¬Á´Â·»á×Ô¶¯±ÕºÏ»ØÈ¥¡£
- ÈÛ¶Ï´¦Àí£ºÈÛ¶Ï´¦Àí¶Ô±ÜÃâÎÞνµÄ×ÊÔ´ÏûºÄÌØ±ðÓÐÓ㬵±Í¨¹ý API Íø¹Øµ÷ÓõÄÄÚ²¿·þÎñ³öÏÖÒì³£µÄƵÂʴﵽij¸öãÐֵʱ£¬ÄÇô API Íø¹Ø»á×öÁÙʱÈÛ¶Ï´¦Àí¼´ÁÙʱ¶Ï¿ªÁ´Â·£¬ÔÝʱֹͣÄã¶ÔÄǸöÄÚ²¿·þÎñµÄµ÷Óá£ÁÙʱÈ۶Ϻ󣬹ýÁËÒ»¶Îʱ¼äºó£¬Á´Â·»á×Ô¶¯±ÕºÏ»ØÈ¥¡£
- ÈÕÖ¾ÐÅÏ¢¼Ç¼£º»á¼Ç¼¿Í»§ IP¡¢¿Í»§ÇëÇó²ÎÊý¡¢·µ»Ø½á¹û¡¢Òì³£ÐÅÏ¢µÈÐÅÏ¢¡£
4.5¡¢API Gateway µÄʹÓÃ
ÔÚʹÓà API Gateway ֮ǰ£¬ÐèÒªÏÈÅäÖÃÍø¹Ø²ÎÊý¡£Íø¹Ø²ÎÊýµÄÅäÖÃÊÇÔÚ×ÔÖ÷¿ª·¢µÄ API Íø¹Øºǫ́¹ÜÀí×ÓϵͳÖнøÐУº

ÔÚ×ÔÖ÷¿ª·¢µÄ API Íø¹Øºǫ́¹ÜÀí×ÓϵͳÖÐÅäÖÃÍø¹Ø²ÎÊý
Îå¡¢Demo ÏÂÔØ¼°¸ü¶à×ÊÁÏ
- MSADemo ÏÂÔØµØÖ·£ºhttps://github.com/das2017/MSADemo
- APIGatewayDemo ÏÂÔØµØÖ·£ºhttps://github.com/das2017/ApiGatewayDemo
- ServiceStack ¹ÙÍø£ºhttps://servicestack.net/
|