2.2. 构建并运行 Circuit Breaker booster
Netflix/Hystrix 电路断路器组件使分布式应用程序能够应对对网络服务的网络连接和临时不可用的问题。断路器模式的基本理念是,会自动检测到相依服务的丢失,如果后端服务暂时不可用,可以编程替代行为。
Fuse 断路器提升程序由两个相关服务组成:
- 名称服务,它将返回名称到 greet
-
greeting s 服务,它调用 name 服务以获取名称,然后返回字符串
Hello, NAME
。
在本次演示中,Hystrix 断路器在问候服务与名称服务之间插入。如果名称服务不可用,则 greetings 服务可以回退到替代行为,并立即响应客户端,而不必在等待 name 服务重启时阻止或超时。
先决条件
- 您已完成了 第 2.1 节 “生成 booster 项目” 部分提到的步骤。
流程
按照以下步骤构建并运行 Circuit breaker booster 项目:
使用 Maven 打开 shell 提示符并从命令行构建项目:
cd PROJECT_DIR mvn clean package
cd PROJECT_DIR mvn clean package
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 打开一个新 shell 提示符并启动名称服务,如下所示:
cd name-service mvn spring-boot:run -DskipTests -Dserver.port=8081
cd name-service mvn spring-boot:run -DskipTests -Dserver.port=8081
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Spring Boot 启动时,您应该看到如下一些输出:
... 2017-12-08 15:44:24.223 INFO 22758 --- [ main] o.a.camel.spring.SpringCamelContext : Total 1 routes, of which 1 are started 2017-12-08 15:44:24.227 INFO 22758 --- [ main] o.a.camel.spring.SpringCamelContext : Apache Camel 2.20.0 (CamelContext: camel-1) started in 0.776 seconds 2017-12-08 15:44:24.234 INFO 22758 --- [ main] org.jboss.fuse.boosters.cb.Application : Started Application in 4.137 seconds (JVM running for 4.744)
... 2017-12-08 15:44:24.223 INFO 22758 --- [ main] o.a.camel.spring.SpringCamelContext : Total 1 routes, of which 1 are started 2017-12-08 15:44:24.227 INFO 22758 --- [ main] o.a.camel.spring.SpringCamelContext : Apache Camel 2.20.0 (CamelContext: camel-1) started in 0.776 seconds 2017-12-08 15:44:24.234 INFO 22758 --- [ main] org.jboss.fuse.boosters.cb.Application : Started Application in 4.137 seconds (JVM running for 4.744)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 打开一个新 shell 提示符并启动问候服务,如下所示:
cd greetings-service mvn spring-boot:run -DskipTests
cd greetings-service mvn spring-boot:run -DskipTests
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Spring Boot 启动时,您应该看到如下一些输出:
... 2017-12-08 15:46:58.521 INFO 22887 --- [ main] o.a.c.c.s.CamelHttpTransportServlet : Initialized CamelHttpTransportServlet[name=CamelServlet, contextPath=] 2017-12-08 15:46:58.524 INFO 22887 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) 2017-12-08 15:46:58.536 INFO 22887 --- [ main] org.jboss.fuse.boosters.cb.Application : Started Application in 6.263 seconds (JVM running for 6.819)
... 2017-12-08 15:46:58.521 INFO 22887 --- [ main] o.a.c.c.s.CamelHttpTransportServlet : Initialized CamelHttpTransportServlet[name=CamelServlet, contextPath=] 2017-12-08 15:46:58.524 INFO 22887 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) 2017-12-08 15:46:58.536 INFO 22887 --- [ main] org.jboss.fuse.boosters.cb.Application : Started Application in 6.263 seconds (JVM running for 6.819)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 问候服务在 URL
http://localhost:8080/camel/greetings
上公开 REST 端点。当您打开此页面时,它会调用 Greeting Service:
此页面也提供到 Hystrix 仪表板的链接,它可监控断路器的状态。
要演示 Camel Hystrix 提供的断路器功能,可在运行名称服务的 shell 提示符窗口中按 Ctrl+C 来终止后端服务。
现在名称服务不可用,断路器在启动后启动,以防止在调用时导致 greetings 服务挂起。
观察 Hystrix Monitor 仪表板和 Greeting Service 输出中的更改: