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分布式配置服务中心搭建
其中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注册中心搭建
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配置:
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配置中心信息,这样就可以注册中心就能正确从配置中心获取注册中心配置信息:
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微服务远程调用——提供方
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的,使用更方便。
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配置中心必须最先启动,否则其它微服务会因为获取不到配置信息,造成启动失败。
还有很多内容,比如网关等,未完待续......