SpringCloud
模块说明
模块名称 | 模块作用介绍说明 |
---|---|
cloud-consumer-order80 | 消费者调用Eureka注册中心提供者 |
cloud-api-commons | 自定义公共实体类 |
cloud-eureka-server7001 | Eureka注册中心7001端口 |
cloud-eureka-server7002 | Eureka注册中心7002端口 |
cloud-provider-payment8002 | 服务提供者注册到Eureka注册中心 |
cloud-provider-payment8001 | 服务提供者注册到Eureka注册中心 |
cloud-provider-payment8004 | 服务提供者注册到Zookeeper注册中心 |
cloud-consumerzk-order81 | 消费者调用Zookeeper注册中心提供者 |
ConsulProvider8006 | 务提供者注册到Consul注册中心 |
cloud-consumerconsul-order80 | 消费者调用Consul注册中心提供者 |
cloud-consumer-feign-order80 | 实现负载均衡调用方 |
cloud-provider-hygtrix-payment8001 | 实现服务降级、服务熔断 |
cloud-consumer-feign-hystrix-order80 | OpenFeign服务降级调用 |
cloud-consumer-hystrix-dashboard9001 | Hystrix图形化Dashboard搭建 |
cloud-gateway-gateway9527 | 网关GateWay进行predicate(断言)、Filter |
cloud-config-center-3344 | config服务端 |
cloud-config-client-3355 | config客户端 |
cloud-config-client-3366 | config客户端 |
cloud-stream-rabbitmq-provider8801 | stream生产者 |
cloud-stream-rabbitmq-consumer8802 | stream消费者 |
cloud-stream-rabbitmq-consumer8803 | stream消费者 |
-
- 1.Use the RestTemplate to call the server from the client
- 2.Eureka cluster code implementation
- 3.Implement the Zookeeper and Consul service invocation
- 4.Customize Ribbon load rules
- 5.OpenFeign service invocation and OpenFeign timeout control
- 6.OpenFeign
- 7.Hystrix
- 8.Gateway
- 9.Spring Cloud Config
- 10.SpringCloud Bus RabbitMQ
- 11.SpringCloud Stream
- 12.Spring Cloud Sleuth
-
Nacos学习记录
1.Use the RestTemplate to call the server from the client
2.Eureka cluster code implementation
3.Implement the Zookeeper and Consul service invocation
4.Customize Ribbon load rules
-
RoundRobinRule: 轮询
-
RandomRule: 随机
-
RetryRule: 先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重
-
WeightedResponseTimeRule: 对RoundRobinRule的扩展,响应速度越快的实例选择权重越大,越容易被选择
-
BestAvailableRule: 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
-
AvailabilityFilteringRule: 先过滤掉故障实例,再选择并发较小的实例
-
ZoneAvoidanceRule: 默认规则,复合判断server所在区域的性能和server的可用性选择服务器
5.OpenFeign service invocation and OpenFeign timeout control
6.OpenFeign
- NONE: 默认的,不显示任何日志;
- BASIC: 仅记录请求方法、URL、响应状态码及执行时间;
- HEADERS: 除了BASIC中定义的信息之外,还有请求和响应的头信息;
- FULL: 除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。
7.Hystrix
大神结论:
- 服务降级及示例
- 服务熔断及示例
- 服务限流及示例
- Hystrix图形化Dashboard搭建
cloud-consumer-hystrix-dashboard9001
8.Gateway
8.1 GateWay_Predicate
- 方式一: YML文件配置
server:
port: 9527
spring:
application:
name: cloud-gateway
#############################新增网关配置###########################
cloud:
gateway:
routes:
- id: payment_routh #payment_route #路由的ID,没有固定规则但要求唯一,建议配合服务名
uri: http://localhost:8001 #匹配后提供服务的路由地址
#uri: lb://cloud-payment-service #匹配后提供服务的路由地址
predicates:
- Path=/payment/get/** # 断言,路径相匹配的进行路由
- id: payment_routh2 #payment_route #路由的ID,没有固定规则但要求唯一,建议配合服务名
uri: http://localhost:8001 #匹配后提供服务的路由地址
#uri: lb://cloud-payment-service #匹配后提供服务的路由地址
predicates:
- Path=/payment/lb/** # 断言,路径相匹配的进行路由
####################################################################
eureka:
instance:
hostname: cloud-gateway-service
client: #服务提供者provider注册进eureka服务列表内
service-url:
register-with-eureka: true
fetch-registry: true
defaultZone: http://eureka7001.com:7001/eureka
- 方式二 : 配置类
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class GateWayConfig
{
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder)
{
RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
routes.route("HaloWay",
r -> r.path("/guonei")
.uri("http://news.baidu.com/guonei")).build();
return routes.build();
}
}
8.2 GateWay_Filter
- 自定义过滤配置类
package com.cqw.springcloud.Config;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class GateWayConfig
{
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder)
{
RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
routes.route("HaloWay",
r -> r.path("/guonei")
.uri("http://news.baidu.com/guonei")).build();
return routes.build();
}
}
浏览器输入:
http://localhost:9527/payment/lb - 访问异常
http://localhost:9527/payment/lb?uname=abc - 正常访问
9.Spring Cloud Config
9.1.Spring Cloud Config Server
步骤:
- 1.在GitHub新建一个仓库,并clone到本地
git init
git clone https://github.com/chenqiwei123/springcloudConfig
- 2.添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
- 3.application.yml配置文件
server:
port: 3344
spring:
application:
name: cloud-config-center #注册进Eureka服务器的微服务名
cloud:
config:
server:
git:
uri: file:///D:/Git/SpringConfig/springcloudConfig #GitHub上面的git仓库名字
####读取分支
label: master
#服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
register-with-eureka: false
fetch-registry: false
- 4.主启动类添加
@EnableConfigServer
package com.cqw.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer
public class ConfigCenterMain3344
{
public static void main(String[] args) {
SpringApplication.run(ConfigCenterMain3344.class, args);
}
}
- 5.启动注册中心并测试
1.我的注册中心是7001,启动它
2.访问:http://127.0.0.1:3344/master/config-dev.yml
页面返回结果:
config:
info: master branch,springcloud-config/config-dev.yml version=7
配置读取规则
9.1.Spring Cloud Config Client
- 添加Config Client依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
- Config First Bootstrap(
bootstrap.yml
)
server:
port: 3355
spring:
application:
name: config-client
cloud:
#Config客户端配置
config:
label: master #分支名称
name: config #配置文件名称
profile: dev #读取后缀名称 上述3个综合:master分支上config-dev.yml的配置文件被读取http://config-3344.com:3344/master/config-dev.yml
uri: http://localhost:3344 #配置中心地址k
#服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
# 暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"
- TEST读取并动态刷新
@RestController
@RefreshScope
public class ConfigClientController
{
@Value("${config.info}")
private String configInfo;
@GetMapping("/configInfo")
public String getConfigInfo()
{
return configInfo;
}
}
- 启动 注册中心、config服务端、config客户端
修改github中文件,并手动post属性config客服端 curl -X POST "http://localhost:3355/actuator/refresh"
10.SpringCloud Bus RabbitMQ
#进入到rabbitmq安装目录的sbin目录下
cd C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.3\sbin
#安装插件
.\rabbitmq-plugins.bat enable rabbitmq_management
- 可视化插件
-
访问地址查看是否安装成功:http://localhost:15672/
-
输入账号密码并登录:guest guest
- 给Config Server添加依赖
<!--添加消息总线RabbitNQ支持-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
- 添加rabbitmq配置文件
#rabbitmq相关配置<--------------------------
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
##rabbitmq相关配置,暴露bus刷新配置的端点<--------------------------
management:
endpoints: #暴露bus刷新配置的端点
web:
exposure:
include: 'bus-refresh'
- 更改github内容,修改版本号,如果配置文件映射的是本地拉取的github文件,则pull一下.发送POST请求
curl -X POST "http://localhost:3344/actuator/bus-refresh"
出现405错误重启IDEA!,即可实现一次修改,广播通知,处处生效
11.SpringCloud Stream
常见MQ(消息中间件)
- ActiveMQ
- RabbitMQ
- RocketMQ
- Kafka
Stream是什么及Binder介绍
组成 | 说明 |
---|---|
Middleware | 中间件,目前只支持RabbitMQ和Kafka |
Binder | Binder是应用与消息中间件之间的封装,目前实行了Kafka和RabbitMQ的Binder,通过Binder可以很方便的连接中间件,可以动态的改变消息类型(对应于Kafka的topic,RabbitMQ的exchange),这些都可以通过配置文件来实现 |
@Input | 注解标识输入通道,通过该输乎通道接收到的消息进入应用程序 |
@Output | 注解标识输出通道,发布的消息将通过该通道离开应用程序 |
@StreamListener | 监听队列,用于消费者的队列的消息接收 |
@EnableBinding | 指信道channel和exchange绑定在一起 |
代码中的五个模块测试
模块名 | 模块职责说明 |
---|---|
cloud-eureka-server7001 | 注册中心 |
cloud-eureka-server7002 | 注册中心 |
cloud-stream-rabbitmq-provider8801 | 作为生产者进行发消息模块 |
cloud-stream-rabbitmq-consumer8802 | 作为消息接收模块 |
cloud-stream-rabbitmq-consumer8803 | 作为消息接收模块 |
Stream之group解决消息重复消费
- 原理
微服务应用放置于同一个group中,就能够保证消息只会被其中一个应用消费一次。 不同的组是可以重复消费的,同一个组内会发生竞争关系,只有其中一个可以消费。 8802/8803都变成不同组,group两个不同
- 解决消息重复消费
默认每个组的组号不一致,设置相同组的组号一样就好了 spring.cloud.stream.bindings.output.group=Group