SpringCloud(三) Config,Bus,Stream,RabbitMq
spring cloud 3
flag
全名: facebook linkin amazon google
1Config 分布式配置中心
1.1Config 概述
Spring Cloud Config 解决了在分布式场景下多环境配置文件的管理和维护。
好处:
• 集中管理配置文件
• 不同环境不同配置,动态化的配置更新
• 配置信息改变时,不需要重启即可更新配置信息到服务
1.2Config 快速入门
config server:
使用gitee创建远程仓库,上传配置文件
config-dev.yml或者直接创建
以provider的application.yml为例 把里面的内容复制到config-dev.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21server:
port: 8002
eureka:
instance:
hostname: localhost # 主机名
prefer-ip-address: true # 将当前实例的ip注册到eureka server 中。默认是false 注册主机名
ip-address: 127.0.0.1 # 设置当前实例的ip
instance-id: ${eureka.instance.ip-address}:${spring.application.name}:${server.port} # 设置web控制台显示的 实例id
lease-renewal-interval-in-seconds: 3 # 每隔3 秒发一次心跳包
lease-expiration-duration-in-seconds: 9 # 如果9秒没有发心跳包,服务器呀,你把我干掉吧~
client:
service-url:
defaultZone: http://localhost:8761/eureka # eureka服务端地址,将来客户端使用该地址和eureka进行通信
spring:
application:
name: eureka-provider # 设置当前应用的名称。将来会在eureka中Application显示。将来需要使用该名称来获取路径
itheima: What 5555555555搭建 config-server 模块
ConfigServerApp
1
2
3
4
5
6
7
8
9
10
11
12
13
14package com.itheima.config;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
// 启用config server功能
public class ConfigServerApp {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApp.class,args);
}
}导入 config-server 依赖
pom
1
2
3
4
5<!-- config-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>编写配置,设置 gitee 远程仓库地址
application.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14server:
port: 9527
spring:
application:
name: config-server
# spring cloud config
cloud:
config:
server:
# git 的 远程仓库地址
git:
uri: https://gitee.com/itheima_cch/itheima-configs.git
label: master # 分支配置测试访问远程配置文件
config client: provider
导入 starter-config 依赖
1
2
3
4
5<!--config client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>配置config server 地址,读取配置文件名称等信息(此时的application.yml可以删除了)
bootstrap.yml
1
2
3
4
5
6
7
8
9
10
11# 配置config-server地址
# 配置获得配置文件的名称等信息
spring:
cloud:
config:
# 配置config-server地址
uri: http://localhost:9527
# 配置获得配置文件的名称等信息
name: config # 文件名
profile: dev # profile指定, config-dev.yml
label: master # 分支获取配置值
GoodsController
1
2
3
4//从gitee获取文件里的属性
private String itheima;
goods.setTitle(goods.getTitle() + ":" + port+":"+itheima);//将端口号,设置到了 商品标题上启动测试
Config 客户端刷新
在 config 客户端引入 actuator 依赖
1
2
3
4<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>获取配置信息类上,添加 @RefreshScope 注解
GoodsController
1
// 开启刷新功能
添加配置
bootstrap.yml
1 | management: |
使用curl工具发送post请求
curl -X POST http://localhost:8001/actuator/refresh
1.3Config 集成Eureka
config-client配置:
pom
1 | <!-- eureka-client --> |
ProviderApp
1 |
bootstrap.yml
1 | # 配置config-server地址 |
config-server配置:
pom
1 | <!-- eureka-client --> |
ConfigServerApp
1 |
application.yml
1 | eureka: |
2Bus 消息总线
远程的配置文件更新了,运维只需要发一个请求,所有用到这个配置文件的几百个应用更新了。
2.1Bus 概述
Spring Cloud Bus 是用轻量的消息中间件将分布式的节点连接起来,可以用于广播配置文件的更改或者服务的监控管理。关键的思想就是,消息总线可以为微服务做监控,也可以实现应用程序之间相通信。
Spring Cloud Bus 可选的消息中间件包括 RabbitMQ 和 Kafka 。
2.2RabbitMQ 回顾
message queue
RabbitMQ 提供了 6 种工作模式:简单模式、work queues、Publish/Subscribe 发布与订阅模式、Routing
路由模式、Topics 主题模式、RPC 远程调用模式(远程调用,不太算 MQ;暂不作介绍)。
2.3Bus 快速入门-运维
分别在 config-server 和 config-client中引入 bus依赖:bus-amqp
1
2
3
4
5<!-- bus -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>分别在 config-server 和 config-client中配置 RabbitMQ
server 的配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38server:
port: 9527
spring:
application:
name: config-server
# spring cloud config
cloud:
config:
server:
# git 的 远程仓库地址
git:
uri: https://gitee.com/itheima_cch/itheima-configs.git
label: master # 分支配置
#配置rabbitmq信息
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
virtual-host: /
# 将自己注册到eureka中
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
# 暴露bus的刷新端点
management:
endpoints:
web:
exposure:
include: 'bus-refresh'client的配置文件 bootstrap.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28# 配置config-server地址
# 配置获得配置文件的名称等信息
spring:
cloud:
config:
# 配置config-server地址
# uri: http://localhost:9527
# 配置获得配置文件的名称等信息
name: config # 文件名
profile: dev # profile指定, config-dev.yml
label: master # 分支
# 从注册中心去寻找config-server地址
discovery:
enabled: true
service-id: CONFIG-SERVER
#配置rabbitmq信息
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
virtual-host: /
management:
endpoints:
web:
exposure:
include: '*'在config-server中设置暴露监控断点:bus-refresh
1
2
3
4
5
6# 暴露bus的刷新端点
management:
endpoints:
web:
exposure:
include: 'bus-refresh'启动测试
往配置中心发请求
curl -X POST http://localhost:9527/actuator/bus-refresh
3Stream 消息驱动
3.1Stream 概述
rabbitTemplate.convertAndSend(“交换机”,luyoukey,”消息体”)
kafka.send()
1Spring Cloud Stream 是一个构建消息驱动微服务应用的框架。
2Stream 解决了开发人员无感知的使用消息中间件的问题,因为Stream对消息中间件的进一步封装,可以做到代码层面对中间件的无感知,甚至于动态的切换中间件,使得微服务开发的高度解耦,服务可以关注更多自己的业务流程。
3Spring Cloud Stream目前支持两种消息中间件RabbitMQ和Kafka
Stream 组件
Spring Cloud Stream 构建的应用程序与消息中间件之间是通过绑定器 Binder 相关联的。绑定器对于应用程序而言起到了隔离作用, 它使得不同消息中间件的实现细节对应用程序来说是透明的。
binding 是我们通过配置把应用和spring cloud stream 的 binder 绑定在一起
output:发送消息 Channel,内置 Source接口
input:接收消息 Channel,内置 Sink接口
3.2Stream 消息生产者 stream-producer
pom
1 |
|
ProducerApp
1 | package com.itheima.stream; |
application.yml
1 | server: |
消息发送类 MessageProducer
1 | package com.itheima.stream.producer; |
调用的controller ProducerController
1 | package com.itheima.stream.producer; |
3.3Stream 消息消费者 stream-consumer
pom
1 |
|
ConsumerApp
1 | package com.itheima.stream; |
application.yml
1 | server: |
消息接收类 MessageListener
1 | package com.itheima.stream.consumer; |
测试
4Sleuth+Zipkin 链路追踪-运维
4.1概述
Spring Cloud Sleuth 其实是一个工具,它在整个分布式系统中能跟踪一个用户请求的过程,捕获这些跟踪数据,就能构建微服务的整个调用链的视图,这是调试和监控微服务的关键工具。
1 | 耗时分析 |
Zipkin 是 Twitter 的一个开源项目,它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现
4.2快速入门
安装启动zipkin。 java –jar zipkin.jar
访问zipkin web界面。 http://localhost:9411/
在服务提供方和消费方分别引入 sleuth 和 zipkin 依赖
由于 zipkin 集成了 sleuth 所以 可省略导入 sleuth
1
2
3
4
5
6
7
8
9
10<!-- sleuth-zipkin -->
<!--<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>分别配置服务提供方和消费方。
provider
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16server:
port: 8001
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
spring:
application:
name: feign-provider
zipkin:
base-url: http://localhost:9411/ # 设置zipkin的服务端路径
sleuth:
sampler:
probability: 1 # 采集率 默认 0.1 百分之十。consumer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24server:
port: 9000
eureka:
instance:
hostname: localhost # 主机名
client:
service-url:
defaultZone: http://localhost:8761/eureka
spring:
application:
name: feign-consumer # 设置当前应用的名称。将来会在eureka中Application显示。将来需要使用该名称来获取路径
zipkin:
base-url: http://localhost:9411/ # 设置zipkin的服务端路径
sleuth:
sampler:
probability: 1 # 采集率 默认 0.1 百分之十。
logging:
level:
com.itheima: debug启动,测试
总结: eureka feign gateway
1软件架构演进 springcloud
1.1 单体架构—》垂直拆分—》分布式架构—-》soa服务总线——》微服务架构
1.2springcloud
微服务治理框架 拿来主义
boot改造 版本号 地铁站a-z排列
greenwich ——-> 2.1.x
1.3dubbo区别
dubbo 功能少 rpc 快
cloud 功能多 restful 慢
2注册中心
工作原理
eureka
eureka-server 导包 主启动类@EnableEurekaServer 配置文件
微服务 导包eureka-client 主启动类@EnableEurekaClient 配置文件
调用 discoveryClient
配置文件
instance prefer-ip-address:true ip-address:127.0.0.1 心跳时间30 驱逐时间90
server 自我保护:true 驱逐时间120
clinet server地址 注册 拉取
dashboorad 开着
高可用 互相注册
consule 起起来
nacos 起起来
3服务调用
3.1ribbon @LoadBalanced url=”http://eureka-provider/goods
服务端负载均衡 客户端负载均衡
3.2负载均衡算法改
代码 配置类 主启动类 调用哪个微服务用哪个算法
配置 简单
feign
用法
1导包 openfeign
2注解@EnableFeignClients
3定义feign客户端
辅助功能
超时时间
1 | ribbon: |
日志
1配置
1 | logging: |
2配置类
3feign接口 configuration = FeignLogConfig.class
4熔断器 hystrix
隔离 线程池隔离 信号量隔离
降级 返回一个特殊对象
提供方降级 导包 降级方法 主方法(@HystrixCommand(fallbackMethod = “findById_fallbak”)
超时 出错立马执行降级方法,返回特殊对象
调用方降级
1开启
1 | feign: |
2实现类 返回特殊对象
3feign客户端 fallback = GoodsFeignFallbak.class
熔断
限流 有但我们不用
5网关gateway 路由+过滤
路由:配置文件
1 | - id: gateway-provider |
过滤:
内置局部过滤器
1 | filters: |
内置全局过滤器
1 | default-filters: |
自定义全局
1 | implements GlobalFilter, Ordered |
6 spring cloud config
7bus 服务总线
8stream 消息驱动
9链路追踪 运维
启动 zipkin
微服务往ziplin