开始今天的内容之前,我想问大家一个问题,前面写的一篇文章,简单的搭建了一个微服务的框架,下面有一个粉丝问了一个问题
问题:dubbo服务注册在nacos上时,配置列表会生成大量dubbo接口的配置,这个请问怎么解决?
说实话,我想了半天没想明白怎么回事,因为在我的印象中,单纯的框架是不检查端口安全性的,所以平时在用的时候,我就默认他是安全的,然后剩下的我就交给老大了,老大说啥我就是啥,还真的没看过这个地方(不小心透露了自己的小白特质,管他呢,不耻下问了),希望懂得各位能帮忙回答一下,谢谢各位
项目技术选型
- Spring Boot
- Spring MVC
- MyBatis + 通用Mapper
- Spring Cloud Alibaba
项目结构
pom 文件
<?xml version="1.0" encoding="UTF-8"?>4.0.0org.springframework.boot spring-boot-starter-parent 2.1.9.RELEASEcom.laiya user-center 0.0.1-SNAPSHOTuser-centerDemo project for Spring Boot1.8org.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.2org.projectlombok lombok trueorg.springframework.boot spring-boot-starter-thymeleaf org.springframework.boot spring-boot-starter-websocket org.springframework.boot spring-boot-starter-test testorg.junit.vintage junit-vintage-engine org.springframework spring-websocket 5.2.6.RELEASEorg.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.SR3pomimportcom.alibaba.cloud spring-cloud-alibaba-dependencies 2.1.0.RELEASEpomimportdev true devtest false testpro false proorg.springframework.boot spring-boot-maven-plugin mysql mysql-connector-java 8.0.16org.apache.maven.plugins maven-compiler-plugin 88${project.artifactId}-${environment}-${project.version}src/main/resourcestrueapplication.ymlapplication-${environment}.ymlbootstrap.ymlmybatis/*/*.xmltemplates/*.htmlstatic/
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-8spring: #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: 20feign: 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, getDocumentationmanagement: 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,需要哪个环境就打哪个环境的包