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,需要哪个环境就打哪个环境的包
下一节会为大家讲解服务和服务之间的调用,希望能够帮助大家搭建一个简单的微服务系统。