Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Spring Cloud Netflix ¸ÅÀÀºÍ¼Ü¹¹Éè¼Æ
 
 À´Ô´£º51CTO ·¢²¼ÓÚ£º 2017-4-14
  3314  次浏览      28
 

Spring Cloud¼ò½é

Spring CloudÊÇ»ùÓÚSpring BootµÄÒ»ÕûÌ×ʵÏÖ΢·þÎñµÄ¿ò¼Ü¡£ËûÌṩÁË΢·þÎñ¿ª·¢ËùÐèµÄÅäÖùÜÀí¡¢·þÎñ·¢ÏÖ¡¢¶Ï·Æ÷¡¢ÖÇÄÜ·ÓÉ¡¢Î¢´úÀí¡¢¿ØÖÆ×ÜÏß¡¢È«¾ÖËø¡¢¾ö²ß¾ºÑ¡¡¢·Ö²¼Ê½»á»°ºÍ¼¯Èº×´Ì¬¹ÜÀíµÈ×é¼þ¡£×îÖØÒªµÄÊÇ£¬¸úspring boot¿ò¼ÜÒ»ÆðʹÓõϰ£¬»áÈÃÄ㿪·¢Î¢·þÎñ¼Ü¹¹µÄÔÆ·þÎñ·Ç³£ºÃµÄ·½±ã¡£

Spring Cloud°üº¬Á˷dz£¶àµÄ×Ó¿ò¼Ü£¬ÆäÖУ¬Spring Cloud NetflixÊÇÆäÖÐÒ»Ì׿ò¼Ü£¬ÓÉNetflix¿ª·¢ºóÀ´ÓÖ²¢ÈëSpring Cloud´ó¼ÒÍ¥£¬ËüÖ÷ÒªÌṩµÄÄ£¿é°üÀ¨£º·þÎñ·¢ÏÖ¡¢¶Ï·Æ÷ºÍ¼à¿Ø¡¢ÖÇÄÜ·ÓÉ¡¢¿Í»§¶Ë¸ºÔؾùºâµÈ¡£

Spring Cloud NetflixÏîÄ¿µÄʱ¼ä»¹²»³¤£¬²¢ÈëSpring Cloud´ó¼Ò×廹ÊÇ2Äêǰ£¬ËùÒÔÏà¹ØµÄʹÓÃÎĵµ»¹±È½ÏÉÙ£¬³ýÁ˹ٷ½Îĵµ£¬¹úÄÚÒ²ÓÐÒ»¸öÖÐÎÄÉçÇø¡£µ«ÊÇ£¬Èç¹ûÊǸտªÊ¼½Ó´¥Õâ¸ö£¬ÏëʹÓÃËü´î½¨Ò»Ì×΢·þÎñµÄÓ¦Óüܹ¹£¬×ÜÊÇ»áÓв»ÖªÈçºÎÏÂÊֵĸоõ¡£ËùÒÔ£¬ÕâÆªÎÄÕ¾ÍÊÇ´ÓÕûÌåÉÏÀ´¿´¿´Õâ¸ö¿ò¼ÜµÄ¸÷¸ö×é¼þ¡¢Óô¦ÊÇʲô¡¢ÈçºÎÏ໥×÷Óá£×îºóÔÙ½áºÏʵ¼ÊµÄ¾­Ñ飬½éÉÜһϿÉÄÜ»á³öÏÖµÄÎÊÌ⣬ÒÔ¼°Õë¶ÔһЩÎÊÌ⣬²ÉÓÃʲôÑùµÄ½â¾ö·½°¸¡£

΢·þÎñ¼Ü¹¹

Ê×ÏÈ£¬ÎÒÃÇÀ´¿´¿´Ò»°ãµÄ΢·þÎñ¼Ü¹¹ÐèÒªµÄ¹¦ÄÜ»òʹÓó¡¾°£º

ÎÒÃǰÑÕû¸öϵͳ¸ù¾ÝÒµÎñ²ð·Ö³É¼¸¸ö×Óϵͳ¡£

ÿ¸ö×Óϵͳ¿ÉÒÔ²¿Êð¶à¸öÓ¦Ó㬶à¸öÓ¦ÓÃÖ®¼äʹÓøºÔؾùºâ¡£

ÐèÒªÒ»¸ö·þÎñ×¢²áÖÐÐÄ£¬ËùÓеķþÎñ¶¼ÔÚ×¢²áÖÐÐÄ×¢²á£¬¸ºÔؾùºâÒ²ÊÇͨ¹ýÔÚ×¢²áÖÐÐÄ×¢²áµÄ·þÎñÀ´Ê¹ÓÃÒ»¶¨²ßÂÔÀ´ÊµÏÖ¡£

ËùÓеĿͻ§¶Ë¶¼Í¨¹ýͬһ¸öÍø¹ØµØÖ··ÃÎʺǫ́µÄ·þÎñ£¬Í¨¹ý·ÓÉÅäÖã¬Íø¹ØÀ´ÅжÏÒ»¸öURLÇëÇóÓÉÄĸö·þÎñ´¦Àí¡£ÇëÇóת·¢µ½·þÎñÉϵÄʱºòҲʹÓøºÔؾùºâ¡£

·þÎñÖ®¼äÓÐʱºòÒ²ÐèÒªÏ໥·ÃÎÊ¡£ÀýÈçÓÐÒ»¸öÓû§Ä£¿é£¬ÆäËû·þÎñÔÚ´¦ÀíһЩҵÎñµÄʱºò£¬Òª»ñÈ¡Óû§·þÎñµÄÓû§Êý¾Ý¡£

ÐèÒªÒ»¸ö¶Ï·Æ÷£¬¼°Ê±´¦Àí·þÎñµ÷ÓÃʱµÄ³¬Ê±ºÍ´íÎ󣬷ÀÖ¹ÓÉÓÚÆäÖÐÒ»¸ö·þÎñµÄÎÊÌâ¶øµ¼ÖÂÕûÌåϵͳµÄ̱»¾¡£

»¹ÐèÒªÒ»¸ö¼à¿Ø¹¦ÄÜ£¬¼à¿ØÃ¿¸ö·þÎñµ÷Óû¨·ÑµÄʱ¼äµÈ¡£

Spring Cloud Netflix×é¼þÒÔ¼°²¿Êð

Spring Cloud Netflix¿ò¼Ü¸ÕºÃ¾ÍÂú×ãÁËÉÏÃæËùÓеÄÐèÇ󣬶øÇÒ×îÖØÒªµÄÊÇ£¬Ê¹ÓÃÆðÀ´·Ç³£µÄ¼òµ¥¡£Spring Cloud Netflix°üº¬µÄ×é¼þ¼°ÆäÖ÷Òª¹¦ÄÜ´óÖÂÈçÏ£º

Eureka£¬·þÎñ×¢²áºÍ·¢ÏÖ£¬ËüÌṩÁËÒ»¸ö·þÎñ×¢²áÖÐÐÄ¡¢·þÎñ·¢ÏֵĿͻ§¶Ë£¬»¹ÓÐÒ»¸ö·½±ãµÄ²é¿´ËùÓÐ×¢²áµÄ·þÎñµÄ½çÃæ¡£ ËùÓеķþÎñʹÓÃEurekaµÄ·þÎñ·¢ÏÖ¿Í»§¶ËÀ´½«×Ô¼º×¢²áµ½EurekaµÄ·þÎñÆ÷ÉÏ¡£

Zuul£¬Íø¹Ø£¬ËùÓеĿͻ§¶ËÇëÇóͨ¹ýÕâ¸öÍø¹Ø·ÃÎʺǫ́µÄ·þÎñ¡£Ëû¿ÉÒÔʹÓÃÒ»¶¨µÄ·ÓÉÅäÖÃÀ´ÅжÏijһ¸öURLÓÉÄĸö·þÎñÀ´´¦Àí¡£²¢´ÓEureka»ñȡע²áµÄ·þÎñÀ´×ª·¢ÇëÇó¡£

Ribbon£¬¼´¸ºÔؾùºâ£¬ZuulÍø¹Ø½«Ò»¸öÇëÇó·¢Ë͸øÄ³Ò»¸ö·þÎñµÄÓ¦ÓõÄʱºò£¬Èç¹ûÒ»¸ö·þÎñÆô¶¯Á˶à¸öʵÀý£¬¾Í»áͨ¹ýRibbonÀ´Í¨¹ýÒ»¶¨µÄ¸ºÔؾùºâ²ßÂÔÀ´·¢Ë͸øÄ³Ò»¸ö·þÎñʵÀý¡£

Feign£¬·þÎñ¿Í»§¶Ë£¬·þÎñÖ®¼äÈç¹ûÐèÒªÏ໥·ÃÎÊ£¬¿ÉÒÔʹÓÃRestTemplate£¬Ò²¿ÉÒÔʹÓÃFeign¿Í»§¶Ë·ÃÎÊ¡£ËüĬÈÏ»áʹÓÃRibbonÀ´ÊµÏÖ¸ºÔؾùºâ¡£

Hystrix£¬¼à¿ØºÍ¶Ï·Æ÷¡£ÎÒÃÇÖ»ÐèÒªÔÚ·þÎñ½Ó¿ÚÉÏÌí¼ÓHystrix±êÇ©£¬¾Í¿ÉÒÔʵÏÖ¶ÔÕâ¸ö½Ó¿ÚµÄ¼à¿ØºÍ¶Ï·Æ÷¹¦ÄÜ¡£

Hystrix Dashboard£¬¼à¿ØÃæ°å£¬ËûÌṩÁËÒ»¸ö½çÃæ£¬¿ÉÒÔ¼à¿Ø¸÷¸ö·þÎñÉϵķþÎñµ÷ÓÃËùÏûºÄµÄʱ¼äµÈ¡£

Turbine£¬¼à¿Ø¾ÛºÏ£¬Ê¹ÓÃHystrix¼à¿Ø£¬ÎÒÃÇÐèÒª´ò¿ªÃ¿Ò»¸ö·þÎñʵÀýµÄ¼à¿ØÐÅÏ¢À´²é¿´¡£¶øTurbine¿ÉÒÔ°ïÖúÎÒÃǰÑËùÓеķþÎñʵÀýµÄ¼à¿ØÐÅÏ¢¾ÛºÏµ½Ò»¸öµØ·½Í³Ò»²é¿´¡£ÕâÑù¾Í²»ÐèÒª°¤¸ö´ò¿ªÒ»¸ö¸öµÄÒ³ÃæÒ»¸ö¸ö²é¿´¡£

ÏÂÃæ¾ÍÊÇʹÓÃÉÏÊöµÄ×Ó¿ò¼ÜʵÏÖµÄΪ·þÎñ¼Ü¹¹µÄ×é¼Ü¹¹Í¼£º

ÔÚÉÏͼÖУ¬Óм¸¸öÐèҪ˵Ã÷µÄµØ·½£º

ZuulÍø¹ØÒ²ÔÚ×¢²áÖÐÐÄ×¢²á£¬°ÑËüÒ²µ±³ÉÒ»¸ö·þÎñÀ´Í³Ò»²é¿´¡£ ¸ºÔؾùºâ²»ÊÇÒ»¸ö¶ÀÁ¢µÄ×é¼þ£¬ËüÔËÐÐÔÚÍø¹Ø¡¢·þÎñµ÷Óõȵط½£¬Ã¿µ±ÐèÒª·ÃÎÊÒ»¸ö·þÎñµÄʱºò£¬¾Í»áͨ¹ýRibbonÀ´»ñµÃÒ»¸ö¸Ã·þÎñµÄʵÀýÈ¥µôÓá£Ribbon´ÓEureka×¢²áÖÐÐÄ»ñµÃ·þÎñºÍʵÀýµÄÁÐ±í£¬¶ø²»ÊÇ·¢ËÍÿ¸öÇëÇóµÄʱºò´Ó×¢²áÖÐÐÄ»ñµÃ¡£

ÎÒÃÇ¿ÉÒÔʹÓÃRestTemplateÀ´½øÐзþÎñ¼äµ÷Óã¬Ò²¿ÉÒÔÅäÖÃFeignClientÀ´Ê¹Ó㬲»¹Üʲô·½Ê½£¬Ö»ÒªÊ¹Ó÷þÎñ×¢²á£¬¾Í»áĬÈÏʹÓÃRibbon¸ºÔؾùºâ¡££¨RestTemplateÐèÒªÌí¼Ó@LoadBalanced£©

ÿ¸ö·þÎñ¶¼¿ÉÒÔ¿ªÆô¼à¿Ø¹¦ÄÜ£¬¿ªÆô¼à¿ØµÄ·þÎñ»áÌṩһ¸öservlet½Ó¿Ú/hystrix.stream£¬Èç¹ûÄãÐèÒª¼à¿ØÕâ¸ö·þÎñµÄijһ¸ö·½·¨µÄÔËÐÐͳ¼Æ£¬¾ÍÔÚÕâ¸ö·½·¨ÉϼÓÒ»¸ö@HystrixCommandµÄ±êÇ©¡£

²é¿´¼à¿ØÐÅÏ¢£¬¾ÍÊÇÔÚHystrix DashboardÉÏÊäÈëÕâ¸ö·þÎñµÄ¼à¿Øurl: http://serviceIp:port/hystrix.stream£¬¾Í¿ÉÒÔÓÃͼ±íµÄ·½Ê½²é¿´ÔËÐÐ¼à¿ØÐÅÏ¢¡£

Èç¹ûÒª°ÑËùÓеķþÎñµÄ¼à¿ØÐÅÏ¢¾ÛºÏÔÚÒ»Æðͳһ²é¿´£¬¾ÍÐèҪʹÓÃTurbineÀ´¾ÛºÏËùÐèÒªµÄ·þÎñµÄ¼à¿ØÐÅÏ¢¡£

ÎÒÃÇÒ²¿ÉÒÔ´ÓÉÏͼÖп´³ö¸Ã¼Ü¹¹µÄ²¿Êð·½Ê½£º

¶ÀÁ¢²¿ÊðÒ»¸öÍø¹ØÓ¦ÓÃ

·þÎñ×¢²áÖÐÐÄºÍ¼à¿Ø¿ÉÒÔÅäÖÃÔÚÒ»¸öÓ¦ÓÃÀҲ¿ÉÒÔÊÇ2¸öÓ¦Óá£

·þÎñ×¢²áÖÐÐÄÒ²¿ÉÒÔ²¿Êð¶à¸ö£¬Í¨¹ýÇøÓòzoneÀ´Çø·Ö£¬À´ÊµÏָ߿ÉÓá£

ÿ¸ö·þÎñ£¬¸ù¾Ý¸ºÔغ͸߿ÉÓõÄÐèÒª£¬²¿ÊðÒ»¸ö»ò¶à¸öʵÀý¡£

Spring Cloud Netflix×é¼þ¿ª·¢

ÉÏÃæËµµ½£¬¿ª·¢»ùÓÚSpring Cloud NetflixµÄ΢·þÎñ·Ç³£¼òµ¥£¬Ò»°ãÎÒÃÇÊǺÍSpring BootÒ»ÆðʹÓã¬Èç¹ûÄãÏëÔÚ×Ô¼ºÔ­ÏȵÄJava WebÓ¦ÓÃÖÐʹÓÃÒ²¿ÉÒÔͨ¹ýÌí¼ÓÏà¹ØÅäÖÃÀ´Êµ¼ù¡£

Óйؿª·¢µÄÏêϸÄÚÈÝ£¬¿ÉÒԲο¼Spring CloudÖÐÎÄÉçÇøµÄÕâ¸öϵÁÐÎÄÕ£¬ÀïÃæÏêϸ½éÉÜÁËÿһÖÖ×é¼þµÄ¿ª·¢¡£ÕâÀ¾ÍÖ»ÊÇÀ´¿´Ò»Ï·þÎñ×¢²áÖÐºÍ¼à¿ØÄ£¿éµÄ¿ª·¢£¬»¹ÓзþÎñµ÷ÓõĿª·¢£¬ÆäËûµÄ¿ÉÒÔÖ±½Ó²Î¿¼ÉÏÃæµÄϵÁÐÎÄÕ¡£

×¢²áºÍ¼à¿ØÖÐÐĵĿª·¢

Õâ¸ö·Ç³£¼òµ¥£¬¾ÍÏÂÃæÒ»¸öÀࣺ

// Ê¡ÂÔimport
@SpringBootApplication
@EnableEurekaServer
@EnableHystrixDashboard
public class ApplicationRegistry {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}

ÕâÀïʹÓÃSpring Boot±êÇ©µÄ@SpringBootApplication˵Ã÷µ±Ç°µÄÓ¦ÓÃÊÇÒ»¸öSpring BootÓ¦Óá£ÕâÑùÎҾͿÉÒÔÖ±½ÓÓÃmainº¯ÊýÔÚIDEÀïÃæÆô¶¯Õâ¸öÓ¦Óã¬Ò²¿ÉÒÔ´ò°üºóÓÃÃüÁîÐÐÆô¶¯¡£µ±È»Ò²¿ÉÒÔ°Ñ´ò°üµÄwar°üÓÃTomcatÖ®ÀàµÄ·þÎñÆ÷Æô¶¯¡£

ʹÓñêÇ©@EnableEurekaServer£¬¾ÍÄÜÔÚÆô¶¯¹ý³ÌÖÐÆô¶¯Eureka·þÎñ×¢²áÖÐÐĵÄ×é¼þ¡£Ëü»á¼àÌýÒ»¸ö¶Ë¿Ú£¬Ä¬ÈÏÊÇ8761£¬À´½ÓÊÕ·þÎñ×¢²á¡£²¢Ìṩһ¸öWebÒ³Ãæ£¬´ò¿ªÒԺ󣬿ÉÒÔ¿´µ½×¢²áµÄ·þÎñ¡£

Ìí¼Ó@EnableHystrixDashboard¾Í»áÌṩһ¸ö¼à¿ØµÄÒ³Ãæ£¬ÎÒÃÇ¿ÉÒÔÔÚÉÏÃæÊäÈëÒª¼à¿ØµÄ·þÎñµÄµØÖ·£¬¾Í¿ÉÒԲ鿴ÆôÓÃÁËHystrix¼à¿ØµÄ½Ó¿ÚµÄµ÷ÓÃÇé¿ö¡£

µ±È»£¬ÎªÁËʹÓÃÉÏÃæµÄ×é¼þ£¬ÎÒÃÇÐèÒªÔÚMavenµÄPOMÎļþÀïÌí¼ÓÏàÓ¦µÄÒÀÀµ£¬±ÈÈçʹÓÃspring-boot-starter-parent£¬ÒÀÀµspring-cloud-starter-eureka-serverºÍspring-cloud-starter-hystrix-dashboardµÈ¡£

·þÎñ¼äµ÷ÓÃ

ÔÚÍøÉϵĸ÷ÖÖÎĵµÖУ¬¶Ô·þÎñ¼äµ÷Ó㬶¼Ã»ÓÐ˵Ã÷µÄºÜÇå³þ£¬ËùÒÔÕâÀïÌØ±ð˵Ã÷Ò»ÏÂÕâ¸öÈçºÎ¿ª·¢¡£

ÓÐÁ½ÖÖ·½Ê½¿ÉÒÔ½øÐзþÎñµ÷Óã¬RestTemplateºÍFeignClient¡£²»¹ÜÊÇʲô·½Ê½£¬Ëû¶¼ÊÇͨ¹ýREST½Ó¿Úµ÷Ó÷þÎñµÄhttp½Ó¿Ú£¬²ÎÊýºÍ½á¹ûĬÈ϶¼ÊÇͨ¹ýJacksonÐòÁл¯ºÍ·´ÐòÁл¯¡£ÒòΪSpring MVCµÄRestController¶¨ÒåµÄ½Ó¿Ú£¬·µ»ØµÄÊý¾Ý¶¼ÊÇͨ¹ýJacksonÐòÁл¯³ÉJSONÊý¾Ý¡£

RestTemplate

ʹÓÃÕâÖÖ·½Ê½£¬Ö»ÐèÒª¶¨ÒåÒ»¸öRestTemplateµÄBean£¬ÉèÖóÉLoadBalanced¼´¿É£º

@Configuration
public class SomeCloudConfiguration {
@LoadBalanced
@Bean
RestTemplate restTemplate() {
return new RestTemplate();
}
}

ÕâÑùÎÒÃǾͿÉÒÔÔÚÐèÒªÓõĵط½×¢ÈëÕâ¸öbeanʹÓãº

public class SomeServiceClass {
@Autowired
private RestTemplate restTemplate;
public String getUserById(Long userId) {
UserDTO results = restTemplate.getForObject
("http://users/getUserDetail/" + userId, UserDTO.class);
return results;
}
}

ÆäÖУ¬usersÊÇ·þÎñID£¬Ribbon»á´Ó·þÎñʵÀýÁбí»ñµÃÕâ¸ö·þÎñµÄÒ»¸öʵÀý£¬·¢ËÍÇëÇ󣬲¢»ñµÃ½á¹û¡£¶ÔÏóUserDTOÐèÒªÐòÁкţ¬ËüµÄ·´ÐòÁкŻá×Ô¶¯Íê³É¡£

FeignClient

³ýÁËÉÏÃæµÄ·½Ê½£¬ÎÒÃÇ»¹¿ÉÒÔÓÃFeignClient¡£»¹ÊÇÖ±½Ó¿´´úÂ룺

@FeignClient(value = "users", path = "/users")
public interface UserCompositeService {
@RequestMapping(value = "/getUserDetail/{id}",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
UserDTO getUserById(@PathVariable Long id);
}

ÎÒÃÇÖ»ÐèҪʹÓÃ@FeignClient¶¨ÒåÒ»¸ö½Ó¿Ú£¬Spring Cloud Feign»á°ïÎÒÃÇÉú³ÉÒ»¸öËüµÄʵÏÖ£¬´ÓÏàÓ¦µÄusers·þÎñ»ñÈ¡Êý¾Ý¡£

ÆäÖУ¬@FeignClient(value = "users", path = "/users/getUserDetail")ÀïÃæµÄvalueÊÇ·þÎñID£¬pathÊÇÕâÒ»×é½Ó¿ÚµÄpathǰ׺¡£

ÔÚÏÂÃæµÄ·½·¨¶¨ÒåÀ¾ÍºÃÏñÉèÖÃSpring MVCµÄ½Ó¿ÚÒ»Ñù£¬¶ÔÓÚÕâ¸ö·½·¨£¬Ëü¶ÔÓ¦µÄURLÊÇ/users/getUserDetail/{id}¡£

È»ºó£¬ÔÚʹÓÃËüµÄʱºò£¬¾ÍÏñ×¢ÈëÒ»¸öÒ»°ãµÄ·þÎñÒ»Ñù×¢ÈëºóʹÓü´¿É£º

public class SomeOtherServiceClass {
@Autowired
private UserCompositeService userService;
public void doSomething() {
// .....
UserDTO results = userService.getUserById(userId);
// other operation...
}
}

Óöµ½µÄÎÊÌâ

ÓÉÓÚSpring Cloud˵Ã÷Îĵµ½ÏÉÙ£¬Î¢·þÎñµÄ¼Ü¹¹Ïà¶ÔÀ´ËµÒ²±È½Ï¸´ÔÓ£¬ÔÚ¿ª·¢µÄʱºò£¬ÄÑÃâ»áÓöµ½ºÜ¶àÎÊÌ⣬ÓÐһЩÊÇÈçºÎ¸üºÃµØÊ¹ÓÃÕâÌ׿ò¼ÜÈ¥´î½¨¼Ü¹¹£¬Ò²ÓÐһЩÎÊÌâÊÇÈçºÎÅäÖá£ÕâÀï¾ÍһЩÎÒÔڴ΢·þÎñ¼Ü¹¹µÄʱºòÓöµ½µÄÎÊÌâÌṩһЩ·½·¨¡£

ÇëÇó³¬Ê±ÎÊÌâ

ZuulÍø¹ØÄ¬Èϵij¬Ê±Ê±¼ä·Ç³£¶Ì£¬ÕâÊÇΪÁ˱£Ö¤µ÷Ó÷þÎñµÄʱºòÄܹ»ºÜ¿ìµÄÏìÓ¦¡£µ«ÊÇ£¬ÎÒÃÇ»áÓÐһЩҵÎñ·½·¨ÔËÐеÄʱ¼ä±È½Ï³¤£¬ÌرðÊÇÔÚ²âÊÔ·þÎñÆ÷¡£Õâʱºò£¬¾ÍÐèÒªµ÷Õû³¬Ê±Ê±¼ä¡£Õâ¸ö³¬Ê±Óм¸¸öµØ·½£º

¸ºÔؾùºâRibbon£¬¸ºÔؾùºâÓÐÒ»¸ö³¬Ê±µÄÉèÖ㬰üÀ¨Á´½Óʱ¼äºÍ¶Áȡʱ¼ä

Hystrix¶Ï·Æ÷Ò²ÓÐÒ»¸ö³¬Ê±ÉèÖã¬ËüÐèÒªÔÚÊʵ±µÄʱºò·µ»Ø£¬¶ø²»ÊÇÒ»Ö±µÈÔÚÒ»¸öÇëÇóÉÏ¡£

¶ÔÓ¦µÄÅäÖÃÈçÏ£º

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds = 30000
ribbon:
ReadTimeout: 30000
ConnectTimeout: 15000

·þÎñIDµÄÎÊÌâ

·þÎñµÄID£¬Ò²¾ÍÊÇ·þÎñÃû£¬¿ÉÒÔͨ¹ýÔÚapplication.yml»òÕßBootstrap.ymlÀïÃæÉèÖãº

spring:
application:
name: users

¹ÜÀí·¾¶µÄÎÊÌâ

Spring BootµÄÓ¦ÓÃĬÈ϶¼ÊÇ¿ª·ÅһЩ¹ÜÀíµÄ½Ó¿Ú£¬Èç/info¡¢/healthºÍmetrics¼à¿ØµÄ½Ó¿Ú/metricsµÈ¡£Èç¹ûÄãʹÓÃĬÈϵÄ·¾¶£¬Ê¹ÓÃHystrix¼à¿Ø¡¢·þÎñ×¢²áÖÐÐĵļàÌý·þÎñ״̬¶¼²»»áÓÐÎÊÌ⣬µ«ÊÇ£¬Èç¹ûÄãÏëʹÓñðµÄ·¾¶£¬ÀýÈç/management/info¡¢/management/health£¬ÄǾÍÇ£³¶µ½ºÜ¶àµØ·½£¬¶øÇÒ£¬Ã¿¸ö°æ±¾¿ÉÄÜ»á»ò¶à»òÉÙµÄÓÐһЩÎÊÌ⣬µ¼ÖÂÄãÓöµ½µÄÎÊÌ⻹»á²»Ò»Ñù¡£ÎÒÓöµ½¹ýµÄÎÊÌâÓУº

×¢²á³É¹¦È´ÕÒ²»µ½·þÎñ

Ê×ÏÈ£¬×¢²á¿ÉÒԳɹ¦£¬ÔÚEureka·þÎñÆ÷Ò³ÃæÉÏÒ²¿ÉÒÔ¿´µ½¸÷¸ö·þÎñ¡£µ«ÊÇ£¬µ±Äãͨ¹ýÍø¹Øµ÷ÓõÄʱºò£¬È´×ÜÊÇÌáʾ·þÎñÕÒ²»µ½¡£Õâʱºò¿ÉÄܾÍÐèÒªÔÚÿ¸ö·þÎñµÄapplication.ymlÀïÃæ½øÐÐÈçÏÂÅäÖãº

eureka:
instance:
nonSecurePort: ${server.port}
appname: ${spring.application.name}
statusPageUrlPath: ${management.context-path}/info
healthCheckUrlPath: ${management.context-path}/health

¼òµ¥À´Ëµ£¬Õâ¾ÍÊǸæËßÔÚ×¢²áµÄʱºò£¬Í¬Ê±¸æËßEureka·þÎñÆ÷£¬·þÎñµÄ¶Ë¿ÚÊÇʲô£¬ÓÃÀ´¼àÌý״̬µÄ·¾¶ÊÇʲô¡£ÕâÊÇÒòΪÎÒÃÇʹÓÃÁ˲»Í¬µÄ¹ÜÀí½Ó¿Ú·¾¶£¬¶øEureka·þÎñÆ÷ûÓÐʹÓÃÏàÓ¦µÄ·¾¶¡£

Èç¹ûÒ»ÇÐÕý³££¬ÄãÔÚEureka·þÎñÆ÷Éϵã»÷Ò»¸ö×¢²áµÄ·þÎñ£¬Ó¦¸ÃÄÜ´ò¿ªÒ»¸öinfoÒ³Ãæ¡£Ëû¿ÉÄÜÊǿհ׵쬵«ÊÇ£¬ÖÁÉÙEureka·þÎñÆ÷ÄÜͨ¹ýÕâ¸öÖªµÀ·þÎñµÄÔËÐÐÕý³£¡£

Õâ¸öÎÊÌâÒ²²»ÊÇÔÚËùÓеİ汾¶¼´æÔÚ£¬Ö»ÊÇÔÚijһЩSpring CloudµÄ°æ±¾´æÔÚ¡£

ÉèÖÃÁ˹ÜÀí·¾¶µÄHystrix¼à¿Ø

¸Õ²Å˵ÁËHystrix¼à¿ØµÄ·¾¶ÊÇhttp://serviceIp:port/hystrix.stream£¬Èç¹ûÄãÉèÖÃÁ˹ÜÀí½Ó¿ÚµÄ·¾¶£¬ÄÇôÕâ¸ö¼à¿ØÂ·¾¶Ò²»á±ä³É£º

http://serviceIp:port/${management.context-path}/hystrix.stream

Èç¹ûÕâʱºò£¬ÄãÔÙÏëʹÓÃTurbine¾ÛºÏ£¬Turbine¾Í»áÕÒ²»µ½ÁË£¬ÒòΪËüĬÈÏʹÓÃEureka·þÎñÆ÷ÉϵķþÎñÆ÷µØÖ·ºÍ¶Ë¿Ú£¬ÔÚºóÃæÌí¼Ó/hystrix.stream¡£Õâʱºò£¬Äã¾ÍÐèÒªÉèÖÃTurbine£º

turbine:
aggregator:
clusterConfig: USER
appConfig: USER
instanceUrlSuffix:
USER: /user/hystrix.stream

¹ÜÀí·¾¶µÄ°²È«ÐÔ

¶ÔÓÚ΢·þÎñ²¿ÊðµÄ¼¸Ì¨»úÆ÷£¬¿ÉÒÔͨ¹ý¿ªÍ¨·À»ðǽÀ´¿ØÖÆË­¿ÉÒÔ·ÃÎʹÜÀí½Ó¿Ú£¬µ«ÊÇ£¬¼´Ê¹ÊÇÕâÑù£¬ÎªÁ˰²È«ÐԵȣ¬ÎÒÒ»°ã»¹ÊÇ»á°Ñ¹ÜÀí¶Ë½Ó¿ÚÒ²ÓÃSpring SecurityÀ´±£»¤¡£ÕâÑùÒ»À´£¬¼à¿Ø½Ó¿Ú¾Íû·¨Ö±½Ó·ÃÎÊÁË¡£

·þÎñ¼äµ÷ÓõÄȨÏÞÑéÖ¤

Ò»°ãÎÒÃǵÄAPI½Ó¿Ú¶¼ÐèҪijÖÖÊÚȨ²ÅÄÜ·ÃÎÊ£¬µÇ½³É¹¦ÒÔºó£¬È»ºóͨ¹ýtoken»òÕßcookieµÈ·½Ê½²ÅÄܵ÷Óýӿڡ£

ʹÓÃSpring Cloud Netfix¿ò¼ÜµÄ»°£¬µÇ¼µÄʱºò£¬°ÑµÇ¼ÇëÇóת·¢µ½ÏàÓ¦µÄÓû§·þÎñÉÏ£¬µÇ½³É¹¦ºó£¬»áÉèÖÃcookie»òheader tokenµÈ¡£È»ºó¿Í»§¶Ë½ÓÏÂÀ´µÄÇëÇó¾Í»á´ø×ÅÕâЩÑéÖ¤ÐÅÏ¢£¬´ÓZuulÍø¹Ø´«µ½ÏàÓ¦µÄ·þÎñÉϽøÐÐÑéÖ¤¡£

ZuulÍø¹ØÔÚ°ÑÇëÇóת·¢µ½ºǫ́µÄ·þÎñµÄʱºò£¬»áĬÈϰÑһЩheader´«µ½·þÎñ¶Ë£¬È磺Cookie¡¢Set-Cookie¡¢Authorization¡£ÕâÑù£¬¿Í»§¶ËÇëÇóµÄÏà¹Øheaders¾Í¿ÉÒÔ´«µÝµ½·þÎñ¶Ë£¬·þÎñ¶ËÉèÖõÄcookieÒ²¿ÉÒÔ´«µ½¿Í»§¶Ë¡£

µ«ÊÇ£¬Èç¹ûÄãÏë½ûֹijЩheader͸´«µ½·þÎñ¶Ë£¬¿ÉÒÔÔÚZuulÍø¹ØµÄapplication.ymlÅäÖÃÀïͨ¹ýÏÂÃæµÄ·½Ê½½ûÓãº

zuul:
routes:
users:
path: /users/**
sensitiveHeaders: Cookie,Set-Cookie,Authorization
serviceId: user

¸Õ²Å˵ÁËÎÒÃǵÄij¸ö·þÎñÓÐʱºòÐèÒªµ÷ÓÃÁíÒ»¸ö·þÎñ£¬Õâʱºò£¬Õâ¸öÇëÇó²»Êǿͻ§¶Ë·¢Æð£¬ËûµÄÇëÇóµÄheaderÀïÃæÒ²²»»áÓÐÈκÎÑéÖ¤ÐÅÏ¢¡£Õâʱºò£¬ÒªÃ´£¬Í¨¹ý·À»ðǽµÈÉèÖ㬱£Ö¤·þÎñ¼äµ÷ÓõĽӿڣ¬Ö»ÄÜij¼¸¸öµØÖ··ÃÎÊ£»ÒªÃ´£¬¾Íͨ¹ýijÖÖ·½Ê½ÉèÖÃheader¡£

ͬʱ£¬Èç¹ûÄãÏëÔÚij¸ö·þÎñÀïÃæ»ñµÃÕâ¸öÇëÇóµÄÕæÊÇIP£¬£¨ÒòΪÇëÇóµÄͨ¹ýÍø¹Ø×ª·¢¶øÀ´£¬ÄãÖ±½Óͨ¹ýrequest»ñµÃipµÃµ½µÄÊÇÍø¹ØµÄIP£©£¬¾Í¿ÉÒÔ´ÓheaderX-Forwarded-Host»ñµÃ¡£Èç¹ûÏë½ûÓÃÕâ¸öheader£¬Ò²¿ÉÒÔ£º

zuul.addProxyHeaders = false

Èç¹ûÄãʹÓÃRestTemplateµÄ·½Ê½µ÷Ó㬿ÉÒÔÔÚÇëÇóÀïÃæÌí¼ÓÒ»¸öÓÐheaderµÄOptions¡£

Ò²¿ÉÒÔͨ¹ýÈçϵÄÀ¹½ØÆ÷µÄ·½Ê½ÉèÖã¬Ëü¶ÔRestTemplate·½Ê½ºÍFeignClientµÄ·½Ê½¶¼¿ÉÒÔÆð×÷Óãº

@Bean
public RequestInterceptor requestInterceptor() {
return new RequestInterceptor() {
@Override
public void apply(RequestTemplate template) {
String authToken = getToken();
template.header(AUTH_TOKEN_HEADER, authToken);
}
};
}

   
3314 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

ÆóÒµ¼Ü¹¹¡¢TOGAFÓëArchiMate¸ÅÀÀ
¼Ü¹¹Ê¦Ö®Â·-ÈçºÎ×öºÃÒµÎñ½¨Ä££¿
´óÐÍÍøÕ¾µçÉÌÍøÕ¾¼Ü¹¹°¸ÀýºÍ¼¼Êõ¼Ü¹¹µÄʾÀý
ÍêÕûµÄArchimateÊÓµãÖ¸ÄÏ£¨°üÀ¨Ê¾Àý£©
Ïà¹ØÎĵµ

Êý¾ÝÖÐ̨¼¼Êõ¼Ü¹¹·½·¨ÂÛÓëʵ¼ù
ÊÊÓÃArchiMate¡¢EA ºÍ iSpace½øÐÐÆóÒµ¼Ü¹¹½¨Ä£
ZachmanÆóÒµ¼Ü¹¹¿ò¼Ü¼ò½é
ÆóÒµ¼Ü¹¹ÈÃSOAÂ䵨
Ïà¹Ø¿Î³Ì

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù

×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

Ïà¹ØÎÄÕÂ


ר¼ÒÊӽǿ´ITÓë¼Ü¹¹
Èí¼þ¼Ü¹¹Éè¼Æ
ÃæÏò·þÎñÌåϵ¼Ü¹¹ºÍÒµÎñ×é¼þ
ÈËÈËÍøÒÆ¶¯¿ª·¢¼Ü¹¹
¼Ü¹¹¸¯»¯Ö®ÃÕ
̸ƽ̨¼´·þÎñPaaS

Ïà¹ØÅàѵ¿Î³Ì


ÃæÏòÓ¦Óõļܹ¹Éè¼ÆÊµ¼ù
µ¥Ôª²âÊÔ+ÖØ¹¹+Éè¼ÆÄ£Ê½
Èí¼þ¼Ü¹¹Ê¦¡ª¸ß¼¶Êµ¼ù
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù
SOAÌåϵ½á¹¹Êµ¼ù

³É¹¦°¸Àý


Èñ°²¿Æ¼¼ Èí¼þ¼Ü¹¹Éè¼Æ·½·¨
³É¶¼ ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
ÉϺ£Æû³µ ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
±±¾© Èí¼þ¼Ü¹¹Éè¼Æ
ÉϺ£ Èí¼þ¼Ü¹¹Éè¼Æ°¸ÀýÓëʵ¼ù
±±¾© ¼Ü¹¹Éè¼Æ·½·¨°¸ÀýÓëʵ¼ù
ÉîÛÚ ¼Ü¹¹Éè¼Æ·½·¨°¸ÀýÓëʵ¼ù
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù