版本关系
我这一套用的是:
-
mySQL版本
5.5.15
-
boot版本
2.2.13.RELEASE
-
cloud版本
Hoxton.RELEASE
-
cloud alibaba版本
2.2.0
nacos openFeign Gateway sentinel seata的pom赖版本为cloudAlibaba默认的 -
nacos 客户端版本
1.1.4
-
sentinel dashboard版本
1.7.1
-
seata-server
1.0.0
springCloudAlibaba各个组件版本对应关系可参考: Spring Cloud Alibaba 版本发布说明
pom.xml 依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.13.RELEASE</version>
<relativePath/>
</parent>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-cloud.version>Hoxton.RELEASE</spring-cloud.version>
<spring-cloud-alibaba.version>2.2.0.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependencyManagement>
<dependencies>
<!--springCloud的依赖-->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--springCloud-alibaba的依赖-->
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-alibaba-dependencies -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- lombok-->
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</dependency>
<!-- fastjson -->
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.56</version>
</dependency>
<!-- jdbc Connector-->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<!-- spring-boo web启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- nacos客户端 服务注册与发现 -->
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- openfeign 微服务接口式调用 里面包含了Hystrix 和 ribbon的jar包 -->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- sentinel -->
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!-- gateway网关 -->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-gateway -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
</dependencies>
<!-- seata 分布式事务管理 包括了druid 的jar包-->
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-seata -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>
配置文件
server:
port: 8081 #服务端口号
spring:
application:
name: service-product #服务名
datasource: #数据源配置
driver-class-name: com.mysql.jdbc.Driver # 如果数据库版本是8.0.x 这里需要写 com.mysql.cj.jdbc.Driver
url: jdbc:mysql:///shop?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource #seata 1.0.0需要配置这个 不然启动不起来
cloud:
nacos: #nacos配置
discovery:
server-addr: 127.0.0.1:8848 #去哪里注册和发现服务 这里应该写nacos服务所在的ip和端口号
sentinel: #sentinel 配置
eager: true
transport:
dashboard: localhost:8080 #sentinel服务 的地址
gateway: #网关配置 主要是路由和过滤器
globalcors: #全局跨域配置 这里配置的 是所有服务都支持的 一般都配置全局配置
cors-configurations:
'[/**]':
allowedOrigins: '*' # 支持的请求地址 allowedOrigins
allowedMethods: # 支持的请求方式 '*' 代表支持所有请求方式
- GET
routes:
- id: order-route # 路由名
uri: lb://service-order # 请求转发给哪一个服务 以负载均衡的策略
predicates: # 路径断言
- Path=/api/orderNacos/** # 访问路径 例如/api/order/createOrder 会转发给 service-order服务的 /api/order/createOrder
#- IncludeParam=pid,3 #自定义路由断言规则测试
#order: 0 # 优先级 数字越小 优先级越高
# metadata:
# cors: #全局跨域配置 这里配置的 是只有当前服务支持的
# allowedOrigins: '*' # 支持的请求地址
# allowedMethods: # 支持的请求方式
# - GET
# - POST
# allowedHeaders: '*'
# maxAge: 30
filters:
# - OnceToken=X-Response-Token,uuid #自定义过滤器测试
# - Rewrite=/api/orderNacos/?(?<segment>.*),/$\{segment} # 路径重写 网关转发请求时 默认会原封不动的将路径转发 添加此项后会进行路径重写 例如 这里就是讲路径中的 /api/orderNacos 去掉 也就是将/api/orderNacos/abc转换为 /abc再发送至 service-order服务
- AddResponseaHeader=X-Response-Abc,123 #给响应头添加内容 加一个X-Response-Abc 属性值为123
- id: product-route
uri: lb://service-product
predicates:
- Path=/api/product/**
# default-filters: #默认过滤器 所有的路由都会生效
# - AddResponseaHeader=X-Response-All,all #给所有的响应头添加内容
feign:
sentinel:
enabled: true # 配置 feign接口 也能 被 sentinel 识别
nacos、openFeign等组件支持的开启
//nacos
@EnableDiscoveryClient
//openFeign
@EnableFeignClients
//seata进行事务管理时需要开启事务
@EnableTransactionManagement