±à¼ÍƼö: |
±¾ÎIJûÊöʲôÊÇ΢·þÎñ¼Ü¹¹£¬
ÒÔ¼°SpringCloud΢·þÎñ¿ò¼ÜµÄÅäÖúʹ £¬×îÖÕʵÏÖÑÝʾЧ¹û£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚcsdn£¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼¡¢ÍƼö¡£ |
|
Ò»¡¢Î¢·þÎñ¼Ü¹¹
1.1 ʲôÊÇ·Ö²¼Ê½
²»Í¬Ä£¿é²¿ÊðÔÚ²»Í¬·þÎñÆ÷ÉÏ
×÷Ó㺷ֲ¼Ê½½â¾öÍøÕ¾¸ß²¢·¢´øÀ´ÎÊÌâ
1.2 ʲôÊǼ¯Èº
¶ą̀·þÎñÆ÷²¿ÊðÏàͬӦÓù¹³ÉÒ»¸ö¼¯Èº
×÷ÓãºÍ¨¹ý¸ºÔؾùºâÉ豸¹²Í¬¶ÔÍâÌṩ·þÎñ
1.3 ʲôÊÇRPC
RPC µÄÈ«³ÆÊÇ Remote Procedure Call ÊÇÒ»ÖÖ½ø³Ì¼äͨÐÅ·½Ê½¡£
ËüÔÊÐí³ÌÐòµ÷ÓÃÁíÒ»¸öµØÖ·¿Õ¼ä£¨Í¨³£Êǹ²ÏíÍøÂçµÄÁíһ̨»úÆ÷ÉÏ£©µÄ¹ý³Ì»òº¯Êý£¬¶ø²»ÓóÌÐòÔ±ÏÔʽ±àÂëÕâ¸öÔ¶³Ìµ÷ÓõÄϸ½Ú¡£¼´ÎÞÂÛÊǵ÷Óñ¾µØ½Ó¿Ú/·þÎñµÄ»¹ÊÇÔ¶³ÌµÄ½Ó¿Ú/·þÎñ£¬±¾ÖÊÉϱàдµÄµ÷ÓôúÂë»ù±¾Ïàͬ¡£
±ÈÈçÁ½Ì¨·þÎñÆ÷A£¬B£¬Ò»¸öÓ¦Óò¿ÊðÔÚA·þÎñÆ÷ÉÏ£¬ÏëÒªµ÷ÓÃB·þÎñÆ÷ÉÏÓ¦ÓÃÌṩµÄº¯Êý»òÕß·½·¨£¬ÓÉÓÚ²»ÔÚÒ»¸öÄÚ´æ¿Õ¼ä£¬²»ÄÜÖ±½Óµ÷Óã¬ÕâʱºòÐèҪͨ¹ý¾Í¿ÉÒÔÓ¦ÓÃRPC¿ò¼ÜµÄʵÏÖÀ´½â¾ö
1.3.1 restful¡¢soap¡¢rpc
£¨1£©RESTfulÊÇÒ»Öּܹ¹Éè¼Æ·ç¸ñ£¬ÌṩÁËÉè¼ÆÔÔòºÍÔ¼ÊøÌõ¼þ£¬¶ø²»ÊǼܹ¹¡£¶øÂú×ãÕâÐ©Ô¼ÊøÌõ¼þºÍÔÔòµÄÓ¦ÓóÌÐò»òÉè¼Æ¾ÍÊÇ
RESTful¼Ü¹¹»ò·þÎñ¡£
£¨2£©SOAP£¬¼òµ¥¶ÔÏó·ÃÎÊÐÒéÊÇÒ»ÖÖÊý¾Ý½»»»ÐÒ鹿·¶£¬
ÊÇÒ»ÖÖÇáÁ¿µÄ¡¢¼òµ¥µÄ¡¢»ùÓÚXMLµÄÐÒéµÄ¹æ·¶¡£SOAPÐÒéºÍHTTPÐÒéÒ»Ñù£¬¶¼ÊǵײãµÄͨÐÅÐÒ飬ֻÊÇÇëÇó°üµÄ¸ñʽ²»Í¬¶øÒÑ£¬SOAP°üÊÇXML¸ñʽµÄ¡£
SOAPµÄÏûÏ¢ÊÇ»ùÓÚxml²¢·â×°³ÉÁË·ûºÏhttpÐÒ飬Òò´Ë£¬Ëü·ûºÏÈκηÓÉÆ÷¡¢ ·À»ðǽ»ò´úÀí·þÎñÆ÷µÄÒªÇó¡£
soap¿ÉÒÔʹÓÃÈκÎÓïÑÔÀ´Íê³É£¬Ö»Òª·¢ËÍÕýÈ·µÄsoapÇëÇó¼´¿É£¬»ùÓÚsoapµÄ·þÎñ¿ÉÒÔÔÚÈÎºÎÆ½Ì¨ÎÞÐèÐ޸ļ´¿ÉÕý³£Ê¹Óá£
£¨3£©RPC¾ÍÊÇ´Óһ̨»úÆ÷£¨¿Í»§¶Ë£©ÉÏͨ¹ý²ÎÊý´«µÝµÄ·½Ê½µ÷ÓÃÁíһ̨»úÆ÷£¨·þÎñÆ÷£©ÉϵÄÒ»¸öº¯Êý»ò·½·¨£¨¿ÉÒÔͳ³ÆÎª·þÎñ£©²¢µÃµ½·µ»ØµÄ½á¹û¡£
RPC »áÒþ²Øµ×²ãµÄͨѶϸ½Ú£¨²»ÐèÒªÖ±½Ó´¦ÀíSocketͨѶ»òHttpͨѶ£©
RPC ÊÇÒ»¸öÇëÇóÏìӦģÐÍ¡£¿Í»§¶Ë·¢ÆðÇëÇ󣬷þÎñÆ÷·µ»ØÏìÓ¦£¨ÀàËÆÓÚHttpµÄ¹¤×÷·½Ê½£©
RPC ÔÚʹÓÃÐÎʽÉÏÏñµ÷Óñ¾µØº¯Êý£¨»ò·½·¨£©Ò»ÑùÈ¥µ÷ÓÃÔ¶³ÌµÄº¯Êý£¨»ò·½·¨£©¡£
1.3.2 rpcÔ¶³Ìµ÷Óÿò¼Ü
¼¸ÖֱȽϵäÐ͵ÄRPCµÄʵÏֺ͵÷Óÿò¼Ü¡£
£¨1£©RMIʵÏÖ£¬ÀûÓÃjava.rmi°üʵÏÖ£¬»ùÓÚJavaÔ¶³Ì·½·¨ÐÒé(Java Remote Method
Protocol)
ºÍjavaµÄÔÉúÐòÁл¯¡£
£¨2£©Hessian£¬ÊÇÒ»¸öÇáÁ¿¼¶µÄremoting onhttp¹¤¾ß£¬Ê¹Óüòµ¥µÄ·½·¨ÌṩÁËRMIµÄ¹¦ÄÜ¡£
»ùÓÚHTTPÐÒ飬²ÉÓöþ½øÖƱà½âÂë¡£
£¨3£©thriftÊÇÒ»ÖÖ¿ÉÉìËõµÄ¿çÓïÑÔ·þÎñµÄÈí¼þ¿ò¼Ü¡£thriftÔÊÐíÄ㶨ÒåÒ»¸öÃèÊöÎļþ£¬ÃèÊöÊý¾ÝÀàÐͺͷþÎñ½Ó¿Ú¡£ÒÀ¾Ý¸ÃÎļþ£¬±àÒëÆ÷·½±ãµØÉú³ÉRPC¿Í»§¶ËºÍ·þÎñÆ÷ͨÐÅ´úÂë¡£
£¨4£©SpringCloud Ϊ¿ª·¢ÈËÔ±ÌṩÁË¿ìËÙ¹¹½¨·Ö²¼Ê½ÏµÍ³µÄһЩ¹¤¾ß£¬°üÀ¨ÅäÖùÜÀí¡¢·þÎñ·¢ÏÖ¡¢¶Ï·Æ÷¡¢Â·ÓÉ¡¢Î¢´úÀí¡¢Ê¼þ×ÜÏß¡¢È«¾ÖËø¡¢¾ö²ß¾ºÑ¡¡¢·Ö²¼Ê½»á»°µÈµÈ¡£
1.4 ʲôÊÇSOA
ÒµÎñϵͳ·Ö½âΪ¶à¸ö×é¼þ£¬ÈÃÿ¸ö×é¼þ¶¼¶ÀÁ¢ÌṩÀëÉ¢£¬×ÔÖΣ¬¿É¸´ÓõķþÎñÄÜÁ¦
ͨ¹ý·þÎñµÄ×éºÏºÍ±àÅÅÀ´ÊµÏÖÉϲãµÄÒµÎñÁ÷³Ì
×÷Ó㺼ò»¯Î¬»¤,½µµÍÕûÌå·çÏÕ,ÉìËõÁé»î
1.5 ʲôÊÇ΢·þÎñ
¼Ü¹¹Éè¼Æ¸ÅÄî,¸÷·þÎñ¼ä¸ôÀ루·Ö²¼Ê½Ò²ÊǸôÀ룩,×ÔÖΣ¨·Ö²¼Ê½ÒÀÀµÕûÌå×éºÏ£©ÆäËüÌØÐÔ(µ¥Ò»Ö°Ôð,±ß½ç,Ò첽ͨÐÅ,¶ÀÁ¢²¿Êð)ÊÇ·Ö²¼Ê½¸ÅÄîµÄ¸úÑϸñÖ´ÐÐ
SOAµ½Î¢·þÎñ¼Ü¹¹µÄÑݽø¹ý³Ì
×÷Ó㺸÷·þÎñ¿É¶ÀÁ¢Ó¦Óã¬×éºÏ·þÎñÒ²¿ÉϵͳӦÓÃ(¾ÞʯӦÓÃ[monolith]µÄ¼ò»¯ÊµÏÖ²ßÂÔ-ƽ̨˼Ïë)
1.6 ʹÓÃRPC http¼¼ÊõʵÏÖ»áÔ±Óë¶©µ¥ÏµÍ³Í¨Ñ¶
¶þ¡¢Î¢·þÎñ¼Ü¹¹
Èý¡¢SpringCloud
SpringCloud Ϊ¿ª·¢ÈËÔ±ÌṩÁË¿ìËÙ¹¹½¨·Ö²¼Ê½ÏµÍ³µÄһЩ¹¤¾ß£¬°üÀ¨ÅäÖùÜÀí¡¢·þÎñ·¢ÏÖ¡¢¶Ï·Æ÷¡¢Â·ÓÉ¡¢Î¢´úÀí¡¢Ê¼þ×ÜÏß¡¢È«¾ÖËø¡¢¾ö²ß¾ºÑ¡¡¢·Ö²¼Ê½»á»°µÈµÈ¡£ËüÔËÐл·¾³¼òµ¥£¬¿ÉÒÔÔÚ¿ª·¢ÈËÔ±µÄµçÄÔÉÏÅÜ¡£
ËÄ¡¢·þÎñÌṩÕßÓëÏû·Ñ¹ØÏµ
·þÎñÌṩÕß:Ìṩ·þÎñ±»È˵÷ÓÃ
Ïû·ÑÕß:µ÷Óñ»ÈË·þÎñ
Îå¡¢·þÎñµÄ×¢²áÓë·¢ÏÖ(Eureka )
ÔÚÕâÀÎÒÃÇÐèÒªÓõĵÄ×é¼þÉÏSpring Cloud NetflixµÄEureka ,eurekaÊÇÒ»¸ö·þÎñ×¢²áºÍ·¢ÏÖÄ£¿é¡£
4.1 ·þÎñ×¢²á
4.1.1´´½¨eurekaserver ÏîÄ¿
4.1.2ÒýÈëmavenÒÀÀµ
ÒÔÉ϶¼ÊǸÅÄî¡£

ÒÔÉÏÊÇÎÒµÄspringcloudÏîÄ¿£¬eurekaÊÇ×¢²áÖÐÐÄ£¬zuulÊÇ×¢²áÍø¹Ø£¬ribbonºÍfeign¶¼ÊÇcloudµÄrpcÔ¶³Ìµ÷Óá£
zuulÖ÷ÒªÊÇÓÃÀ´ÅäÖÃÍø¹Ø
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
<relativePath /> <!-- lookup parent from
repository --> </parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--eureka server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<!-- spring boot test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories> |
4.2 ÅäÖÃapplication.yml
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
|
4.3 Æô¶¯EurekaServer
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class,
args);
}
} |
1.eureka.client.registerWithEureka=true #ÊÇ·ñ½«×ÔÉí×¢²á
2.eureka.client.fetchRegistry=false #Èç¹ûΪtrue£¬Æô¶¯Ê±±¨¾¯.
4.4 ´ò¿ªeureka server ½çÃæµÄ

4.5 ·þÎñÌṩÕß
´´½¨Ò»¸ö·þÎñÌṩÕß (eureka client),µ±clientÏòserver×¢²áʱ£¬Ëü»áÌṩһЩԪÊý¾Ý£¬ÀýÈçÖ÷»úºÍ¶Ë¿Ú£¬URL£¬Ö÷Ò³µÈ¡£Eureka
server ´Óÿ¸öclientʵÀý½ÓÊÕÐÄÌøÏûÏ¢¡£ Èç¹ûÐÄÌø³¬Ê±£¬Ôòͨ³£½«¸ÃʵÀý´Ó×¢²áserverÖÐɾ³ý¡£
4.5.1 ´´½¨ÏîÄ¿eurekaclient
4.5.2 ÒýÈëmavenÒÀÀµ
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
<relativePath /> <!-- lookup parent from
repository --> </parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope> </dependency>
</dependencies> <dependencyManagement>
<dependencies> <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.RC1</version>
<type>pom</type> <scope>import</scope>
</dependency> </dependencies>
</dependencyManagement> <build>
<plugins> <plugin> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin> </plugins> </build>
<repositories> <repository>
<id>spring-milestones</id> <name>Spring
Milestones</name> <url>https://repo.spring.io/milestone</url>
<snapshots> <enabled>false</enabled>
</snapshots> </repository>
</repositories> |
4.5.3 application.ymlÅäÖÃ
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
server:
port: 8762
spring:
application:
name: service-hi |
4.5.4 ·¢²¼·þÎñ
ͨ¹ý×¢½â@EnableEurekaClient ±íÃ÷×Ô¼ºÊÇÒ»¸öeurekaclient.
@SpringBootApplication
@EnableEurekaClient
@RestController
public class ServiceHiApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceHiApplication.class,
args);
} @Value("${server.port}")
String port; @RequestMapping("/hi")
public String home(@RequestParam String name)
{
return "hi " + name + ",i am
from port:" + port; |
4.5.5 ÑÝʾЧ¹û
ÐèÒªÖ¸Ã÷spring.application.name,Õâ¸öºÜÖØÒª£¬ÕâÔÚÒÔºóµÄ·þÎñÓë·þÎñÖ®¼äÏ໥µ÷ÓÃÒ»°ã¶¼ÊǸù¾ÝÕâ¸öname
¡£ Æô¶¯¹¤³Ì£¬´ò¿ªhttp://localhost:8761 £¬¼´eureka server µÄÍøÖ·£º

Äã»á·¢ÏÖÒ»¸ö·þÎñÒѾע²áÔÚ·þÎñÖÐÁË£¬·þÎñÃûΪSERVICE-HI ,¶Ë¿ÚΪ7862
Õâʱ´ò¿ª http://localhost:8762/hi?name=forezp
£¬Äã»áÔÚä¯ÀÀÆ÷ÉÏ¿´µ½ :
hi forezp,i am from port:8762
Ò»¡¢ ·þÎñÏû·ÑÕߣ¨Feign£©
ʲôÊÇFeign
FeignÊÇÒ»¸öÉùÃ÷ʽµÄαHttp¿Í»§¶Ë£¬ËüʹµÃдHttp¿Í»§¶Ë±äµÃ¸ü¼òµ¥¡£Ê¹ÓÃFeign£¬Ö»ÐèÒª´´½¨Ò»¸ö½Ó¿Ú²¢×¢½â¡£
Ëü¾ßÓпɲå°ÎµÄ×¢½âÌØÐÔ£¬¿ÉʹÓÃFeign ×¢½âºÍJAX-RS×¢½â¡£FeignÖ§³Ö¿É²å°ÎµÄ±àÂëÆ÷ºÍ½âÂëÆ÷¡£
FeignĬÈϼ¯³ÉÁËRibbon£¬²¢ºÍEureka½áºÏ£¬Ä¬ÈÏʵÏÖÁ˸ºÔؾùºâµÄЧ¹û¡£
¼ò¶øÑÔÖ®£º
Feign ²ÉÓõÄÊÇ»ùÓÚ½Ó¿ÚµÄ×¢½â
Feign ÕûºÏÁËribbon
×¼±¸¹¤×÷
¼ÌÐøÓÃÉÏÒ»½ÚµÄ¹¤³Ì£¬ Æô¶¯eureka-server£¬¶Ë¿ÚΪ8761; Æô¶¯service-hi Á½´Î£¬¶Ë¿Ú·Ö±ðΪ8762
¡¢8773.
×¼±¸¹¤´´½¨Ò»¸öfeignµÄ·þÎñ
н¨Ò»¸öspring-boot¹¤³Ì£¬È¡ÃûΪserice-feign£¬ÔÚËüµÄpomÎļþÒýÈëFeignµÄÆð²½ÒÀÀµspring-cloud-starter-feign¡¢EurekaµÄÆð²½ÒÀÀµ
spring-cloud-starter-eureka¡¢WebµÄÆð²½ÒÀÀµspring-boot-starter-web£¬´úÂëÈçÏ£º
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
<relativePath/> <!-- lookup parent from
repository --> </parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories> |
application.ymlÅäÖÃ
ÔÚ¹¤³ÌµÄÅäÖÃÎļþapplication.ymlÎļþ£¬Ö¸¶¨³ÌÐòÃûΪservice-feign£¬¶Ë¿ÚºÅΪ8765£¬·þÎñ×¢²áµØÖ·Îªhttp://localhost:8761/eureka/
£¬´úÂëÈçÏ£º
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
server:
port: 8765
spring:
application:
name: service-feign |
¶¨ÒåÒ»¸öfeign½Ó¿Ú
@FeignClient(value
= "service-hi")
public interface SchedualServiceHi {
@RequestMapping(value = "/hi", method
= RequestMethod.GET)
String sayHiFromClientOne(@RequestParam(value
= "name") String name);
} |
Ò»¸ö¡±/hi¡±µÄAPI½Ó¿Ú
@RestController
public class HiController {
@Autowired
SchedualServiceHi schedualServiceHi;
@RequestMapping(value = "/hi",method
= RequestMethod.GET)
public String sayHi(@RequestParam String name){
return schedualServiceHi.sayHiFromClientOne(name);
}
} |
Æô¶¯·½Ê½
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class SericeFeign {
public static void main(String[] args) {
SpringApplication.run(SericeFeign.class, args);
} } |
ÑÝʾЧ¹û
Æô¶¯³ÌÐò£¬¶à´Î·ÃÎÊhttp://localhost:8765/hi?name=forezp(http://localhost:8765/hi?name=forezp),ä¯ÀÀÆ÷½»ÌæÏÔʾ£º
hi forezp,i am
from port:8762
hi forezp,i am from port:8763
|
Hystrix¶Ï·Æ÷
ÔÚ΢·þÎñ¼Ü¹¹ÖУ¬¸ù¾ÝÒµÎñÀ´²ð·Ö³ÉÒ»¸ö¸öµÄ·þÎñ£¬·þÎñÓë·þÎñÖ®¼ä¿ÉÒÔÏ໥µ÷Óã¨RPC£©£¬ÔÚSpring
Cloud¿ÉÒÔÓÃRestTemplate+RibbonºÍFeignÀ´µ÷Óá£ÎªÁ˱£Ö¤Æä¸ß¿ÉÓ㬵¥¸ö·þÎñͨ³£»á¼¯Èº²¿Êð¡£ÓÉÓÚÍøÂçÔÒò»òÕß×ÔÉíµÄÔÒò£¬·þÎñ²¢²»Äܱ£Ö¤100%¿ÉÓã¬Èç¹ûµ¥¸ö·þÎñ³öÏÖÎÊÌ⣬µ÷ÓÃÕâ¸ö·þÎñ¾Í»á³öÏÖÏß³Ì×èÈû£¬´ËʱÈôÓдóÁ¿µÄÇëÇóÓ¿È룬ServletÈÝÆ÷µÄÏß³Ì×ÊÔ´»á±»ÏûºÄÍê±Ï£¬µ¼Ö·þÎṉ̃»¾¡£·þÎñÓë·þÎñÖ®¼äµÄÒÀÀµÐÔ£¬¹ÊÕϻᴫ²¥£¬»á¶ÔÕû¸ö΢·þÎñϵͳÔì³ÉÔÖÄÑÐÔµÄÑÏÖØºó¹û£¬Õâ¾ÍÊÇ·þÎñ¹ÊÕϵġ°Ñ©±À¡±Ð§Ó¦¡£
ΪÁ˽â¾öÕâ¸öÎÊÌ⣬ҵ½çÌá³öÁ˶Ï·Æ÷Ä£ÐÍ¡£
ʲôÊÇHystrix
Netflix¿ªÔ´ÁËHystrix×é¼þ£¬ÊµÏÖÁ˶Ï·Æ÷ģʽ£¬SpringCloud¶ÔÕâÒ»×é¼þ½øÐÐÁËÕûºÏ¡£
ÔÚ΢·þÎñ¼Ü¹¹ÖУ¬Ò»¸öÇëÇóÐèÒªµ÷Óöà¸ö·þÎñÊǷdz£³£¼ûµÄ£¬ÈçÏÂͼ£º

½Ïµ×²ãµÄ·þÎñÈç¹û³öÏÖ¹ÊÕÏ£¬»áµ¼ÖÂÁ¬Ëø¹ÊÕÏ¡£µ±¶ÔÌØ¶¨µÄ·þÎñµÄµ÷ÓõIJ»¿ÉÓôﵽһ¸ö·§Öµ£¨Hystric
ÊÇ5Ãë20´Î£© ¶Ï·Æ÷½«»á±»´ò¿ª¡£

¶Ï·´ò¿ªºó£¬¿ÉÓñÜÃâÁ¬Ëø¹ÊÕÏ£¬fallback·½·¨¿ÉÒÔÖ±½Ó·µ»ØÒ»¸ö¹Ì¶¨Öµ¡£
×¼±¸¹¤×÷
ÕâÆªÎÄÕ»ùÓÚÉÏһƪÎÄÕµĹ¤³Ì£¬Ê×ÏÈÆô¶¯ÉÏһƪÎÄÕµĹ¤³Ì£¬Æô¶¯eureka-server ¹¤³Ì£»Æô¶¯service-hi¹¤³Ì£¬ËüµÄ¶Ë¿ÚΪ8762¡£
ÔÚribbonʹÓöÏ·Æ÷
¸ÄÔìserice-ribbon ¹¤³ÌµÄ´úÂ룬Ê×ÏÈÔÚpox.xmlÎļþÖмÓÈëspring-cloud-starter-hystrixµÄÆð²½ÒÀÀµ£º
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency> |
¸ÄÔìservice
¸ÄÔìHelloServiceÀ࣬ÔÚhiService·½·¨ÉϼÓÉÏ@HystrixCommand×¢½â¡£¸Ã×¢½â¶Ô¸Ã·½·¨´´½¨ÁËÈÛ¶ÏÆ÷µÄ¹¦ÄÜ£¬²¢Ö¸¶¨ÁËfallbackMethodÈÛ¶Ï·½·¨£¬ÈÛ¶Ï·½·¨Ö±½Ó·µ»ØÁËÒ»¸ö×Ö·û´®£¬×Ö·û´®Îª¡±hi,¡±+name+¡±,sorry,error!¡±£¬´úÂëÈçÏ£º
@Service
public class HelloService {
@Autowired
RestTemplate restTemplate;
@HystrixCommand(fallbackMethod = "hiError")
public String hiService(String name) {
return restTemplate.getForObject("http://SERVICE-HI/hi?name="
+ name, String.class);
} public String hiError(String name) {
return "hi," + name + ",sorry,error!";
}
} |
ÔÚÆô¶¯ÀàÉϼÓÈë
@SpringBootApplication
@EnableEurekaClient
@EnableHystrix //¶Ï·Æ÷
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
} |
ÑÝʾЧ¹û

|