后段基础_14 | 青训营笔记

91 阅读1分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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

集群搭建

  1. conf目录下的sql语句创建nacos所需的数据库
  2. 在application.properties文件里将数据库改为mysql并且填写密码
  3. 配置cluster.conf文件,把配置的ip地址写入
  4. startup.sh启动 要开三个nacos
  5. 修改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层中的方法,直接调用
}

GateWay