1
ΪʲôÐèÒª·þÎñ·¢ÏÖ
¼òµ¥À´Ëµ£¬·þÎñ»¯µÄºËÐľÍÊǽ«´«Í³µÄһվʽӦÓøù¾ÝÒµÎñ²ð·Ö³ÉÒ»¸öÒ»¸öµÄ·þÎñ£¬¶øÎ¢·þÎñÔÚÕâ¸ö»ù´¡ÉÏÒª¸ü³¹µ×µØÈ¥ñîºÏ£¨²»ÔÙ¹²ÏíDB¡¢KV£¬È¥µôÖØÁ¿¼¶ESB£©£¬²¢ÇÒÇ¿µ÷DevOpsºÍ¿ìËÙÑÝ»¯¡£Õâ¾ÍÒªÇóÎÒÃDZØÐë²ÉÓÃÓëһվʽʱ´ú¡¢·ºSOAʱ´ú²»Í¬µÄ¼¼ÊõÕ»£¬¶øSpring
Cloud¾ÍÊÇÆäÖеÄٮٮÕß¡£
DevOpsÊÇÓ¢ÎÄDevelopmentºÍOperationsµÄºÏÌ壬ËûÒªÇ󿪷¢¡¢²âÊÔ¡¢ÔËά½øÐÐÒ»Ì廯µÄºÏ×÷£¬½øÐиüС¡¢¸üƵ·±¡¢¸ü×Ô¶¯»¯µÄÓ¦Ó÷¢²¼£¬ÒÔ¼°Î§ÈÆÓ¦Óüܹ¹À´¹¹½¨»ù´¡ÉèÊ©µÄ¼Ü¹¹¡£Õâ¾ÍÒªÇóÓ¦Óóä·ÖµÄÄÚ¾Û£¬Ò²·½±ãÔËάºÍ¹ÜÀí¡£Õâ¸öÀíÄîÓë΢·þÎñÀíÄı¶øºÏ¡£
½ÓÏÂÀ´ÎÒÃÇ´Ó·þÎñ»¯¼Ü¹¹ÑݽøµÄ½Ç¶ÈÀ´¿´¿´ÎªÊ²Ã´Spring Cloud¸üÊÊӦ΢·þÎñ¼Ü¹¹¡£
1.1 ´ÓʹÓÃnginx˵Æð
×î³õµÄ·þÎñ»¯½â¾ö·½°¸ÊǸøÌṩÏàͬ·þÎñÌṩһ¸öͳһµÄÓòÃû£¬È»ºó·þÎñµ÷ÓÃÕßÏòÕâ¸öÓòÃû·¢ËÍHTTPÇëÇó£¬ÓÉNginx¸ºÔðÇëÇóµÄ·Ö·¢ºÍÌø×ª¡£NginxArch.png

ÕâÖּܹ¹´æÔںܶàÎÊÌâ:
Nginx×÷ΪÖмä²ã£¬ÔÚÅäÖÃÎļþÖÐñîºÏÁË·þÎñµ÷ÓõÄÂß¼£¬ÕâÏ÷ÈõÁË΢·þÎñµÄÍêÕûÐÔ£¬Ò²Ê¹µÃNginxÔÚÒ»¶¨³Ì¶ÈÉϱä³ÉÁËÒ»¸öÖØÁ¿¼¶µÄESB¡£
·þÎñµÄÐÅÏ¢·ÖÉ¢ÔÚ¸÷¸öϵͳ£¬ÎÞ·¨Í³Ò»¹ÜÀíºÍά»¤¡£Ã¿Ò»´ÎµÄ·þÎñµ÷Óö¼ÊÇÒ»´Î³¢ÊÔ£¬·þÎñÏû·ÑÕß²¢²»ÖªµÀÓÐÄÄЩʵÀýÔÚ¸øËûÃÇÌṩ·þÎñ¡£Õâ²»·ûºÏDevOpsµÄÀíÄî¡£
ÎÞ·¨Ö±¹ÛµÄ¿´µ½·þÎñÌṩÕߺͷþÎñÏû·ÑÕßµ±Ç°µÄÔËÐÐ×´¿öºÍͨÐÅÆµÂÊ¡£ÕâÒ²²»·ûºÏDevOpsµÄÀíÄî¡£
Ïû·ÑÕßµÄʧ°ÜÖØ·¢£¬¸ºÔؾùºâµÈ¶¼Ã»ÓÐͳһ²ßÂÔ£¬Õâ¼Ó´óÁË¿ª·¢Ã¿¸ö·þÎñµÄÄѶȣ¬²»ÀûÓÚ¿ìËÙÑÝ»¯¡£
ΪÁ˽â¾öÉÏÃæµÄÎÊÌ⣬ÎÒÃÇÐèÒªÒ»¸öÏֳɵÄÖÐÐÄ×é¼þ¶Ô·þÎñ½øÐÐÕûºÏ£¬½«Ã¿¸ö·þÎñµÄÐÅÏ¢»ã×Ü£¬°üÀ¨·þÎñµÄ×é¼þÃû³Æ¡¢µØÖ·¡¢ÊýÁ¿µÈ¡£·þÎñµÄµ÷Ó÷½ÔÚÇëÇóijÏî·þÎñʱÊ×ÏÈͨ¹ýÖÐÐÄ×é¼þ»ñÈ¡ÌṩÕâÏî·þÎñµÄʵÀýµÄÐÅÏ¢£¨IP¡¢¶Ë¿ÚµÈ£©£¬ÔÙͨ¹ýĬÈÏ»ò×Ô¶¨ÒåµÄ²ßÂÔÑ¡Ôñ¸Ã·þÎñµÄijһÌṩÕßÖ±½Ó½øÐзÃÎÊ¡£ËùÒÔ£¬ÎÒÃÇÒýÈëÁËDubbo¡£
1.2 »ùÓÚDubboʵÏÖ΢·þÎñ
DubboÊǰ¢À↑ԴµÄÒ»¸öSOA·þÎñÖÎÀí½â¾ö·½°¸£¬Îĵµ·á¸»£¬ÔÚ¹úÄÚµÄʹÓöȷdz£¸ß¡£
ʹÓÃDubbo¹¹½¨µÄ΢·þÎñ£¬ÒѾ¿ÉÒԱȽϺõؽâ¾öÉÏÃæÌáµ½µÄÎÊÌ⣺DubboArch.png

µ÷ÓÃÖмä²ã±ä³ÉÁË¿ÉÑ¡×é¼þ£¬Ïû·ÑÕß¿ÉÒÔÖ±½Ó·ÃÎÊ·þÎñÌṩÕß¡£
·þÎñÐÅÏ¢±»¼¯Öе½RegistryÖУ¬ÐγÉÁË·þÎñÖÎÀíµÄÖÐÐÄ×é¼þ¡£
ͨ¹ýMonitor¼à¿ØÏµÍ³£¬¿ÉÒÔÖ±¹ÛµØÕ¹Ê¾·þÎñµ÷ÓõÄͳ¼ÆÐÅÏ¢¡£
Consumer¿ÉÒÔ½øÐиºÔؾùºâ¡¢·þÎñ½µ¼¶µÄÑ¡Ôñ¡£
µ«ÊǶÔÓÚ΢·þÎñ¼Ü¹¹¶øÑÔ£¬DubboÒ²²¢²»ÊÇʮȫʮÃÀµÄ£º
RegistryÑÏÖØÒÀÀµµÚÈý·½×é¼þ£¨zookeeper»òÕßredis£©£¬µ±ÕâЩ×é¼þ³öÏÖÎÊÌâʱ£¬·þÎñµ÷Óúܿì¾Í»áÖжϡ£
DUBBOÖ»Ö§³ÖRPCµ÷Óá£Ê¹µÃ·þÎñÌṩ·½Óëµ÷Ó÷½ÔÚ´úÂëÉϲúÉúÁËÇ¿ÒÀÀµ£¬·þÎñÌṩÕßÐèÒª²»¶Ï½«°üº¬¹«¹²´úÂëµÄjar°ü´ò°ü³öÀ´¹©Ïû·ÑÕßʹÓá£Ò»µ©´ò°ü³öÏÖÎÊÌ⣬¾Í»áµ¼Ö·þÎñµ÷Óóö´í¡£
×îÎªÖØÒªµÄÊÇ£¬DUBBOÏÖÔÚÒѾֹͣά»¤ÁË£¬¶ÔÓÚ¼¼Êõ·¢Õ¹µÄÐÂÐèÇó£¬ÐèÒªÓÉ¿ª·¢Õß×ÔÐÐÍØÕ¹Éý¼¶¡£Õâ¶ÔÓںܶàÏëÒª²ÉÓÃ΢·þÎñ¼Ü¹¹µÄÖÐСÈí¼þ×éÖ¯£¬ÏÔÈ»ÊDz»Ì«ºÏÊʵġ£
ĿǰGithubÉçÇøÉÏÓÐÒ»¸öDUBBOµÄÉý¼¶°æ£¬½ÐDUBBOX£¬ÌṩÁ˸ü¸ßЧµÄRPCÐòÁл¯·½Ê½ºÍRESTµ÷Ó÷½Ê½¡£µ«ÊǸÃÏîĿҲ»ù±¾Í£Ö¹Î¬»¤ÁË¡£
1.3 еÄÑ¡Ôñ¡ª¡ªSpring Cloud
×÷ΪÐÂÒ»´úµÄ·þÎñ¿ò¼Ü£¬Spring CloudÌá³öµÄ¿ÚºÅÊÇ¿ª·¢¡°ÃæÏòÔÆ»·¾³µÄÓ¦ÓóÌÐò¡±£¬ËüΪ΢·þÎñ¼Ü¹¹ÌṩÁ˸ü¼ÓÈ«ÃæµÄ¼¼ÊõÖ§³Ö¡£
½áºÏÎÒÃÇÒ»¿ªÊ¼Ìáµ½µÄ΢·þÎñµÄËßÇó£¬ÎÒÃǰÑSpring CloudÓëDUBBO½øÐÐÒ»·¬¶Ô±È£º

Spring CloudÅׯúÁËDubboµÄRPCͨÐÅ£¬²ÉÓõÄÊÇ»ùÓÚHTTPµÄREST·½Ê½¡£ÑϸñÀ´Ëµ£¬ÕâÁ½ÖÖ·½Ê½¸÷ÓÐÓÅÁÓ¡£ËäÈ»´ÓÒ»¶¨³Ì¶ÈÉÏÀ´Ëµ£¬ºóÕßÎþÉüÁË·þÎñµ÷ÓõÄÐÔÄÜ£¬µ«Ò²±ÜÃâÁËÉÏÃæÌáµ½µÄÔÉúRPC´øÀ´µÄÎÊÌâ¡£¶øÇÒRESTÏà±ÈRPC¸üΪÁé»î£¬·þÎñÌṩ·½ºÍµ÷Ó÷½µÄÒÀÀµÖ»ÒÀ¿¿Ò»Ö½ÆõÔ¼£¬²»´æÔÚ´úÂë¼¶±ðµÄÇ¿ÒÀÀµ£¬ÕâÔÚÇ¿µ÷¿ìËÙÑÝ»¯µÄ΢·þÎñ»·¾³Ï£¬ÏԵøü¼ÓºÏÊÊ¡£
ºÜÃ÷ÏÔ£¬Spring CloudµÄ¹¦ÄܱÈDUBBO¸ü¼ÓÇ¿´ó£¬º¸ÇÃæ¸ü¹ã£¬¶øÇÒ×÷ΪSpringµÄÈÍ·ÏîÄ¿£¬ËüÒ²Äܹ»ÓëSpring
Framework¡¢Spring Boot¡¢Spring Data¡¢Spring BatchµÈÆäËûSpringÏîÄ¿ÍêÃÀÈںϣ¬ÕâЩ¶ÔÓÚ΢·þÎñ¶øÑÔÊÇÖÁ¹ØÖØÒªµÄ¡£Ç°ÃæÌáµ½£¬Î¢·þÎñ±³ºóÒ»¸öÖØÒªµÄÀíÄî¾ÍÊdzÖÐø¼¯³É¡¢¿ìËÙ½»¸¶£¬¶øÔÚ·þÎñÄÚ²¿Ê¹ÓÃÒ»¸öͳһµÄ¼¼Êõ¿ò¼Ü£¬ÏÔÈ»±È°Ñ·ÖÉ¢µÄ¼¼Êõ×éºÏµ½Ò»Æð¸üÓÐЧÂÊ¡£¸üÖØÒªµÄÊÇ£¬Ïà±ÈÓÚDubbo£¬ËüÊÇÒ»¸öÕýÔÚ³ÖÐøÎ¬»¤µÄ¡¢ÉçÇø¸ü¼Ó»ðÈȵĿªÔ´ÏîÄ¿£¬Õâ¾Í±£Ö¤Ê¹ÓÃËü¹¹½¨µÄϵͳ£¬¿ÉÒÔ³ÖÐøµØµÃµ½¿ªÔ´Á¦Á¿µÄÖ§³Ö¡£
2. Spring Cloud Netflix ×é¼þ
NetflixºÍSpring CloudÊÇʲô¹ØÏµÄØ£¿NetflixÊÇÒ»¼Ò³É¹¦Êµ¼ù΢·þÎñ¼Ü¹¹µÄ»¥ÁªÍø¹«Ë¾£¬¼¸Äêǰ£¬Netflix¾Í°ÑËüµÄ¼¸ºõÕû¸ö΢·þÎñ¿ò¼ÜÕ»¿ªÔ´¹±Ï׸øÁËÉçÇø¡£Spring±³ºóµÄPivotalÔÚ2015ÄêÍÆ³öµÄSpring
Cloud¿ªÔ´²úÆ·£¬Ö÷Òª¶ÔNetflix¿ªÔ´×é¼þµÄ½øÒ»²½·â×°£¬·½±ãSpring¿ª·¢ÈËÔ±¹¹½¨Î¢·þÎñ»ù´¡¿ò¼Ü¡£
¶ÔÓÚ΢·þÎñµÄÖÎÀí¶øÑÔ£¬ºËÐľÍÊÇ·þÎñµÄ×¢²áºÍ·¢ÏÖ¡£ËùÒÔÑ¡ÔñÄĸö×é¼þ£¬ºÜ´ó³Ì¶ÈÉÏÒª¿´Ëü¶ÔÓÚ·þÎñ×¢²áÓë·¢ÏֵĽâ¾ö·½°¸¡£ÔÚÕâ¸öÁìÓò£¬¿ªÔ´¼Ü¹¹ºÜ¶à£¬×î³£¼ûµÄÊÇZookeeper£¬µ«Õâ²¢²»ÊÇÒ»¸ö×î¼ÑÑ¡Ôñ¡£
ÔÚ·Ö²¼Ê½ÏµÍ³ÁìÓòÓиöÖøÃûµÄCAP¶¨Àí£ºC¡ª¡ªÊý¾ÝÒ»ÖÂÐÔ£¬A¡ª¡ª·þÎñ¿ÉÓÃÐÔ£¬P¡ª¡ª·þÎñ¶ÔÍøÂç·ÖÇø¹ÊÕϵÄÈÝ´íÐÔ¡£ÕâÈý¸öÌØÐÔÔÚÈκηֲ¼Ê½ÏµÍ³Öв»ÄÜͬʱÂú×㣬×î¶àͬʱÂú×ãÁ½¸ö¡£
ZookeeperÊÇÖøÃûHadoopµÄÒ»¸ö×ÓÏîÄ¿£¬ºÜ¶à³¡¾°ÏÂZookeeperÒ²×÷ΪService·¢ÏÖ·þÎñ½â¾ö·½°¸¡£Zookeeper±£Ö¤µÄÊÇCP£¬¼´ÈκÎʱ¿Ì¶Ô
ZookeeperµÄ·ÃÎÊÇëÇóÄܵõ½Ò»ÖµÄÊý¾Ý½á¹û£¬Í¬Ê±ÏµÍ³¶ÔÍøÂç·Ö¸î¾ß±¸ÈÝ´íÐÔ£¬µ«ÊÇËü²»Äܱ£Ö¤Ã¿´Î·þÎñÇëÇóµÄ¿ÉÓÃÐÔ¡£´Óʵ¼ÊÇé¿öÀ´·ÖÎö£¬ÔÚʹÓÃZookeeper»ñÈ¡·þÎñÁбíʱ£¬Èç¹ûzookeeperÕýÔÚÑ¡Ö÷£¬»òÕßZookeeper¼¯ÈºÖаëÊýÒÔÉÏ»úÆ÷²»¿ÉÓã¬ÄÇô½«¾ÍÎÞ·¨»ñµÃÊý¾ÝÁË¡£ËùÒÔ˵£¬Zookeeper²»Äܱ£Ö¤·þÎñ¿ÉÓÃÐÔ¡£
³ÏÈ»£¬¶ÔÓÚ´ó¶àÊý·Ö²¼Ê½»·¾³£¬ÓÈÆäÊÇÉæ¼°µ½Êý¾Ý´æ´¢µÄ³¡¾°£¬Êý¾ÝÒ»ÖÂÐÔÓ¦¸ÃÊÇÊ×Ïȱ»±£Ö¤µÄ£¬ÕâÒ²ÊÇzookeeperÉè¼Æ³ÉCPµÄÔÒò¡£µ«ÊǶÔÓÚ·þÎñ·¢ÏÖ³¡¾°À´Ëµ£¬Çé¿ö¾Í²»Ì«Ò»ÑùÁË£ºÕë¶Ôͬһ¸ö·þÎñ£¬¼´Ê¹×¢²áÖÐÐĵIJ»Í¬½Úµã±£´æµÄ·þÎñÌṩÕßÐÅÏ¢²»¾¡Ïàͬ£¬Ò²²¢²»»áÔì³ÉÔÖÄÑÐԵĺó¹û¡£ÒòΪ¶ÔÓÚ·þÎñÏû·ÑÕßÀ´Ëµ£¬ÄÜÏû·Ñ²ÅÊÇ×îÖØÒªµÄ¡ª¡ªÄõ½¿ÉÄܲ»ÕýÈ·µÄ·þÎñʵÀýÐÅÏ¢ºó³¢ÊÔÏû·Ñһϣ¬Ò²ºÃ¹ýÒòΪÎÞ·¨»ñȡʵÀýÐÅÏ¢¶ø²»È¥Ïû·Ñ¡£ËùÒÔ£¬¶ÔÓÚ·þÎñ·¢ÏÖ¶øÑÔ£¬¿ÉÓÃÐÔ±ÈÊý¾ÝÒ»ÖÂÐÔ¸ü¼ÓÖØÒª¡ª¡ªAPʤ¹ýCP¡£¶øSpring
Cloud NetflixÔÚÉè¼ÆEurekaʱ×ñÊØµÄ¾ÍÊÇAPÔÔò¡£
Eureka±¾ÉíÊÇNetflix¿ªÔ´µÄÒ»¿îÌṩ·þÎñ×¢²áºÍ·¢ÏֵIJúÆ·£¬²¢ÇÒÌṩÁËÏàÓ¦µÄJava·â×°¡£ÔÚËüµÄʵÏÖÖУ¬½ÚµãÖ®¼äÊÇÏ໥ƽµÈµÄ£¬²¿·Ö×¢²áÖÐÐĵĽڵã¹ÒµôÒ²²»»á¶Ô¼¯ÈºÔì³ÉÓ°Ï죬¼´Ê¹¼¯ÈºÖ»Ê£Ò»¸ö½Úµã´æ»î£¬Ò²¿ÉÒÔÕý³£Ìṩ·¢ÏÖ·þÎñ¡£ÄÄÅÂÊÇËùÓеķþÎñ×¢²á½Úµã¶¼¹ÒÁË£¬Eureka
ClientsÉÏÒ²»á»º´æ·þÎñµ÷ÓõÄÐÅÏ¢¡£Õâ¾Í±£Ö¤ÁËÎÒÃÇ΢·þÎñÖ®¼äµÄ»¥Ïàµ÷ÓÃÊÇ×ã¹»½¡×³µÄ¡£
³ý´ËÖ®Í⣬Spring Cloud Netflix±³ºóÇ¿´óµÄ¿ªÔ´Á¦Á¿£¬Ò²´ÙʹÎÒÃÇÑ¡ÔñÁËSpring
Cloud Netflix£º
ǰÎÄÌáµ½¹ý£¬Spring CloudµÄÉçÇøÊ®·Ö»îÔ¾£¬ÆäÔÚÒµ½çµÄÓ¦ÓÃҲʮ·Ö¹ã·º£¨ÓÈÆäÊǹúÍ⣩£¬¶øÇÒÕû¸ö¿ò¼ÜÒ²¾ÊÜסÁËNetflixÑÏ¿áÉú²ú»·¾³µÄ¿¼Ñé¡£
³ýÁË·þÎñ×¢²áºÍ·¢ÏÖ£¬Spring Cloud NetflixµÄÆäËû¹¦ÄÜҲʮ·ÖÇ¿´ó£¬°üÀ¨Ribbon£¬hystrix£¬Feign£¬ZuulµÈ×é¼þ£¬½áºÏµ½Ò»Æð£¬È÷þÎñµÄµ÷Óá¢Â·ÓÉÒ²±äµÃÒì³£ÈÝÒס£
Spring Cloud Netflix×÷ΪSpringµÄÖØÁ¿¼¶ÕûºÏ¿ò¼Ü£¬Ê¹ÓÃËüÒ²Òâζ×ÅÎÒÃÇÄÜ´ÓSpring»ñÈ¡µ½¾Þ´óµÄ±ãÀû¡£Spring
CloudµÄÆäËû×ÓÏîÄ¿£¬±ÈÈçSpring Cloud Stream¡¢Spring Cloud ConfigµÈµÈ£¬¶¼ÎªÎ¢·þÎñµÄ¸÷ÖÖÐèÇóÌṩÁËһվʽµÄ½â¾ö·½°¸¡£
3. Spring Cloud ·þÎñ·¢ÏÖ
Spring Cloud NetflixµÄºËÐÄÊÇÓÃÓÚ·þÎñ×¢²áÓë·¢ÏÖµÄEureka£¬½ÓÏÂÀ´ÎÒÃǽ«ÒÔEurekaΪÏßË÷£¬½éÉÜEureka¡¢Ribbon¡¢Hystrix¡¢FeignÕâЩSpring
Cloud NetflixÖ÷Òª×é¼þ¡£
3.1 ·þÎñ×¢²áÓë·¢ÏÖ¡ª¡ªEureka
EurekaÕâ¸ö´ÊÀ´Ô´ÓÚ¹ÅÏ£À°ÓÒâΪ¡°ÎÒÕÒµ½ÁË£¡ÎÒ·¢ÏÖÁË£¡¡±£¬¾Ý´«£¬°¢»ùÃ×µÂÔÚÏ´Ôèʱ·¢ÏÖ¸¡Á¦ÔÀí£¬¸ßÐ˵ÃÀ´²»¼°´©ÉÏ¿ã×Ó£¬Åܵ½½ÖÉÏ´óº°£º¡°Eureka(ÎÒÕÒµ½ÁË)£¡"¡£
EurekaÓɶà¸öinstance(·þÎñʵÀý)×é³É£¬ÕâЩ·þÎñʵÀý¿ÉÒÔ·ÖΪÁ½ÖÖ£ºEureka ServerºÍEureka
Client¡£ÎªÁ˱ãÓÚÀí½â£¬ÎÒÃǽ«Eureka clientÔÙ·ÖΪService ProviderºÍService
Consumer¡£ÈçÏÂͼËùʾ£ºEurekaRole.png

Eureka Server£º·þÎñµÄ×¢²áÖÐÐÄ£¬¸ºÔðά»¤×¢²áµÄ·þÎñÁÐ±í¡£
Service Provider£º·þÎñÌṩ·½£¬×÷Ϊһ¸öEureka Client£¬ÏòEureka Server×ö·þÎñ×¢²á¡¢ÐøÔ¼ºÍÏÂÏߵȲÙ×÷£¬×¢²áµÄÖ÷ÒªÊý¾Ý°üÀ¨·þÎñÃû¡¢»úÆ÷ip¡¢¶Ë¿ÚºÅ¡¢ÓòÃûµÈµÈ¡£
Service Consumer£º·þÎñÏû·Ñ·½£¬×÷Ϊһ¸öEureka Client£¬ÏòEureka Server»ñÈ¡Service
ProviderµÄ×¢²áÐÅÏ¢£¬²¢Í¨¹ýÔ¶³Ìµ÷ÓÃÓëService Provider½øÐÐͨÐÅ¡£
Service ProviderºÍService Consumer²»ÊÇÑϸñµÄ¸ÅÄService ConsumerÒ²¿ÉÒÔËæÊ±ÏòEureka
Server×¢²á£¬À´ÈÃ×Ô¼º±ä³ÉÒ»¸öService Provider¡£
Spring CloudÕë¶Ô·þÎñ×¢²áÓë·¢ÏÖ£¬½øÐÐÁËÒ»²ã³éÏ󣬲¢ÌṩÁËÈýÖÖʵÏÖ£ºEureka¡¢Consul¡¢Zookeeper¡£Ä¿Ç°Ö§³ÖµÃ×îºÃµÄ¾ÍÊÇEureka£¬Æä´ÎÊÇConsul£¬×îºóÊÇZookeeper¡£
3.1.1 Eureka Server
Eureka Server×÷Ϊһ¸ö¶ÀÁ¢µÄ²¿Êðµ¥Ôª£¬ÒÔREST APIµÄÐÎʽΪ·þÎñʵÀýÌṩÁË×¢²á¡¢¹ÜÀíºÍ²éѯµÈ²Ù×÷¡£Í¬Ê±£¬Eureka
ServerҲΪÎÒÃÇÌṩÁË¿ÉÊÓ»¯µÄ¼à¿ØÒ³Ã棬¿ÉÒÔÖ±¹ÛµØ¿´µ½¸÷¸öEureka Serverµ±Ç°µÄÔËÐÐ״̬ºÍËùÓÐÒÑ×¢²á·þÎñµÄÇé¿ö¡£
3.1.1.1 Eureka ServerµÄ¸ß¿ÉÓü¯Èº
Eureka Server¿ÉÒÔÔËÐжà¸öʵÀýÀ´¹¹½¨¼¯Èº£¬½â¾öµ¥µãÎÊÌ⣬µ«²»Í¬ÓÚZooKeeperµÄÑ¡¾ÙleaderµÄ¹ý³Ì£¬Eureka
Server²ÉÓõÄÊÇPeer to Peer¶ÔµÈͨÐÅ¡£ÕâÊÇÒ»ÖÖÈ¥ÖÐÐÄ»¯µÄ¼Ü¹¹£¬ÎÞmaster/slaveÇø·Ö£¬Ã¿Ò»¸öPeer¶¼ÊǶԵȵġ£ÔÚÕâÖּܹ¹ÖУ¬½Úµãͨ¹ý±Ë´Ë»¥Ïà×¢²áÀ´Ìá¸ß¿ÉÓÃÐÔ£¬Ã¿¸ö½ÚµãÐèÒªÌí¼ÓÒ»¸ö»ò¶à¸öÓÐЧµÄserviceUrlÖ¸ÏòÆäËû½Úµã¡£Ã¿¸ö½Úµã¶¼¿É±»ÊÓΪÆäËû½ÚµãµÄ¸±±¾¡£
Èç¹ûij̨Eureka Serverå´»ú£¬Eureka ClientµÄÇëÇó»á×Ô¶¯Çл»µ½ÐµÄEureka
Server½Úµã£¬µ±å´»úµÄ·þÎñÆ÷ÖØÐ»ָ´ºó£¬Eureka»áÔٴν«ÆäÄÉÈëµ½·þÎñÆ÷¼¯Èº¹ÜÀíÖ®ÖС£µ±½Úµã¿ªÊ¼½ÓÊܿͻ§¶ËÇëÇóʱ£¬ËùÓеIJÙ×÷¶¼»á½øÐÐreplicateToPeer£¨½Úµã¼ä¸´ÖÆ£©²Ù×÷£¬½«ÇëÇó¸´ÖƵ½ÆäËûEureka
Serverµ±Ç°ËùÖªµÄËùÓнڵãÖС£
Ò»¸öеÄEureka Server½ÚµãÆô¶¯ºó£¬»áÊ×Ïȳ¢ÊÔ´ÓÁÚ½ü½Úµã»ñÈ¡ËùÓÐʵÀý×¢²á±íÐÅÏ¢£¬Íê³É³õʼ»¯¡£Eureka
Serverͨ¹ýgetEurekaServiceUrls()·½·¨»ñÈ¡ËùÓеĽڵ㣬²¢ÇÒ»áͨ¹ýÐÄÌøÐøÔ¼µÄ·½Ê½¶¨ÆÚ¸üС£Ä¬ÈÏÅäÖÃÏ£¬Èç¹ûEureka
ServerÔÚÒ»¶¨Ê±¼äÄÚûÓнÓÊÕµ½Ä³¸ö·þÎñʵÀýµÄÐÄÌø£¬Eureka Server½«»á×¢Ïú¸ÃʵÀý£¨Ä¬ÈÏΪ90Ã룬ͨ¹ýeureka.instance.lease-expiration-duration-in-secondsÅäÖã©¡£µ±Eureka
Server½ÚµãÔÚ¶Ìʱ¼äÄÚ¶ªÊ§¹ý¶àµÄÐÄÌøÊ±£¨±ÈÈç·¢ÉúÁËÍøÂç·ÖÇø¹ÊÕÏ£©£¬ÄÇôÕâ¸ö½Úµã¾Í»á½øÈë×ÔÎÒ±£»¤Ä£Ê½¡£ÏÂͼΪEureka¹ÙÍøµÄ¼Ü¹¹Í¼
ʲôÊÇ×ÔÎÒ±£»¤Ä£Ê½£¿Ä¬ÈÏÅäÖÃÏ£¬Èç¹ûEureka Serverÿ·ÖÖÓÊÕµ½ÐÄÌøÐøÔ¼µÄÊýÁ¿µÍÓÚÒ»¸öãÐÖµ£¨instanceµÄÊýÁ¿*(60/ÿ¸öinstanceµÄÐÄÌø¼ä¸ôÃëÊý)*×ÔÎÒ±£»¤ÏµÊý£©£¬¾Í»á´¥·¢×ÔÎÒ±£»¤¡£ÔÚ×ÔÎÒ±£»¤Ä£Ê½ÖУ¬Eureka
Server»á±£»¤·þÎñ×¢²á±íÖеÄÐÅÏ¢£¬²»ÔÙ×¢ÏúÈκηþÎñʵÀý¡£µ±ËüÊÕµ½µÄÐÄÌøÊýÖØÐ»ָ´µ½ãÐÖµÒÔÉÏʱ£¬¸ÃEureka
Server½Úµã¾Í»á×Ô¶¯Í˳ö×ÔÎÒ±£»¤Ä£Ê½¡£ËüµÄÉè¼ÆÕÜÑ§Ç°ÃæÌáµ½¹ý£¬ÄǾÍÊÇÄþ¿É±£Áô´íÎóµÄ·þÎñ×¢²áÐÅÏ¢£¬Ò²²»Ã¤Ä¿×¢ÏúÈκοÉÄܽ¡¿µµÄ·þÎñʵÀý¡£¸Ãģʽ¿ÉÒÔͨ¹ýeureka.server.enable-self-preservation
= falseÀ´½ûÓã¬Í¬Ê±eureka.instance.lease-renewal-interval-in-seconds¿ÉÒÔÓÃÀ´¸ü¸ÄÐÄÌø¼ä¸ô£¬eureka.server.renewal-percent-threshold¿ÉÒÔÓÃÀ´ÐÞ¸Ä×ÔÎÒ±£»¤ÏµÊý£¨Ä¬ÈÏ0.85£©¡£

3.1.1.2 Eureka ServerµÄRegion¡¢Zone
EurekaµÄ¹Ù·½Îĵµ¶ÔRegin¡¢Zone¼¸ºõûÓÐÌá¼°£¬ÓÉÓÚ¸ÅÄî³éÏó£¬ÐÂÊÖºÜÄÑÀí½â¡£Òò´Ë£¬ÎÒÃÇÏÈÀ´Á˽âÒ»ÏÂRegion¡¢Zone¡¢Eureka¼¯ÈºÈýÕߵĹØÏµ£¬ÈçÏÂͼËùʾ£º

regionºÍzone£¨»òÕßAvailability Zone£©¾ùÊÇAWSµÄ¸ÅÄî¡£ÔÚ·ÇAWS»·¾³Ï£¬ÎÒÃÇ¿ÉÒÔÏȼòµ¥µØ½«regionÀí½âΪEureka¼¯Èº£¬zoneÀí½â³É»ú·¿¡£ÉÏͼ¾Í¿ÉÒÔÀí½âΪһ¸öEureka¼¯Èº±»²¿ÊðÔÚÁËzone1»ú·¿ºÍzone2»ú·¿ÖС£
3.1.2 Service Provider
3.1.2.1 ·þÎñ×¢²á
Service Provider±¾ÖÊÉÏÊÇÒ»¸öEureka Client¡£ËüÆô¶¯Ê±£¬»áµ÷Ó÷þÎñ×¢²á·½·¨£¬ÏòEureka
Server×¢²á×Ô¼ºµÄÐÅÏ¢¡£Eureka Server»áά»¤Ò»¸öÒÑ×¢²á·þÎñµÄÁÐ±í£¬Õâ¸öÁбíΪһ¸öǶÌ×µÄhash
map£º
µÚÒ»²ã£¬application nameºÍ¶ÔÓ¦µÄ·þÎñʵÀý¡£
µÚ¶þ²ã£¬·þÎñʵÀý¼°Æä¶ÔÓ¦µÄ×¢²áÐÅÏ¢£¬°üÀ¨IP£¬¶Ë¿ÚºÅµÈ¡£
µ±ÊµÀý״̬·¢Éú±ä»¯Ê±£¨Èç×ÔÉí¼ì²âÈÏΪDownµÄʱºò£©£¬Ò²»áÏòEureka Server¸üÐÂ×Ô¼ºµÄ·þÎñ״̬£¬Í¬Ê±ÓÃreplicateToPeers()ÏòÆäËüEureka
Server½Úµã×ö״̬ͬ²½¡£

![Uploading EurekaServerEvict_655129.png . .
.]
3.1.2.2 ÐøÔ¼ÓëÌÞ³ý
Ç°ÃæÌáµ½¹ý£¬·þÎñʵÀýÆô¶¯ºó£¬»áÖÜÆÚÐÔµØÏòEureka Server·¢ËÍÐÄÌøÒÔÐøÔ¼×Ô¼ºµÄÐÅÏ¢£¬±ÜÃâ×Ô¼ºµÄ×¢²áÐÅÏ¢±»ÌÞ³ý¡£ÐøÔ¼µÄ·½Ê½Óë·þÎñ×¢²á»ù±¾Ò»Ö£ºÊ×ÏȸüÐÂ×ÔÉí״̬£¬ÔÙͬ²½µ½ÆäËüPeer¡£
Èç¹ûEureka ServerÔÚÒ»¶Îʱ¼äÄÚûÓнÓÊÕµ½Ä³¸ö΢·þÎñ½ÚµãµÄÐÄÌø£¬Eureka
Server½«»á×¢Ïú¸Ã΢·þÎñ½Úµã£¨×ÔÎÒ±£»¤Ä£Ê½³ýÍ⣩¡£

3.1.3 Service Consumer
Service Consumer±¾ÖÊÉÏÒ²ÊÇÒ»¸öEureka Client£¨ËüÒ²»áÏòEureka Server×¢²á£¬Ö»ÊÇÕâ¸ö×¢²áÐÅÏ¢Î޹ؽôÒª°ÕÁË£©¡£ËüÆô¶¯ºó£¬»á´ÓEureka
ServerÉÏ»ñÈ¡ËùÓÐʵÀýµÄ×¢²áÐÅÏ¢£¬°üÀ¨IPµØÖ·¡¢¶Ë¿ÚµÈ£¬²¢»º´æµ½±¾µØ¡£ÕâЩÐÅϢĬÈÏÿ30Ãë¸üÐÂÒ»´Î¡£Ç°ÎÄÌáµ½¹ý£¬Èç¹ûÓëEureka
ServerͨÐÅÖжϣ¬Service ConsumerÈÔÈ»¿ÉÒÔͨ¹ý±¾µØ»º´æÓëService ProviderͨÐÅ¡£
ʵ¼Ê¿ª·¢EurekaµÄ¹ý³ÌÖУ¬ÓÐʱ»áÓö¼ûService Consumer»ñÈ¡µ½Server ProviderµÄÐÅÏ¢ÓÐÑÓ³Ù£¬ÔÚEureka
WikiÖÐÓÐÕâôһ¶Î»°:
All operations from Eureka client may take some time
to reflect in the Eureka servers and subsequently
in other Eureka clients. This is because of the caching
of the payload on the eureka server which is refreshed
periodically to reflect new information. Eureka clients
also fetch deltas periodically. Hence, it may take
up to 2 mins for changes to propagate to all Eureka
clients.
×îºóÒ»¾ä»°Ìáµ½£¬·þÎñ¶ËµÄ¸ü¸Ä¿ÉÄÜÐèÒª2·ÖÖÓ²ÅÄÜ´«²¥µ½ËùÓпͻ§¶Ë£¬ÖÁÓÚÔÒò²¢Ã»ÓнéÉÜ¡£ÕâÊÇÒòΪEurekaÓÐÈý´¦»º´æºÍÒ»´¦ÑÓ³ÙÔì³ÉµÄ¡£
Eureka Server¶Ô×¢²áÁÐ±í½øÐлº´æ£¬Ä¬ÈÏʱ¼äΪ30s¡£
Eureka Client¶Ô»ñÈ¡µ½µÄ×¢²áÐÅÏ¢½øÐлº´æ£¬Ä¬ÈÏʱ¼äΪ30s¡£
Ribbon»á´ÓÉÏÃæÌáµ½µÄEureka Client»ñÈ¡·þÎñÁÐ±í£¬½«¸ºÔؾùºâºóµÄ½á¹û»º´æ30s¡£
Èç¹û²»ÊÇÔÚSpring Cloud»·¾³ÏÂʹÓÃÕâЩ×é¼þ(Eureka, Ribbon)£¬·þÎñÆô¶¯ºó²¢²»»áÂíÉÏÏòEureka×¢²á£¬¶øÊÇÐèÒªµÈµ½µÚÒ»´Î·¢ËÍÐÄÌøÇëÇóʱ²Å»á×¢²á¡£ÐÄÌøÇëÇóµÄ·¢Ëͼä¸ôĬÈÏÊÇ30s¡£Spring
Cloud¶Ô´Ë×öÁËÐ޸쬷þÎñÆô¶¯ºó»áÂíÉÏ×¢²á¡£
»ùÓÚService Consumer»ñÈ¡µ½µÄ·þÎñʵÀýÐÅÏ¢£¬ÎÒÃǾͿÉÒÔ½øÐзþÎñµ÷ÓÃÁË¡£¶øSpring
CloudҲΪService ConsumerÌṩÁ˷ḻµÄ·þÎñµ÷Óù¤¾ß£º
Ribbon£¬ÊµÏÖ¿Í»§¶ËµÄ¸ºÔؾùºâ¡£
Hystrix£¬¶Ï·Æ÷¡£
Feign£¬RESTful Web Service¿Í»§¶Ë£¬ÕûºÏÁËRibbonºÍHystrix¡£
½ÓÏÂÀ´ÎÒÃǾÍÒ»Ò»½éÉÜ¡£
3.2 ·þÎñµ÷Óö˸ºÔؾùºâ¡ª¡ªRibbon
RibbonÊÇNetflix·¢²¼µÄ¿ªÔ´ÏîÄ¿£¬Ö÷Òª¹¦ÄÜÊÇΪREST¿Í»§¶ËʵÏÖ¸ºÔؾùºâ¡£ËüÖ÷Òª°üÀ¨Áù¸ö×é¼þ£º
ServerList£¬¸ºÔؾùºâʹÓõķþÎñÆ÷ÁÐ±í¡£Õâ¸öÁбí»á»º´æÔÚ¸ºÔؾùºâÆ÷ÖУ¬²¢¶¨ÆÚ¸üС£µ±RibbonÓëEureka½áºÏʹÓÃʱ£¬ServerListµÄʵÏÖÀà¾ÍÊÇDiscoveryEnabledNIWSServerList£¬Ëü»á±£´æEureka
ServerÖÐ×¢²áµÄ·þÎñʵÀý±í¡£
ServerListFilter£¬·þÎñÆ÷Áбí¹ýÂËÆ÷¡£ÕâÊÇÒ»¸ö½Ó¿Ú£¬Ö÷ÒªÓÃÓÚ¶ÔService Consumer»ñÈ¡µ½µÄ·þÎñÆ÷ÁÐ±í½øÐÐÔ¤¹ýÂË£¬¹ýÂ˵Ľá¹ûÒ²ÊÇServerList¡£RibbonÌṩÁ˶àÖÖ¹ýÂËÆ÷µÄʵÏÖ¡£
IPing£¬Ì½²â·þÎñʵÀýÊÇ·ñ´æ»îµÄ²ßÂÔ¡£
IRule£¬¸ºÔؾùºâ²ßÂÔ£¬ÆäʵÏÖÀà±íÊöµÄ²ßÂÔ°üÀ¨£ºÂÖѯ¡¢Ëæ»ú¡¢¸ù¾ÝÏìӦʱ¼ä¼ÓȨµÈ¡£
ÎÒÃÇÒ²¿ÉÒÔ×Ô¼º¶¨Òå¸ºÔØ¾ùºâ²ßÂÔ£¬±ÈÈçÎÒÃǾÍÀûÓÃ×Ô¼ºÊµÏֵIJßÂÔ£¬ÊµÏÖÁË·þÎñµÄ°æ±¾¿ØÖƺÍÖ±Á¬ÅäÖá£ÊµÏÖºÃÖ®ºó£¬½«ÊµÏÖÀàÖØÐÂ×¢Èëµ½RibbonÖм´¿É¡£
ILoadBalancer£¬¸ºÔؾùºâÆ÷¡£ÕâÒ²ÊÇÒ»¸ö½Ó¿Ú£¬RibbonΪÆäÌṩÁ˶à¸öʵÏÖ£¬±ÈÈçZoneAwareLoadBalancer¡£¶øÉϲã´úÂëͨ¹ýµ÷ÓÃÆäAPI½øÐзþÎñµ÷ÓõĸºÔؾùºâÑ¡Ôñ¡£Ò»°ãILoadBalancerµÄʵÏÖÀàÖлáÒýÓÃÒ»¸öIRule¡£
RestClient£¬·þÎñµ÷ÓÃÆ÷¡£¹ËÃû˼Ò壬Õâ¾ÍÊǸºÔؾùºâºó£¬RibbonÏòService Provider·¢ÆðRESTÇëÇóµÄ¹¤¾ß¡£
Ribbon¹¤×÷ʱ»á×öËļþÊÂÇ飺
ÓÅÏÈÑ¡ÔñÔÚͬһ¸öZoneÇÒ¸ºÔؽÏÉÙµÄEureka Server£»
¶¨ÆÚ´ÓEureka¸üв¢¹ýÂË·þÎñʵÀýÁÐ±í£»
¸ù¾ÝÓû§Ö¸¶¨µÄ²ßÂÔ£¬ÔÚ´ÓServerÈ¡µ½µÄ·þÎñ×¢²áÁбíÖÐÑ¡ÔñÒ»¸öʵÀýµÄµØÖ·£»
ͨ¹ýRestClient½øÐзþÎñµ÷Óá£
3.3 ·þÎñµ÷ÓöËÈÛ¶Ï¡ª¡ªHystrix
Netflix´´½¨ÁËÒ»¸öÃûΪHystrixµÄ¿â,ʵÏÖÁ˶Ï·Æ÷µÄģʽ¡£¡°¶Ï·Æ÷¡±±¾ÉíÊÇÒ»ÖÖ¿ª¹Ø×°Ö㬵±Ä³¸ö·þÎñµ¥Ôª·¢Éú¹ÊÕÏÖ®ºó£¬Í¨¹ý¶Ï·Æ÷µÄ¹ÊÕÏ¼à¿Ø£¨ÀàËÆÈ۶ϱ£ÏÕË¿£©£¬Ïòµ÷Ó÷½·µ»ØÒ»¸ö·ûºÏÔ¤ÆÚµÄ¡¢¿É´¦ÀíµÄ±¸Ñ¡ÏìÓ¦£¨FallBack£©£¬¶ø²»Êdz¤Ê±¼äµÄµÈ´ý»òÕßÅ׳öµ÷Ó÷½ÎÞ·¨´¦ÀíµÄÒì³££¬ÕâÑù¾Í±£Ö¤ÁË·þÎñµ÷Ó÷½µÄÏ̲߳»»á±»³¤Ê±¼ä¡¢²»±ØÒªµØÕ¼Ó㬴Ӷø±ÜÃâÁ˹ÊÕÏÔÚ·Ö²¼Ê½ÏµÍ³ÖеÄÂûÑÓ£¬ÄËÖÁÑ©±À¡£

µ±È»£¬ÔÚÇëÇóʧ°ÜƵÂʽϵ͵ÄÇé¿öÏ£¬Hystrix»¹ÊÇ»áÖ±½Ó°Ñ¹ÊÕÏ·µ»Ø¸ø¿Í»§¶Ë¡£Ö»Óе±Ê§°Ü´ÎÊý´ïµ½ãÐÖµ£¨Ä¬ÈÏÔÚ20ÃëÄÚʧ°Ü5´Î£©Ê±£¬¶Ï·Æ÷´ò¿ª²¢ÇÒ²»½øÐкóÐøÍ¨ÐÅ£¬¶øÊÇÖ±½Ó·µ»Ø±¸Ñ¡ÏìÓ¦¡£µ±È»£¬HystrixµÄ±¸Ñ¡ÏìÓ¦Ò²ÊÇ¿ÉÒÔÓÉ¿ª·¢Õß¶¨ÖƵġ£HystrixFallback.png

³ýÁ˸ôÀëÒÀÀµ·þÎñµÄµ÷ÓÃÒÔÍ⣬Hystrix»¹ÌṩÁË׼ʵʱµÄµ÷ÓÃ¼à¿Ø£¨Hystrix
Dashboard£©£¬Hystrix»á³ÖÐøµØ¼Ç¼ËùÓÐͨ¹ýHystrix·¢ÆðµÄÇëÇóµÄÖ´ÐÐÐÅÏ¢£¬²¢ÒÔͳ¼Æ±¨±íºÍͼÐεÄÐÎʽչʾ¸øÓû§£¬°üÀ¨Ã¿ÃëÖ´ÐжàÉÙÇëÇó¶àÉٳɹ¦£¬¶àÉÙʧ°ÜµÈ¡£Netflixͨ¹ýhystrix-metrics-event-streamÏîĿʵÏÖÁ˶ÔÒÔÉÏÖ¸±êµÄ¼à¿Ø¡£Spring
CloudÒ²ÌṩÁËHystrix DashboardµÄÕûºÏ£¬¶Ô¼à¿ØÄÚÈÝת»¯³É¿ÉÊÓ»¯½çÃæ£¬Hystrix
Dashboard WikiÉÏÏêϸ˵Ã÷ÁËͼÉÏÿ¸öÖ¸±êµÄº¬Òå¡£

3.4 ·þÎñµ÷Óö˴úÂë³éÏóºÍ·â×°¡ª¡ªFeign
FeignÊÇÒ»¸öÉùÃ÷ʽµÄWeb Service¿Í»§¶Ë£¬ËüµÄÄ¿µÄ¾ÍÊÇÈÃWeb Serviceµ÷Óøü¼Ó¼òµ¥¡£ËüÕûºÏÁËRibbonºÍHystrix£¬´Ó¶øÈÃÎÒÃDz»ÔÙÐèÒªÏÔʽµØÊ¹ÓÃÕâÁ½¸ö×é¼þ¡£Feign»¹ÌṩÁËHTTPÇëÇóµÄÄ£°å£¬Í¨¹ý±àд¼òµ¥µÄ½Ó¿ÚºÍ²åÈë×¢½â£¬ÎÒÃǾͿÉÒÔ¶¨ÒåºÃHTTPÇëÇóµÄ²ÎÊý¡¢¸ñʽ¡¢µØÖ·µÈÐÅÏ¢¡£½ÓÏÂÀ´£¬Feign»áÍêÈ«´úÀíHTTPµÄÇëÇó£¬ÎÒÃÇÖ»ÐèÒªÏñµ÷Ó÷½·¨Ò»Ñùµ÷ÓÃËü¾Í¿ÉÒÔÍê³É·þÎñÇëÇó¡£
Feign¾ßÓÐÈçÏÂÌØÐÔ£º
¿É²å°ÎµÄ×¢½âÖ§³Ö£¬°üÀ¨Feign×¢½âºÍJAX-RS×¢½â
Ö§³Ö¿É²å°ÎµÄHTTP±àÂëÆ÷ºÍ½âÂëÆ÷
Ö§³ÖHystrixºÍËüµÄFallback
Ö§³ÖRibbonµÄ¸ºÔؾùºâ
Ö§³ÖHTTPÇëÇóºÍÏìÓ¦µÄѹËõ
ÒÔÏÂÊÇÒ»¸öFeignµÄ¼òµ¥Ê¾Àý£º
@SpringBootApplication
@EnableDiscoveryClient //ÆôÓÃFeign
@EnableFeignClients
public class Application
{
public static void main(String[] args)
{
SpringApplication.run(Application.class, args);
}
}
@FeignClient(name = "elements", fallback
= ElementsFallback.class) //Ö¸¶¨feignµ÷ÓõķþÎñºÍHystrix
Fallback£¨name¼´eurekaµÄapplication name£©
public interface Elements
{
@RequestMapping(value = "/index")
String index();
}
//Hystrix Fallback
@Component
public class ElementsFallback implements Elements
{
@Override
public String index()
{
return "**************";
}
}
//²âÊÔÀà
@Component
public class TestController {
@Autowired
Elements elements;
@RequestMapping(value = "/testEureka",
method = RequestMethod.GET)
public String testeureka()
{
return elements.index();
}
}
|
|