SpringCloud微服务学习

SpringCloud微服务pdf学习:https://download.csdn.net/download/chen_jia_hao/11263144

SpringCloud微服务中文官方文档:https://springcloud.cc/

SpringCloud微服务英文官方文档:https://spring.io/projects/spring-cloud/

这里主要讲SpringCloud Config配置中心、SpringCloud Eureka注册中心、SpringCloud提供者和消费者(Feign远程调用) 整合搭建思路。

注:一个微服务即可以是提供方也可以是消费方,并没有严格意义上的区分。

自己写的Demo可在这里下载:https://gitee.com/chen_jia_hao/SpringCloud-Demo

以下只是搭建的思路,可供参考。

一、SpringCloud Config分布式配置服务中心搭建

SpringCloud微服务学习_第1张图片

其中config_cloud目录下的application.yml是其它微服务默认配置,如果其它微服务没有在这里配置,则默认读取application.yml.

配置如下:

####存放默认配置(提供和消费者)
spring:
  application:
    name: com.cjh.clouddefault #应用名称

#注册中心配置
eureka:
  client:
    serviceUrl:
      defaultZone: http://register_user:123456@cjh-registry:8091/eureka/

#使用Feign调用接口分两层,ribbon的调用和hystrix的调用,
#所以ribbon的超时时间和Hystrix的超时时间的结合就是Feign的超时时间
#hystrix的超时时间
hystrix:
  command:
    default:
      execution:
        timeout:
          enabled: true #开启hystrix超时时间
        isolation:
          thread:
            timeoutInMilliseconds: 10000 #熔断超时时长毫秒,默认超时1s
#ribbon的超时时间
ribbon:
  ReadTimeout: 7000 #读取超时
  ConnectTimeout: 3000 #连接超时
  MaxAutoRetries: 0 #失败重试次数
  MaxAutoRetriesNextServer: 0 #失败更换服务实例数

#feign:
#  compression:
#    request:
#      enabled: true #开启压缩,可以节约网络资源,但会增加CPU压力
#      mime-types: application/json,text/xml,application/xml #配置压缩文档类型
#      min-request-size: 2048 #最小压缩的文档大小
#    response:
#      enabled: true

 

1、添加依赖:


            org.springframework.cloud
            spring-cloud-config-server
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-server
        
        
            org.springframework.boot
            spring-boot-starter-security
        

2、application.yml配置:

spring:
  application:
    name: com.cjh.cloudconfig #应用名
  security:
    user:
      name: config_user #安全用户名
      password: 123456 #安全密码
  profiles:
    active: native #不配置默认git配置仓库,subversion:svn配置仓库,native:本地配置仓库
  cloud:
    config:
      server:
        native:
          search-locations: classpath:/config_cloud #native本地配置,配置中心从本地哪里找配置

server:
  port: 8081 #应用端口

#注册中心配置
eureka:
  client:
    serviceUrl:
      defaultZone: http://register_user:123456@cjh-registry:8091/eureka/

3、启动Application类:通过@EnableConfigServer注解启动

/***
 * 分布式配置中心
 * @author chen jia hao
 */
@SpringBootApplication
@EnableConfigServer
public class CloudConfigApplication {
    public static void main(String[] args) {
        SpringApplication.run(CloudConfigApplication.class, args);
    }
}

二、SpringCloud Eureka注册中心搭建

SpringCloud微服务学习_第2张图片

1、添加依赖:


        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-server
        
        
            org.springframework.boot
            spring-boot-starter-security
        

        
            org.springframework.cloud
            spring-cloud-starter-config
        

    

2、在SpringCloud Config分布式配置中心里添加当前注册中心的application.yml配置:

SpringCloud微服务学习_第3张图片

spring:
  application:
    name: com.cjh.cloudregistry #应用名称
  security:
    user:
      name: register_user #安全用户名
      password: 123456 #安全密码

server:
  port: 8091 #应用端口

eureka:
  instance:
    hostname: cjh-registry #主机名
  client:
    serviceUrl:
      defaultZone: http://register_user:123456@cjh-registry:8091/eureka/ #注册中心地址,集群时逗号分开
    fetch-registry: false #是否从注册中心抓取注册表
    register-with-eureka: false #是否将自己注册到注册中心

3、在注册中心下的bootstrap.yml配置SpringCloud配置中心信息,这样就可以注册中心就能正确从配置中心获取注册中心配置信息:

SpringCloud微服务学习_第4张图片

spring:
  cloud:
    config:
      uri: http://cjh-config:8081 #配置服务中心地址
      name: cloud-registry #配置文件名称
      fail-fast: true #允许响应快速失败
      enabled: true
      username: config_user #配置中心安全用户
      password: 123456 #配置中心安全用户密码
#      discovery:
#              enabled: true #是否从配置中心读取文件
#              service-id: com.cjh.cloudconfig #配置中心的服务名,方便集群

4、因为加入了Spring Security安全框架,所以还要添加如下配置类:

/**
 * SpringSecurity默认开启跨域保护
 * 此处是为了解决不能向注册中心注册实例问题
 * @author chen jia hao
 */
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();// 关闭csrf检验
        super.configure(http);
        //http.csrf().disable().authorizeRequests().anyRequest().authenticated().and().httpBasic();
    }
}

5、在启动Application里面加入@EnableEurekaServer注解,这样注册中心就搭建好了。

/***
 * Eureka注册中心
 * @author  chen jia hao
 */
@SpringBootApplication
@EnableEurekaServer
public class CloudRegistryApplication {
    public static void main(String[] args) {
        SpringApplication.run(CloudRegistryApplication.class, args);
    }
}


三、SpringCloud微服务远程调用——提供方

SpringCloud微服务学习_第5张图片

1、bootstrap.xml配置分布式配置中心信息:

spring:
  cloud:
    config:
      uri: http://cjh-config:8081 #配置服务中心地址
      name: provider-demo #配置文件名称
      fail-fast: true #允许响应快速失败
      enabled: true
      username: config_user
      password: 123456
#      discovery:
#              enabled: true #是否从配置中心读取文件
#              service-id: com.cjh.cloudconfig #配置中心的服务名,方便集群

2、在启动类添加@EnableEurekaClient或者@EnableDiscoveryClient注册,说明将自己作为一个服务注册到注册中心。

/***
 * 提供者
 *
 * 如果选用的注册中心是eureka,
 * 那么就推荐@EnableEurekaClient,
 * 如果是其他的注册中心,
 * 那么推荐使用@EnableDiscoveryClient。
 *
 * @author chen jia hao
 */
@SpringBootApplication
@EnableEurekaClient
public class ProviderDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderDemoApplication.class, args);
    }
}

3、编写具体服务。

四、SpringCloud微服务远程调用——消费方

通过Feign或Ribbon进行远程调用,Feign调用是基于Ribbon的,使用更方便。

SpringCloud微服务学习_第6张图片

1、在bootstrap.yml配置中配置分布式配置中心的信息。

spring:
  cloud:
    config:
      uri: http://cjh-config:8081 #配置服务中心地址
      name: consumer-demo #配置文件名称
      fail-fast: true #允许响应快速失败
      enabled: true
      username: config_user
      password: 123456
#      discovery:
#              enabled: true #是否从配置中心读取文件
#              service-id: com.cjh.cloudconfig #配置中心的服务名,方便集群

2、编写调用提供方的服务客户端类,在服务类上写上@FeignClient注解,接口方法对应于提供方方法,如下:

/**
 * 通过Feign远程调用服务
 * name:服务ID
 * value:同name,服务ID
 * url: 服务URL地址,一般用于测试
 * path:路径前缀
 * qualifier:指定服务名称,避免服务接口有多个实例,不能根据类型注入
 * fallback: 指定容错处理类,并且fallback指定的类必须实现@FeignClient注解的接口
 * fallbackFactory: 工厂类,用于生成fallback类实例,可以实现每个接口通用的容错逻辑,减少重复的代码
 * @author chen jia hao
 */
@FeignClient(name = "com.cjh.providerdemo",path = "user",fallback = UserFallback.class)
public interface UserService {

    @ResponseBody
    @RequestMapping("queryUserList")
    public List queryUserList(User user);

}

这里还使用了熔断器,所以还需要编写UserService的熔断器处理类,这样当调用超时的时候会执行熔断器里面的逻辑:

/**
 * 熔断器处理类
 * @author chen jia hao
 */
@Component
public class UserFallback implements UserService {
    @Override
    public List queryUserList(User user) {
        System.out.println("调用User服务失败!");
        return new ArrayList<>(0);
    }
}

3、在启动类中添加@EnableFeignClients注解,开启Feign远程调用功能。@EnableHystrix开启熔断。

/**
 * 开启Feign调用
 * 开启熔断器
 */
@EnableFeignClients
@EnableHystrix
@SpringBootApplication
public class ConsumerDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerDemoApplication.class, args);
    }
}

 

SpringCloud Config配置中心、SpringCloud Eureka注册中心、SpringCloud服务提供方和消费方完成好以后。依次启动测试即可。由于注册中心的配置信息也配置在了SpringCloud配置中心,所以SpringCloud Config配置中心必须最先启动,否则其它微服务会因为获取不到配置信息,造成启动失败。

 

还有很多内容,比如网关等,未完待续......

 

 

 

你可能感兴趣的:(spring,分布式)