项目源码下载:(访问密码:9987)
spring-cloud-dashboards.zip
在交付基于微服务的应用程序时,广泛使用 Spring Boot 和 Spring Cloud。最终,基于运行在不同主机上的 Spring boot 应用程序来监控微服务已成为一种必要。有许多工具可用于监控这些微服务的各种健康状态。
在这个spring 云教程中,我们将学习使用三个这样的监控工具,即Hystrix 仪表板、Eureka 管理仪表板和Spring boot 管理仪表板。
1. 概述
在这个演示中,我们将创建三个应用程序。
- 员工服务——这个微服务应用程序负责获取员工的数据。
- Api-Gateway – 此应用程序是在访问不同的微服务时提供通用网关。在以下示例中,它将充当上述员工服务的网关。
- Eureka Server – 该微服务应用程序将提供上述微服务的服务发现和注册。
这个演示是围绕Netflix Eureka创建的,用于集中管理和监控注册的应用程序。您可能已经知道 Netflix Eureka 服务器用于构建服务注册服务器和关联的 Eureka 客户端,它们将注册自己以查找其他服务并通过 REST api 进行通信。
2. 技术栈
- Java 1.8
- Spring tool suite
- Spring cloud
- Spring boot
- Spring Rest
- Maven
3. 员工服务
- 从Spring boot 初始化程序/ Spring 工具套件创建一个 Spring boot 项目,依赖Eureka Discovery、Actuator、Web、Rest 存储库。
EmployeeServiceApplication
启动 Spring boot 应用程序的主应用程序类。import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication @EnableEurekaClient public class EmployeeServiceApplication { public static void main(String[] args) { SpringApplication.run(EmployeeServiceApplication.class, args); } }
@EnableEurekaClient – 此注解将此服务注册为下面创建的Eureka 服务器应用程序中的 Eureka 客户端。
- 创建一个 Rest 控制器类 [ EmployeeServiceController ] 来公开 Employee 数据
import java.util.HashMap; import java.util.Map; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import com.howtodoinjava.example.employee.beans.Employee; @RestController public class EmployeeServiceController { private static final Map<Integer, Employee> employeeData = new HashMap<Integer,Employee() { private static final long serialVersionUID = -3970206781360313502L; { put(111,new Employee(111,"Employee1")); put(222,new Employee(222,"Employee2")); } }; @RequestMapping(value = "/findEmployeeDetails/{employeeId}", method = RequestMethod.GET) public Employee getEmployeeDetails(@PathVariable int employeeId) { System.out.println("Getting Employee details for " + employeeId); Employee employee = employeeData.get(employeeId); if (employee == null) { employee = new Employee(0, "N/A"); } return employee; } }
相关的Employee
Bean 类如下
public class Employee {
private String name;
private int id;
@Override
public String toString() {
return "Employee [name=" + name + ", id=" + id + "]";
}
}
application.yml
在src/main/resources
目录中创建。
server:
port: 8011
eureka:
instance:
leaseRenewalIntervalInSeconds: 5
leaseExpirationDurationInSeconds: 2
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
healthcheck:
enabled: true
lease:
duration: 5
spring:
application:
name: employee-service
management:
security:
enabled: false
logging:
level:
com.self.sprintboot.learning.employee: DEBUG
启动此应用程序可达 http://localhost:8011/findEmployeeDetails/111
4. 带有 Hystrix 的 API 网关
- 从Spring boot 初始值设定项/ Spring 工具套件创建一个 Spring boot 项目,并具有依赖项
Eureka Discovery
、Actuator
、Web
、Hystrix
、Hystrix Dashboard
、Rest repositories
。 ApiGatewayApplication
启动 Spring boot 应用程序的主要应用程序类。import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard; @SpringBootApplication @EnableEurekaClient @EnableHystrixDashboard @EnableCircuitBreaker public class ApiGatewayApplication { public static void main(String[] args) { SpringApplication.run(ApiGatewayApplication.class, args); } }
@EnableHystrixDashBoard – 提供 Hystrix 流的仪表板视图。
@EnableCircuitBreaker – 启用断路器实现。- 创建 REST 控制器类 [ EmployeeController ] 以公开 Employee 数据。
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.cloud.client.loadbalancer.LoadBalanced;import org.springframework.context.annotation.Bean;import org.springframework.core.ParameterizedTypeReference;import org.springframework.http.HttpMethod;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.client.RestTemplate; import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; @RestControllerpublic class EmployeeController { @Autowired RestTemplate restTemplate; @RequestMapping(value = "/employeeDetails/{employeeid}", method = RequestMethod.GET) @HystrixCommand(fallbackMethod = "fallbackMethod") public String getStudents(@PathVariable int employeeid) { System.out.println("Getting Employee details for " + employeeid); String response = restTemplate.exchange("http://employee-service/findEmployeeDetails/{employeeid}", HttpMethod.GET, null, new ParameterizedTypeReference<String>() {}, employeeid).getBody(); System.out.println("Response Body " + response); return "Employee Id - " + employeeid + " [ Employee Details " + response+" ]"; } public String fallbackMethod(int employeeid){ return "Fallback response:: No employee details available temporarily"; } @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); }}
application.yml
在src/main/resources
目录中创建。server: port: 8010 #port number eureka: instance: leaseRenewalIntervalInSeconds: 5 leaseExpirationDurationInSeconds: 2 client: serviceUrl: defaultZone: http://localhost:8761/eureka/ healthcheck: enabled: true lease: duration: 5 spring: application: name: api-gateway management: security: enabled: false logging: level: com.self.sprintboot.learning.apigateway: DEBUG
- 启动可访问的应用程序
http://localhost:8010/employeeDetails/111
5. Hystrix 仪表盘视图
- 要通过 Hystrix 仪表板进行监控,请在 处打开 Hystrix 仪表板
http://localhost:8010/hystrix
。
- 现在在仪表板中查看hystrix 流–
http://localhost:8010/hystrix.stream
这提供了所有 Hystrix 命令和线程池的实时信息。
6. Eureka 管理仪表板视图
现在让我们学习使用 Eureka 管理仪表板视图。
- 使用这些依赖项Eureka Server、Actuator、Web、Spring Boot Admin Server从Spring boot 初始化程序/ Spring 工具套件创建一个 Spring boot 项目。
EurekaServerApplication
启动 spring boot 应用程序的主要应用程序类。import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; import de.codecentric.boot.admin.config.EnableAdminServer; @SpringBootApplication @EnableEurekaServer @EnableAdminServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
@EnableEurekaServer – 此注释将使此应用程序充当微服务注册中心和发现服务器。
@EnableAdminServer – 这个注解提供了 Spring Boot Admin 配置。- 创建
application.yml
并bootstrap.yml
在src/main/resources
目录中。 - 添加
application.yml
给定的配置。请注意,对于 Spring boot 管理服务器,提供了不同的上下文路径/admin
,以免与/eureka
.server: port: ${PORT:8761} eureka: client: registryFetchIntervalSeconds: 5 registerWithEureka: false serviceUrl: defaultZone: ${DISCOVERY_URL:http://localhost:8761}/eureka/ instance: leaseRenewalIntervalInSeconds: 10 management: security: enabled: falsespring: boot: admin: context-path: /admin #A different context path for Spring boot admin server has been provided avoiding conflict with eureka
- 创建
bootstrap.yml
并提供此配置。$title(bootstrap.yml)spring: application: name: Eureka-Server cloud: config: uri: ${CONFIG_SERVER_URL:http://localhost:8888}
- 启动应用程序。但在此之前,请确保上面提到的其余客户端应用程序都已启动,以便查看所有已注册的应用程序。此应用程序可通过 访问
http://localhost:8761
。
7. Spring Boot 管理仪表板视图
- 要通过 Spring Boot Admin 服务器进行监控,请调用在不同上下文路径中运行的此 URL-
http://localhost:8761/admin
。 - 此管理界面提供应用程序概览、桌面通知、应用程序运行状况检查、日志文件浏览、JMX Bean、线程堆转储等。要查看单个应用程序运行状况并监控其指标,请单击详细信息按钮。它将带您进入单个应用程序的管理仪表板。
- 使用仪表板管理日志级别。
- 使用仪表板管理运行时环境属性。
- 您也可以使用它来查看 HTTP 跟踪。
项目源码下载:(访问密码:9987)
spring-cloud-dashboards.zip
原创文章,作者:端木书台,如若转载,请注明出处:https://blog.ytso.com/243834.html