12月7日入职

12.7

入职,了解公司使用的技术框架,了解Spring Cloud Alibaba

12.8

学习Nacos

对Nacos的理解:spring cloud中的一个组件,主要用于配置管理及服务管理

使用:引入依赖后编写配置文件,将要管理的配置上传到nacos

依赖:

        <!-- SpringCloud Ailibaba Nacos-->
     <dependency>
         <groupId>com.alibaba.cloud</groupId>
         <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
     </dependency>

     <!-- SpringCloud Ailibaba Nacos Config-->
     <dependency>
         <groupId>com.alibaba.cloud</groupId>
         <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
     </dependency>

Nacos配置:(bootstrap.yml)

# Tomcat
server:
port: 9006

# Spring
spring:
application:
 # 应用名称
 name: spring-cloud-nsfocus
profiles:
 # 环境配置
 active: dev
main:
 allow-bean-definition-overriding: true
cloud:
 nacos:
   discovery:
     # 服务注册地址
     server-addr: 192.168.20.203:8848
     #dev1
     namespace: 59e55ffc-0656-40d3-a61f-6fed3630d9ec
     # dev2
#        namespace: 519138e4-ce8b-4434-ac56-1273aabc20f3
   config:
     # 配置中心地址
     server-addr: 192.168.20.203:8848
     # 配置文件格式
     file-extension: yaml
     # 共享配置
     file-extension: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

说明:nacos的配置下主要分为discoveryconfig两个部分,discovery配置的地址用于指定将服务注册到哪里,namespace用于和nacos管理面板的命名空间绑定以区分相同服务名的不同应用。config部分配置的地址是指定要读取的配置文件所在的服务器地址,file-extension用于指定配置文件的扩展名,file-extension用于详细指定要读取的配置文件的名称,其中的application是一个关键字,最后解析出来是此应用的名称,则根据拼接规则,此处要读取的配置文件名应为:spring-cloud-nsfocus-dev.yaml

12.9

学习gateway

gateway作为微服务的网关,起到了一个路由功能,同时能对请求做出过滤等操作

使用:引入依赖,编写配置

依赖:

        <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-gateway</artifactId>
     </dependency>

配置文件:

spring:
cloud:
 gateway:
   enabled: true
   discovery:
   locator:
     enabled: true
     lower-case-service-id: true
   routes:
        - id: spring-cloud-fxdemo-product
          uri: lb://spring-cloud-fxdemo-product
          predicates:
            - Path=/product/**
          filters:
            - StripPrefix=1
        - id: spring-cloud-fxdemo-order
          uri: lb://spring-cloud-fxdemo-order
          predicates:
            - Path=/order/**
          filters:
            - StripPrefix=1

配置中的一些解释:

  • id是要路由到的微服务的application.name
  • uri

    • predicates是断言,即判断下方配置的Path(请求路径)是由/order开头的,则满足规则,路由转发请求到名为id(spring-cloud-fxdemo-product)的微服务下,转发时根据过滤器filters配置的规则对转发的路径作处理,StripPrefix=1是截取掉第一级前缀,如 /product/p/getByID 截取后转发的请求为 /p/getByID

遇到的问题

配置完成后,各个微服务模块可以正常访问,但是通过gateway来访问其它模块时404

解决:在nacos配置管理中心,我没有将配置文件上传到默认的public空间,而是上传到了自己定义了一个fxdemo空间,而在本地bootstrap.yaml配置文件中nacous的config属性下没有指定namespace命名空间,此时默认去public空间找配置文件,故没有找到相应的配置文件导致没有路由的配置,故在config下配置namespace(要和配置文件所在的命名相同)即可解决。同理,不修改本地的配置文件的情况下,将nacos配置管理中心的配置文件移动到public空间也可以解决

12.10

学习使用openFeign

openFeign用于微服务之间相互调用,使用简单,只需要引入依赖,并添加一些注解即可

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

使用:

首先在要引入openFeign的微服务的启动类上添加注解@EnableFeignClients

然后创建一个接口,接口使用@FeignClient注解,在这个注解中需要指定要调用的微服务的name,例如要调用的微服务的name为spring-cloud-fxdemo-order则注解应为@FeignClient(value = "spring-cloud-fxdemo-order")或@FeignClient(name = "spring-cloud-fxdemo-order"),可以看出使用value或name来指定都是可以的。此外,@FeignClient注解中还有两个常用属性,contextIdfallbackFactorycontextId用于指定一个id,作一个标识符,contextId在Feign Client的作用是在注册Feign Client Configuration的时候需要一个名称,名称是通过getClientName方法获取的:,但是目标服务是同一个;fallbackFactory指定一个类来处理接口请求数据异常时的处理,这个类继承了接口并实现了其中的方法。

完成接口的注解后,只需要在接口中定义一些方法,并在方法上使用@RequestMapping注解来指定要调用的微服务的接口uri,例如,我要调用spring-cloud-fxdemo-order模块中的/order/getOrder接口,则应在方法上添加注解:

@RequestMapping("/getOrder")

最终这个接口应该为:

@FeignClient(value = "spring-cloud-fxdemo-order")
public interface OrderFeign {
    @RequestMapping("/order/getOrder")
    Order getOrder();//有参数的就写参数
}

至此,配置完成,使用只需要在要用的地方将这个接口自动装配后调用方法即可。

12.10

学习Swagger2

Swagger用于自动生成、描述、调用和可视化RESTful风格的Web服务

引入maven依赖,在接口上添加注解,编写配置类后即可使用

maven依赖

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

配置类:

@Configuration
public class Swagger2Configration {
    @Bean
    public Docket createRestApi(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.demoproduct"))
                .paths(PathSelectors.any())
                .build();
    }
    private ApiInfo apiInfo(){
        return new ApiInfoBuilder()
                .title("接口文档")
                .description("文档描述")
                .termsOfServiceUrl("https://www.bilibili.com/video/av43402234/")
                .version("1.0.0")
                .build();
    }
}

为方便管理配置类中的属性,可以将这些属性放到配置文件中,用nacos来管理。

注解:

  • @Api:修饰整个类,描述 Controller 的作用
  • @ApiOperation:描述一个类的一个方法,或者说一个接口
  • @ApiParam:单个参数描述

12.11

Oauth2权限管理

Ribbon负载均衡策略

RBAC(Role-Based Access Control基于角色的访问控制)

rbac功能模块
rbac功能模块

JWT

12.15

新建rule实体类,编写接口,使用http请求抓取sonarqube的漏洞扫描规则装入服务器数据库

12.16

  • 规则分页查询
  • 添加标签(sonarqube和数据库均改变)
  • 删除规则
  • 查询规则详细信息