spring cloud简介
Spring Cloud是一个分布式框架,Spring Cloud是建立在Spring Boot上面的。
spring cloud组件
Eureka 注册中心 [juˈriːkə]
Feign 调用 [feɪn]
Hystrix 容错 [hɪst'rɪks]
Ribbon 负载远射
Zuul 网关
Config
Sleuth
创建Eureka注册中心
1、IDEA:new-->project-->Spring Initializr-->输入项目名-->Spring Cloud Discovery-->Eureka Server
Discovery [dɪˈskʌvəri] 发现
2、在启动类添加注解@EnableEurekaServer
3、配置application.properties
# 自己的端口号
server.port=9990
# 自己是注册中心,发布自己的地址,让别人找到自己
# 集群配置,http://127.0.0.1:9991/eureka,http://127.0.0.1:9992/eureka
eureka.client.service-url.defaultZone=http://127.0.0.1:9990/eureka/
# 是否把当前项目注册到注册中心,注册中心客户端项目设置为true,此项目是注册中心服务端
eureka.client.register-with-eureka=false
# 默认是true,注册中心集群同步数据,这里使用单机方式,所以关闭
eureka.client.fetch-registry=false
# 安全配置
spring.security.user.name=root
spring.security.user.password=root
4、springboot引入spring-boot-starter-security做安全校验后,自动开启CSRF安全认证,任何一次服务请求默认都需要CSRF 的token,而Eureka-client不会生成该token,故启动时会报如上错误。
在启动类里添加如下内部类代码:
@EnableWebSecurity static class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().ignoringAntMatchers("/eureka/**"); super.configure(http); } }
5、启动,测试
这个地址 http://127.0.0.1:9990/eureka 是给注册中心客户端使用的
浏览器直接访问http://127.0.0.1:9990
创建服务提供者
1、IDEA:new-->project-->Spring Initializr-->输入项目名-->Spring Cloud Discovery-->Eureka Discovery Client
2、在启动类添加注解@EnableEurekaClient
3、配置application.properties
# 自己的端口
server.port=8800
# 把自己注册到注册中心后,别人用这个名字引用我
spring.application.name=user-provider
# 注册到哪里,即注册中心地址
eureka.client.service-url.defaultZone=http://root:root@127.0.0.1:9990/eureka/
logging.level.root=trace
4、启动,测试
浏览器访问http://127.0.0.1:9990以查看服务提供者
创建 config server
1、IDEA:new-->project-->Spring Initializr-->输入项目名-->Spring Cloud Config-->Config Server
2、在启动类添加注解@EnableEurekaClient
3、配置application.yml
# 自己的端口
server.port=8800
# 把自己注册到注册中心后,别人用这个名字引用我
spring.application.name=user-provider
# 注册到哪里,即注册中心地址
eureka.client.service-url.defaultZone=http://root:root@127.0.0.1:9990/eureka/
logging.level.root=trace
4、启动,测试
浏览器访问http://127.0.0.1:9990以查看服务提供者
Spring Cloud Sleuth
Sleuth,提供服务链路跟踪的功能。在微服务中,通常根据业务分服务,前端发起一个请求,后端可能跨越几个服务调用,如果系统越来越庞大,服务之间的调用与被调用关系就会变得很复杂,因此需要一个服务跟踪组件。
Sleuth整合了Zipkin以实现服务跟踪。
实现方式一:
1、新建zipkin server
2、提供者、消费者和zipkin server连接,zipkin server收集跟踪数据。
实现方式二:
1、新建zipkin server
2、提供者、消费者发送数据到消息中间件(RabbitMQ),zipkin server再从消息中间件中获取数据。
zipkin server数据持久化
上面的zipkin server,数据只保存在内存中。
持久化,可以使用Mysql、Elasticsearch
ELK + Kafka 微服务日志收集
日志分散储存在不同的设备上,如果有数十上百台服务器,依次登录每台机器查阅日志,繁琐、效率低。
日志集中化管理,比如可以使用开源的syslog,将所有服务器上的日志收集汇总。然后,使用grep、awk、wc等Linux命令进行统计和检索。但是对于要求更高的查询、排序、统计,以及庞大的机器数量,难免力不从心。
开源实时日志分析——ELK平台应运而生。
ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成。
Logstash是个开源工具,可以对分布式日志收集存储,供以后使用搜索。
Elasticsearch是个开源分布式搜索引擎,特点:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Kibana也是个开源的工具,为 Logstash 和 ElasticSearch 提供友好的 Web 界面。
应用 --> Kafka --> logstash --> ElasticSearch -- > Kibana。
应用添加kafka maven依赖,application.yum配置kafka,使用kafkaTemplate发送消息
logstash
logstash.conf定义input、output规则。从kafka接收消息,输出到Elasticsearch