HystrixDashboard 前面已经知道了,它的主要功能是可以对某一项微服务进行监控,但真实情况下,不可能只对某一个服务进行监控,更多的是对很多服务进行一个整体的监控,这个时候就需要使用到turbine来完成了。
为了演示监控多个服务模块,这个时候新建一个模块【microcloud-provider-user-hystrix】,为简单起见,这个模块并不连接数据库,也不做安全控制。
【microcloud-provider-user-hystrix】pom文件如下
<?xml version=”1.0” encoding=”UTF-8”?>
xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
【microcloud-api】新增一个VO类:Users
package cn.enjoy.vo;
import java.io.Serializable;
public class Users implements Serializable {
private String name;
private int age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
【microcloud-provider-user-hystrix】 新建一个UserController
package cn.enjoy.controller;
import cn.enjoy.vo.Users;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(“/users”)
public class UserController {
@RequestMapping(“/get/{name}”)
@HystrixCommand
public Object get(@PathVariable(“name”)String name) {
Users users = new Users();
users.setName(name);
users.setAge(18);
users.setSex(“F”);
return users;
}
}
【microcloud-provider-user-hystrix】新增启动类
package cn.enjoy;
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;
@SpringBootApplication
@EnableCircuitBreaker
@EnableEurekaClient
public class UsersApp {
public static void main(String[] args) {
SpringApplication.run(UsersApp.class,args);
}
}
【microcloud-provider-user-hystrix】修改application.yml配置文件
server:
port: 8090
spring:
application:
name: microcloud-provider-users
logging:
level:
cn.enjoy.mapper: debug
eureka:
client: # 客户端进行Eureka注册的配置
service-url:
defaultZone: http://admin:enjoy@eureka1:7001/eureka,http://admin:enjoy@eureka2:7002/eureka,http://admin:enjoy@eureka3:7003/eureka
instance:
instance-id: microcloud-provider-users
prefer-ip-address: true
lease-renewal-interval-in-seconds: 2 # 设置心跳的时间间隔(默认是30秒)
lease-expiration-duration-in-seconds: 5 # 如果现在超过了5秒的间隔(默认是90秒)
info:
app.name: microcloud-provider-users
company.name: enjoy
build.artifactId: $project.artifactId$
build.modelVersion: $project.modelVersion$
management:
endpoints:
web:
exposure:
include: ‘*’
启动后:
访问地址:http://localhost:8090/users/get/enjoy
hystrix监控地址:http://localhost:8090/actuator/hystrix.stream
前面准备工作完成后,如果想要实现 turbine 的配置,准备一个turbine模块
新增【microcloud-consumer-turbine】模块,pom文件如下
<?xml version=”1.0” encoding=”UTF-8”?>
xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
【microcloud-consumer-turbine】修改application.yml配置文件
server:
port: 9101
eureka:
client:
register-with-eureka: false
service-url:
defaultZone: http://admin:enjoy@eureka1:7001/eureka,http://admin:enjoy@eureka2:7002/eureka,http://admin:enjoy@eureka3:7003/eureka
turbine:
app-config: MICROCLOUD-PROVIDER-PRODUCT,MICROCLOUD-PROVIDER-USERS
cluster-name-expression: new String(“default”)
可以发现对于turbine,其实是从eureka配置在app-config中服务,然后进行监控
【microcloud-consumer-turbine】 新建一个启动类
package cn.enjoy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.turbine.EnableTurbine;
@SpringBootApplication
@EnableTurbine
public class TurbineApp {
public static void main(String[] args) {
SpringApplication.run(TurbineApp.class,args);
}
}
turbine监控地址:
启动Dashboard: http://localhost:9001/hystrix
在Dashboard里面填上 turbine监控地址
发现目前turbine只监控了UserController的信息,看下turbine后台发现报错
其实原因也很简单,User服务并不需要用户验证,所以能正常访问,但对于Product服务,配置了用户名密码的,turbine肯定无法访问
【microcloud-security】如果现在需要turbine进行加密服务的访问,那么只能折衷处理,让访问/actuator/hystrix.stream与/turbine.stream这两个地址的时候不需要用户密码验证
【microcloud-security】 修改WebSecurityConfiguration
package cn.enjoy.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@Configuration
@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
public void configure(AuthenticationManagerBuilder auth)
throws Exception {
auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder()).withUser(“root”).password(new BCryptPasswordEncoder().encode(“enjoy”)).roles(“USER”).
and().withUser(“admin”).password(new BCryptPasswordEncoder().encode(“enjoy”)).roles(“USER”, “ADMIN”);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.httpBasic().and().authorizeRequests().anyRequest()
.fullyAuthenticated();
http.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers(“/actuator/hystrix.stream”,”/turbine.stream”) ;
}
}
turbine监控地址:http://localhost:9101/turbine.stream
启动Dashboard: http://localhost:9001/hystrix
在Dashboard里面填上 turbine监控地址
刷新:
http://localhost:8080/prodcut/get/1
http://localhost:8090/users/get/1