这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天
微服务
- 引入pom文件
- 在yml文件中注册信息
- 有的需要在启动类中加入注解
nacos
1.引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.9.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
2.配置文件书写
server.port=8081
spring.application.name=nacos-provider
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
management.endpoints.web.exposure.include=*
3.在启动类中添加EnableDiscoveryClient注解
@EnableDiscoveryClient
服务配置中心
在bootstrp中填写基本信息,剩余的配置可以直接访问nacos中的配置信息。
nacos中创建的配置信息的名字为:服务名称-服务环境.yaml
bootstrap.yml > application.yml
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #服务注册中心地址
config:
server-addr: localhost:8848 #配置中心地址
file-extension: yaml #指定yaml格式的配置
group: DEV_GROUP
namespace: 912eccb8-4d1d-43a0-80c5-0dc6ca5805f6
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# nacos-config-client-dev.yaml
# nacos-config-client-test.yaml ----> config.info
@RefreshScope在controller类中增加注解,支持nacos自动给更新配置
@RefreshScope //支持nacos动态刷新
读取不同DataId的值,在application.yaml文件中更改action的值(detest)
spring:
profiles:
active: dev/test/info
读取不同Group的值,在BootStrap文件中加一个group
config:
server-addr: localhost:8848 #配置中心地址
file-extension: yaml #指定yaml格式的配置
group: TEST_GROUP #读取不同的分组
读取不同命名空间NameSpace的值,在BootStrap文件中加一个namespace
config:
server-addr: localhost:8848 #配置中心地址
file-extension: yaml #指定yaml格式的配置
group: TEST_GROUP #读取不同的分组
namespace: 7358a3ae-48e8-464c-9762-8452a5e83793
集群搭建
- conf目录下的sql语句创建nacos所需的数据库
- 在application.properties文件里将数据库改为mysql并且填写密码
- 配置cluster.conf文件,把配置的ip地址写入
- startup.sh启动 要开三个nacos
- 修改nginx conf目录
Sentinel
使用Sentinel
通过jar包打开后台
java -jar sentinel
整合nacos和Sentinel
引入两个包
<!--sentinel-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
<version>1.7.2</version>
</dependency>
在application.yml文件中
spring:
application:
name: cloudalibaba-sentinel-service
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
sentinel:
transport:
dashboard: localhost:8848
port: 8719
熔断、降级、热点事件
- 熔断是对内部的错误做出反应,防止系统崩溃
- 降级是对外部的错误做出反应,防止访问量过大
- 热点事件是对规定的事件做出特定的响应
@SentinelResource注解
加在方法上
- blockHandlerClass:兜底方法的类
- blockHandler:兜底方法(自定义全局异常报错)
- fallBackClass:java运行异常时兜底方法的类
- fallBack:java运行异常时兜底方法
@SentinelResource(value = "customerBlockHandler",
blockHandlerClass = CustomerBlockHandler.class,
blockHandler = "handlerException2")
openFeign与Sentinel
在接口中加上注解,引入想要调用的方法,通过一个类实现接口并重写(该重写的是fallback的方法)
在controller类中引入接口调用方法,正确则显示接口调用的方法。失败则显示fallback方法
持久化
引入依赖
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
<version>1.7.2</version>
</dependency>
在sentinel的yml文件中
datasource:
ds1:
nacos:
server-addr: localhost:8848
dataId: ${spring.application.name}
groupId: DEFAULT_GROUP
data-type: json
rule-type: flow
在nacos中 配置一个与dataId同名的配置文件 ,内容为
Seata
概念
配置文件
更改file.conf文件
- 添加service
## service
service {
vgroup_mapping.my_test_tx_group = "fsp_tx_group"
default.grouplist = "127.0.0.1.8091"
enableDegrade = false
disable = false
max.commit.retry.timeout = "-1"
max.rollback.retry.timeout = "-1"
}
- 修改store存储模式为db 并 修改对应的db属性
运行sql语句添加语句
更改registry.conf
@GlobalTransactional
@GlobalTransactional(name = "fsp-create-order",rollbackFor = Exception.class)
OpenFeign
调用其他接口的方法
- 引入pom文件
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>3.1.5</version>
</dependency>
- 在yaml文件中添加配置
- 在主启动类中加入@EnableFeignClient
@EnableFeignClient
@EnableDiscoveryClient
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
System.out.println("启动成功");
}
}
- 定义一个service接口中加入一个@FeignClient value的值是被调用者的servername
@FeignClient(value=)
public interface FeognTest{
// 在Controller层中的方法,直接调用
}