当前位置: 首页 > news >正文

springcloud03-Nacos配置中心

通过配置中心,实现mysql、mybatis连接的动态配置

一、搭建一个provider服务

连接mysql、myabtis-plus,提供接口

1、创建项目

2、配置文件和jar包

<dependencies><dependency><groupId>com.hl</groupId><artifactId>common</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.9</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies>
# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
# Nacos认证信息
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=nacos
spring.cloud.nacos.config.contextPath=/nacos
# 设置配置中心服务端地址
spring.cloud.nacos.config.server-addr=localhost:8848# Nacos 配置中心的namespace。需要注意,如果使用 public 的 namcespace ,请不要填写这个值,直接留空即可
# spring.cloud.nacos.config.namespace=
spring.config.import=nacos:provider.yml?refresh=true
# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
# 在nacos注册中心暴漏的服务名
spring.application.name=provider
# Nacos认证信息
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=localhost:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public# 应用服务 WEB 访问端口
server.port=8080
#mysql
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/ry-vueusername: rootpassword: 123456
#mybatis-plus
mybatis-plus:mapper-locations: classpath*:/mapper/*.xmltype-aliases-package: com.hl.entityconfiguration:map-underscore-to-camel-case: true

3、补全包结构和基本文件

@SpringBootApplication
@EnableDiscoveryClient
@MapperScan(basePackages = "com.hl.mapper")
public class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class, args);}}

4、写web层,测试

package com.hl.web;import com.hl.entity.SysPost;
import com.hl.service.SysPostService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
@RequestMapping("/post")
public class PostController {@Autowiredprivate SysPostService sysPostService;@RequestMapping("/list")public List<SysPost> postList(){return sysPostService.list();}
}

5、将数据库连接的配置文件放到nacos配置中心

二、搭建一个consumer消费者服务

1、创建消费者模块

2、补全配置文件

3、声明远程调用的api接口

@FeignClient(value = "provider")
public interface SysPostFeign {@RequestMapping("/post/list")public List<SysPost> postList();
}

4、通过web层远程调用

@RestController
@RequestMapping("/consumer")
public class ConsumerController {//远程调用api接口(openFeign)@Autowiredprivate SysPostFeign sysPostFeign;@RequestMapping("/list")public List<SysPost> postList(){return sysPostFeign.postList();}
}

http://localhost:8082/consumer/list

Gateway网关服务

微服务架构提供一种简单有效的统一的 API 路由管理方式

Spring Cloud Gateway 底层使用了高性能的通信框架Netty

安全,监控/指标,和限流。

统一项目入口,安全,监控/指标,和限流、路由、负载均衡服务器。

Spring Cloud Gateway 网关的作用

Spring Cloud Gateway 是 Spring Cloud 生态系统中的一个 API 网关服务,基于 Spring 5、Spring Boot 2 和 Project Reactor 等技术构建。它的主要作用包括:

核心功能

  1. 路由转发

    • 根据请求路径、主机、头信息等条件将请求转发到不同的微服务

    • 支持动态路由配置

  2. 负载均衡

    • 集成 Ribbon 实现客户端负载均衡

    • 自动将请求分发到多个服务实例

  3. 请求过滤

    • 提供前置(PRE)和后置(POST)过滤器

    • 可自定义全局过滤器和路由过滤器

重要特性

  1. 安全控制

    • 统一认证和授权

    • 支持 JWT、OAuth2 等安全协议

    • 防止 SQL 注入、XSS 等攻击

  2. 流量控制

    • 限流(Rate Limiting)

    • 熔断(集成 Hystrix 或 Resilience4j)

  3. 协议转换

    • 支持 HTTP 与 WebSocket 协议转换

    • 可处理 REST 和 gRPC 请求

  4. 监控与日志

    • 集中收集请求日志

    • 集成监控组件如 Prometheus

  5. 跨域支持

    • 统一处理 CORS 跨域请求

优势

  • 高性能:基于 Netty 的非阻塞异步模型

  • 易扩展:通过过滤器链机制高度可定制

  • 声明式配置:支持 YAML 和 Java DSL 配置方式

  • 服务发现集成:完美兼容 Eureka、nacos等服务注册中心

Spring Cloud Gateway 作为微服务架构的入口,有效解决了微服务架构中的统一访问、安全控制、流量管理等问题,是构建现代云原生应用的重要组件。

1、搭建网关服务

gateway使用了netty框架进行通信,无需引入spring-boot-starter-web。

nacos-discovery
nacos-config
spring-cloud-gateway
loadBalancer

2、利用网关统一项目入口,转发请求到目标服务

spring:cloud:gateway:discovery:locator:enabled: trueroutes:#id : 唯一标识 一般和服务名相同#uri : 路由转发地址#predicates:路由规则匹配,断言匹配- id: provideruri: http://localhost:8080/predicates:- Path=/p/**#http://localhost:10010/p/post/list -> http://localhost:8080/p/post/list

http://localhost:10010/p/post/list

http://localhost:8080/p/post/list

3、了解网关鉴权

路由转发功能
1)静态路由模式
spring:cloud:gateway:discovery:locator:enabled: trueroutes:#id : 唯一标识 一般和服务名相同#uri : 路由转发地址#predicates:路由规则匹配,断言匹配   静态路由- id: provideruri: http://localhost:8080/  predicates:- Path=/p/**#http://localhost:10010/p/post/list -> http://localhost:8080/p/post/list# 静态路由- id: consumer   uri: http://localhost:8082/ predicates:- Path=/c/**filters:- StripPrefix=1  #删除前缀路径  删除一层#http://localhost:10010/c/consumer/list -> http://localhost:8082/c/consumer/list#删除前缀路径  删除一层#http://localhost:8082/consumer/list
2)动态路由模式  
spring:cloud:gateway:discovery:locator:enabled: trueroutes:#id : 唯一标识 一般和服务名相同#uri : 路由转发地址#predicates:路由规则匹配,断言匹配- id: provider
#          uri: http://localhost:8080/  #静态路由uri: lb://provider    #动态路由predicates:- Path=/p/**#http://localhost:10010/p/post/list -> http://localhost:8080/p/post/list- id: consumer
#          uri: http://localhost:8082/  #静态路由uri: lb://consumer    #动态路由predicates:- Path=/c/**filters:- StripPrefix=1  #删除前缀路径  删除一层#http://localhost:10010/c/consumer/list -> http://localhost:8082/c/consumer/list#删除前缀路径  删除一层#http://localhost:8082/consumer/list

测试负载均衡,配置文件无需修改。

设置provider以多实例模式运行。添加日志输出,查看运行效果。

4、添加局部过滤器

spring:cloud:gateway:discovery:locator:enabled: trueroutes:#id : 唯一标识 一般和服务名相同#uri : 路由转发地址#predicates:路由规则匹配,断言匹配- id: provider
#          uri: http://localhost:8080/  #静态路由uri: lb://provider    #动态路由predicates:- Path=/p/**filters:- StripPrefix=1  #删除前缀路径  删除一层- PrefixPath=/p- AddRequestParameter=name,zhangsan#http://localhost:10010/p/post/list -> http://localhost:8080/p/post/list- id: consumer
#          uri: http://localhost:8082/  #静态路由uri: lb://consumer    #动态路由predicates:- Path=/c/**filters:- StripPrefix=1  #删除前缀路径  删除一层#http://localhost:10010/c/consumer/list -> http://localhost:8082/c/consumer/list#删除前缀路径  删除一层#http://localhost:8082/consumer/list

 

5、添加全局过滤器

package com.hl.filter;import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;/*
全局过滤器*/
@Component
public class GlobalGatewayFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {System.out.println("filter.........");//放行,继续到达下一个过滤器return chain.filter(exchange);}//数字越小,执行越往前@Overridepublic int getOrder() {return 0;}
}

 

http://www.dtcms.com/a/305598.html

相关文章:

  • HTML应用指南:利用POST请求获取全国公牛门店位置信息
  • Python 使用 asyncio 包处理并 发(使用asyncio包编写服务器)
  • WebSocket 简介与在 Vue 中的使用指南
  • LaTeX 创建工程并生成完整文档指南
  • tplink er2260t配置带vlan的pppoe拨号
  • 【人工智能99问】混合专家模型(MoE)是如何训练的?(18/99)
  • Tomcat 服务器日志
  • uvm-tlm-sockets
  • 论文Review 3DGSSLAM S3PO-GS | ICCV 2025 港科广出品!| 高效快速的3DGSSLAM!
  • 适配鸿蒙低性能设备的终极优化方案:从启动到渲染全链路实战
  • 企业级web应用服务器TOMCAT
  • Qt 嵌入式系统资源管理
  • 【GEO从入门到精通】生成式引擎与其他 AI 技术的关系
  • Linux线程同步与互斥(上)
  • HTML5 Web 存储
  • 从结构到交互:HTML5进阶开发全解析——语义化标签、Canvas绘图与表单设计实战
  • 【探索进程信号】:信号捕捉
  • iOS 签名证书与上架流程详解,无 Mac 环境下的上架流程
  • 微服务的编程测评系统8-题库管理-竞赛管理
  • 基于Rust与HDFS、YARN、Hue、ZooKeeper、MySQL
  • 【Dolphinscheduler】docker搭建dolphinscheduler集群并与安全的CDH集成
  • C++菱形虚拟继承:解开钻石继承的魔咒
  • 【ee类保研面试】数学类---线性代数
  • 智能车辆热管理测试方案——提升效能与保障安全
  • 设计模式之单例模式及其在多线程下的使用
  • 无人机磁力计模块运行与技术要点!
  • 企业级应用安全传输:Vue3+Nest.js AES加密方案设计与实现
  • 工作笔记-----FreeRTOS中的lwIP网络任务为什么会让出CPU
  • 【网络运维】 Linux:使用 Cockpit 管理服务器
  • Python 程序设计讲义(46):组合数据类型——集合类型:集合间运算