Spring Cloud Netflix

504 阅读2分钟

官方文档

Spring Cloud Netflix

官方介绍

This project provides Netflix OSS integrations for Spring Boot apps through autoconfiguration and binding to the Spring Environment and other Spring programming model idioms. With a few simple annotations you can quickly enable and configure the common patterns inside your application and build large distributed systems with battle-tested Netflix components. The patterns provided include Service Discovery (Eureka), Circuit Breaker (Hystrix), Intelligent Routing (Zuul) and Client Side Load Balancing (Ribbon).

Demo 源码

GitHub:spring-cloud-netflix-demo

Ribbon

官网文档

Spring Cloud Netflix Ribbon

基本使用

1、添加Ribbon Starter依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    <version>${spring-cloud.version}</version>
</dependency>

2、配置RestTemplate,添加LoadBalanced 注解

@Configuration
public class RestConfiguration {
​
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
        return restTemplateBuilder.build();
    }
}

3、配置文件中定义服务列表

user-server.ribbon.listOfServers=localhost:8081,localhost:8083

源码分析

未完待续。。。

Feign

基本使用

1、添加openFeign 依赖包

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>${spring-cloud.version}</version>
</dependency>

2、创建FeignClient接口类,添加FeignClient 注解

@FeignClient("user-server")
@RequestMapping("/user")
public interface UserService {
​
    @GetMapping("/{uid}")
    String getUserInfo(@PathVariable("uid") String uid);
}

3、启动类增加EnableFeignClients 注解

@EnableFeignClients
@SpringBootApplication
public class OrderServerApplication {
​
    public static void main(String[] args) {
        SpringApplication.run(OrderServerApplication.class, args);
    }
}

Client 扩展

使用OkHttp

1、添加OkHttp依赖包。

<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-okhttp</artifactId>
    <version>10.12</version>
</dependency>

2、修改application.properties配置文件,开启OkHttp Client。

feign.okhttp.enabled=true

使用HttpClient

使用HttpClient5

源码分析

未完待续。。。

Eureka Server

官网文档

Spring Cloud Netflix Eureka Server

基本使用

参考:docs.spring.io/spring-clou…

1、创建Spring-boot项目 pom.xml 添加eureka-server依赖包

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

2、启动类添加EnableEurekaServer注解

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
​
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
​
}

3、application.properties 配置文件添加eureka-server 配置,包括端口配置

# 服务启动端口号
server.port=8761
# 定义服务名称
spring.application.name=example-eureka-server
​
# 是否注册到eureka中
eureka.client.registerWithEureka=false
# 是否获取服务信息
eureka.client.fetchRegistry=false
# 注册中心服务地址
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

4、启动spring-boot项目,浏览器访问http://localhost:8761

Eureka Server 安全

参考:securing-the-eureka-server

1、引入Spring Security 依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

2、针对Eureka 客户端屏蔽CSRF

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().ignoringAntMatchers("/eureka/**");
        super.configure(http);
    }
}

3、配置文件中配置登录用户名密码

spring.security.user.name=admin
spring.security.user.password=123456

Eureka Client

官网文档

Spring Cloud Netflix Eureka Client

基本使用

1、Spring Boot项目添加eureka-client 依赖。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2、配置文件配置Eureka 注册中心地址。

eureka.client.serviceUrl.defaultZone=http://admin:123456@127.0.0.1:8761/eureka/

3、启动类增加EnableEurekaClient注解。

@EnableEurekaClient
@SpringBootApplication
public class UserServerApplication {
​
    public static void main(String[] args) {
        SpringApplication.run(UserServerApplication.class, args);
    }
​
}

Hystrix