Spring Cloud Alibaba 之 user服务


项目技术选型

  • Spring Boot
  • Spring MVC
  • MyBatis + 通用Mapper (官网信息https://mapperhelper.github.io/docs/)
  • Spring Cloud Alibaba

项目结构

pom 文件

<?xml version="1.0" encoding="UTF-8"?>

    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.9.RELEASE
         
    
    com.laiya
    user-center
    0.0.1-SNAPSHOT
    user-center
    Demo project for Spring Boot

    
        1.8
    

    
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
        
        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        
        
            io.github.openfeign
            feign-httpclient
        
        
        
        
        
        

        





        
        
            mysql
            mysql-connector-java
        
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.1.2
        

        
        
            org.projectlombok
            lombok
            true
        

        
            org.springframework.boot
            spring-boot-starter-thymeleaf
        
        
            org.springframework.boot
            spring-boot-starter-websocket
        
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        
        
            org.springframework
            spring-websocket
            5.2.6.RELEASE
        
        
            org.springframework.cloud
            spring-cloud-starter-zipkin
        

        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            com.alibaba.cloud
            spring-cloud-alibaba-sentinel
        
    
    

        
            
            
                org.springframework.cloud
                spring-cloud-dependencies
                Greenwich.SR3
                pom
                import
            
            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                2.1.0.RELEASE
                pom
                import
            

        
    


    
    
        
        
            dev
            
                true
            
            
                dev
            
        
        
        
            test
            
                false
            
            
                test
            
        
        
        
            pro
            
                false
            
            
                pro
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin

                
                    
                        mysql
                        mysql-connector-java
                        8.0.16
                    
                
            
            
                org.apache.maven.plugins
                maven-compiler-plugin
                
                    8
                    8
                
            

        
        
        ${project.artifactId}-${environment}-${project.version}
        
            
                src/main/resources
                
                true
                
                    
                    application.yml
                    application-${environment}.yml
                    bootstrap.yml
                    mybatis/*/*.xml
                    templates/*.html
                    static/
                
            
        
    



pom 里配置了多环境打包,openfeign,zipkin,actuator,sentinel,websocket,lombok 等组件下面对这些组件

  • openfeign 是用来为微服务架构下服务之间的调用提供了解决方案,可以理解为被封装的请求模式。
  • zipkin 是用来做链路跟踪的工具,是一个开放源代码分布式的跟踪系统,每个服务向zipkin报告计时数据,zipkin会根据调用关系通过Zipkin UI生成依赖关系图(以后的博客里会将)
  • actuator 是用来做应用的健康检查,Spring Boot Actuator可以帮助你监控和管理Spring Boot应用,比如健康检查、审计、统计和HTTP追踪等。所有的这些特性可以通过JMX或者HTTP endpoints来获得。
  • sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。
  • websocket 全双工通讯协议,可简单理解为服务端可以主动向客户端发送请求

实现多环境打包需要配置多个*.yml 配置文件,配置文件

  • application.yml 内容
spring:
  profiles:
    active: "@environment@"

application-dev内容

#======================================#
#========== Server settings ==========#
#======================================#
server:
  port: 8086
  #  servlet:
  #    context-path: /user-center
  tomcat:
    uri-encoding: UTF-8





spring:
  #server name
  application:
    name: user-center
  #======================================#
  #========== Database settings ==========#
  #======================================#
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: 
    password: xxxxx
    url: jxxxxx


    #======================================#
    #========== Nacos ==========#
    #======================================#
  cloud:
    nacos:
      discovery:
        # nacos server address
        server-addr: xxxx

  thymeleaf:
    prefix: classpath:/templates/
    check-template-location: true
    suffix: .html
    encoding: utf-8
    servlet:
      content-type: text/html
    mode: HTML5
    cache: false
  #======================================#
  #========== zipkin ==========#
  #======================================#
  zipkin:
    base-url:xxx
    discovery-client-enabled: false
  sleuth:
    sampler:
      #      抽样率 10%
      probability: 1.0


#======================================#
#========== MyBatis settings ==========#
#======================================#

mybatis:
  mapper-locations: classpath:templates/*/*.xml

  #======================================#
  #========== Redis settings ==========#
  #======================================#
#  redis:
#    enabled: true
#    host: xxx
#    port: 6379
#    ssl: false
#    database: 0
#    password: x'x'x'x
#    jedis:
#      pool:
#        # 最大空闲连接数
#        maxIdle: 3
#        # 最大活动连接数
#        maxActive: 20


feign:
  client:
    config:
      #      想要配置的微服务 名称    全局配置 default
      user-center:
        loggerLevel: full
  #        httpclient  连接池
  httpclient:
    enabled: true
    #    feign 的最大连接数
    max-connections: 200
    #    feign 的单个路径最大连接数
    max-connections-per-route: 50



#======================================#
#========== Config sttings ==========#
#======================================#



#
body:
  controllerMethodList:
    swaggerResources,
    getDocumentation
management:
  endpoints:
    web:
      exposure:
        include: '*'



mysql 配置信息说明

 datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: 
    password: xxxxx
    url: jxxxxx

mysql 版本>= 6.x 需要用 com.mysql.cj.jdbc.Driver
mysql 版本<= 5.x 需要用 com.mysql.jdbc.Driver
** com.mysql.jdbc.Driver 源码 如下**

public class Driver extends com.mysql.cj.jdbc.Driver {
    public Driver() throws SQLException {
        super();
    }

    static {
        System.err.println("Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. "
                + "The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.");
    }
}

通过源码我们可以看到 Driver 继承了 com.mysql.cj.jdbc.Driver,如果不加 cj 项目也可以运行但是会打印出一句警告的话,大概意思是说驱动版本需要升级
所以在出现这句话的时候大家不要谎。

另外需要注意的是在为应用起名字的时候尽量不要用_ 和特殊字符,可以用-,否则在启动的时候会打印出警告

针对微服务,我们在新增微服务组件的时候尽量遵循三个步骤
1 pom 文件引入依赖
2 yml 写配置
3 项目加注解

用户微服务引入Nacos 步骤

  • 引入依赖
   
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
  • yml写配置
    #=========================#
    #========== Nacos =========#
    #=========================#
spring:
  cloud:
    nacos:
      discovery:
        server-addr: (nacos 请求地址,格式为 ip[域名]:port; 例如 xxx.com:8848,注意 地址前面不要加http 后者https) 
        # namespace: (Nacos 命名空间的uuid  不是名称)
        # cluster-name: xxx
  • 项目加注解(没有注解,不需要)
    ** 启动当前项目后,成功后会先发现Nacos 控制台服务管理里会有一个user-center 的服务**

    至此 微服务注册到Nacos 便成功了,我们发现服务注册很简单,只需要简单的两步,加依赖,写配置
    针对不同环境打包的命令为 mvn install -Ppro/-Pdev/-Ptest,需要哪个环境就打哪个环境的包

下一节会为大家讲解服务和服务之间的调用,希望能够帮助大家搭建一个简单的微服务系统。

相关