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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
SpringCloud΢·þÎñ¿ò¼Ü´î½¨
 
×÷Õߣºzhuyuansj
  4221  次浏览      31
 2020-4-9
   
 
±à¼­ÍƼö:
±¾Î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();
}

}

ÑÝʾЧ¹û

 
   
4221 ´Îä¯ÀÀ       31
Ïà¹ØÎÄÕÂ

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

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

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]
 
×îÐÂÎÄÕÂ
´óÊý¾Ýƽ̨ϵÄÊý¾ÝÖÎÀí
ÈçºÎÉè¼ÆÊµÊ±Êý¾Ýƽ̨£¨¼¼Êõƪ£©
´óÊý¾Ý×ʲú¹ÜÀí×ÜÌå¿ò¼Ü¸ÅÊö
Kafka¼Ü¹¹ºÍÔ­Àí
ELK¶àÖּܹ¹¼°ÓÅÁÓ
×îпγÌ
´óÊý¾Ýƽ̨´î½¨Óë¸ßÐÔÄܼÆËã
´óÊý¾Ýƽ̨¼Ü¹¹ÓëÓ¦ÓÃʵս
´óÊý¾ÝϵͳÔËά
´óÊý¾Ý·ÖÎöÓë¹ÜÀí
Python¼°Êý¾Ý·ÖÎö
³É¹¦°¸Àý
ijͨÐÅÉ豸ÆóÒµ PythonÊý¾Ý·ÖÎöÓëÍÚ¾ò
Ä³ÒøÐÐ È˹¤ÖÇÄÜ+Python+´óÊý¾Ý
±±¾© Python¼°Êý¾Ý·ÖÎö
ÉñÁúÆû³µ ´óÊý¾Ý¼¼Êõƽ̨-Hadoop
ÖйúµçÐÅ ´óÊý¾Ýʱ´úÓëÏÖ´úÆóÒµµÄÊý¾Ý»¯ÔËӪʵ¼ù