2.2. 构建并运行 Circuit Breaker booster
Netflix/Hystrix 断路器组件使分布式应用能够应对对后端服务的网络连接和临时不可用的中断。断路器模式的基本理念是,自动检测到依赖服务的丢失,如果后端服务暂时不可用,可以编程替代行为。
Fuse 断路器提升器由两个相关服务组成:
- 名称服务,它将返回一个名称到 greet
-
一个 问候服务,它调用 name 服务以获取名称,然后返回字符串
Hello, NAME
。
在演示中,Hystrix circuit breaker 在问候服务和名称服务之间插入。如果名称服务不可用,则问候服务可能会回退到替代的行为并立即响应客户端,而不是在等待名称服务重启时阻止或超时。
先决条件
- 您已完成了 第 2.1 节 “生成您的 booster 项目” 部分所述的步骤。
流程
按照以下步骤构建并运行 Circuit breaker booster 项目:
打开 shell 提示符并使用 Maven 从命令行构建项目:
cd PROJECT_DIR mvn clean package
打开一个新的 shell 提示符并启动名称服务,如下所示:
cd name-service mvn spring-boot:run -DskipTests -Dserver.port=8081
当 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)
打开一个新的 shell 提示符并启动问候服务,如下所示:
cd greetings-service mvn spring-boot:run -DskipTests
当 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)
greetings 服务通过 URL 公开 REST 端点
http://localhost:8080/camel/greetings
。打开此页面时,它会调用 Greeting Service:
此页面也提供到 Hystrix 仪表板的链接,它监控断路器的状态。
要演示 Camel Hystrix 提供的断路器功能,请在名称服务的 shell 提示符窗口中按 Ctrl+C 来终止后端名称服务。
现在,名称服务不可用,断路器在 中启动,以防止在调用时问候服务挂起。
观察 Hystrix Monitor 仪表板和 Greeting Service 输出中的更改: