版本: jdk:1.8 springcloud alibaba:2.2.1 springboot:2.2.5 springcloud:Hoxton.SR6 个人总结: (1)首先是服务注册中心以及配置中心(Nacos) (2)服务注册 (3)openfeign组件实现服务调用(集成了Ribbon,故负载均衡) (4)gateway网关(实现了统一调用):路由转发,过滤 (5)sentinel流量哨兵(监控整个微服务,从流量控制,熔断降级,系统负载等多个维度保护服务) 1.新建无骨架的maven项目作为父项目 删掉src文件目录并引入依赖:
<!--集成springboot父项目--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.5.RELEASE</version> </parent> <properties> <java.version>1.8</java.version> <spring.cloud.alibaba.version>2.2.1.RELEASE</spring.cloud.alibaba.version> <spring.cloud.version>Hoxton.SR6</spring.cloud.version> </properties> <!--全局引入下载依赖地址,并不会引入依赖--> <dependencyManagement> <dependencies> <!--阿里巴巴下载仓库--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring.cloud.alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!--springcloud下载仓库--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring.cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>然后新建一个Module:commons,以后主要是放置公共实体类以及公共工具类以及公共依赖,所以不需要启动类,以及test 然后根据上面的方式在随意建两个module,这里一个user,一个product 然后公共类引入Nacos注册发现依赖 以及 springboot的web依赖,两个新建的module引入commons
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--nacos client--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>然后以用户服务为例(三部曲:引依赖,写配置文件,写启动类): 依赖就是上面引的commons。
创建resource文件夹以及application.properties文件并写入配置
server.port=6666 spring.application.name=clouduser spring.cloud.nacos.server-addr=localhost:8848 spring.cloud.nacos.discovery.server-addr=${spring.cloud.nacos.server-addr} management.endpoints.web.exposure.include=*写启动类并运行,product服务同上(如果报错,clean/install一下父工程):
成功注册到Nacos服务中心 三:引入openfeign实现服务调用(服务可以互相调用,所以依赖可以加在公共服务里) 以user服务为例
<!--openfeign--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>入口类加入@EnableFeignClients注解 product服务写个接口: user服务添加新建个clients包,用来存放服务调用接口 然后写user服务接口调用product服务的接口: 运行:Error:(3,43) java: 程序包org.springframework.cloud.openfeign不存在(报错的话clean/install一下commons服务) 然后复制一个product服务测试负载均衡(这个方法上篇讲过https://blog.csdn.net/Helloworld_pang/article/details/108281893) 访问: 刷新: 实现负载均衡
接下来先实现流量卫兵的监控 公共依赖引入依赖:
<!--sentinel依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>然后配置user,product服务的配置文件
spring.cloud.sentinel.enabled=true spring.cloud.sentinel.transport.dashboard=localhost:xxxx //这个xxxx是自己的端口号 spring.cloud.sentinel.transport.port=8719先看下sentinel,暂时没有对应的服务 然后运行一下各自的接口,在看sentinel就有了(这里application配置文件没有配置spring.cloud.sentinel.eager=true (这个就是代表立即加在到sentinel就不需要访问一下对应的接口才能检测到)) 哨兵监控完成 然后就是管理配置文件(统一配置管理中心): commons引入依赖
<!--(nacos统一配置中心管理依赖)--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>然后nacos新建一个生产命名空间: 然后去生产环境中配置: 然后修改user服务的properties文件为bootstrap
spring.cloud.nacos.server-addr=localhost:8848 spring.cloud.nacos.discovery.server-addr=${spring.cloud.nacos.server-addr} #这是上面环境下的唯一标识 spring.cloud.nacos.config.namespace=732f14fe-5d92-4d02-a276-340d9398b3d8 #这是分组 spring.cloud.nacos.config.group=CLOUDALI #这三个合起来就是data id spring.application.name=clouduser spring.profiles.active=prod spring.cloud.nacos.config.file-extension=properties运行 成功 接下来是gateway: 新建一个module(cloud-server)并引入依赖(mvc的web依赖跟gateway依赖冲突,所以gateway依赖自己单独引入):
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--gateway依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <!--openfeign--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <!--sentinel依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> <!--(nacos统一配置中心管理依赖)--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>然后新建resoure文件夹,配置文件需要写成yml格式:
server: port: 7666 spring: application: name: gateway cloud: nacos: config: server-addr: localhost:8848 discovery: service-name: ${spring.application.name} gateway: routes: - id: user-route #指定唯一标识 # uri: http://localhost:6666/ #指定路由服务的地址 uri: lb://clouduser #服务名,实现负载均衡 predicates: - Path=/user/** #指定路由规则 - id: product-route #指定唯一标识 # uri: http://localhost:6667/ #指定路由服务的地址 uri: lb://cloudproduct # lb:服务名,实现负载均衡 predicates: - Path=/product/** #指定路由规则 discovery: locator: enabled: true #开启动态服务名动态获取路由地址 management: endpoints: web: exposure: include: "*" #暴露路由的规则端点 /actuator/gateway/routes然后新建启动类: 启动 访问: 处理格式异常:https://blog.csdn.net/Helloworld_pang/article/details/108400636 通过gateway访问商品服务: 刷新: 负载均衡 通过gateway访问user服务,user服务调用的product服务 刷新: 成功 最后,查看路由规则: 这里配置了路由暴露规则端点: 引入依赖: 重启:访问:http://localhost:7666/actuator/gateway/routes 结束