springcloud组件
一、Eureka 服务注册与发现
搭建流程:
1. 注册中心:
- 引入eureka服务端依赖
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> <version>3.1.0</version> </dependency>
- 添加application.yml文件
server: port: 10086 spring: application: name: eurekaServer #defaultZone属性对应服务注册中心的配置内容,指定服务注册中心的位置 eureka: client: service-url: defaultZone: http://127.0.0.1:10086/eureka/
- 编写启动类,添加 @EnableEurekaServer 注解,启动eurekaServer项目
- 访问 http://127.0.0.1:10086/,显示如下图成功
2. 服务注册:
- 引入eureka-client依赖
<!--<!– 兼容eureka-client–>--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>3.1.0</version> </dependency>
- 添加application.yml文件
server: port: 8081 spring: application: name: eurekaClientA eureka: client: service-url: defaultZone: http://127.0.0.1:10086/eureka/
- 启动eurekaServer项目和eurekaClientA项目
- 访问 http://127.0.0.1:10086/,显示如下图成功
3. 服务发现:
- 注册eurekaClientC项目,application.yml文件
server: port: 8082 spring: application: name: eurekaClientC eureka: client: service-url: defaultZone: http://127.0.0.1:10086/eureka/
- 项目EurekaClientA的启动类,创建RestTemplate
@SpringBootApplication public class EurekaClientAApplication { public static void main(String[] args) { SpringApplication.run(EurekaClientAApplication.class, args); } // 创建RestTemplate并注入spring容器,@LoadBalanced负载均衡 @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); } }
- 项目EurekaClientA创建controller
@RestController public class Demo { @Resource RestTemplate restTemplate; @GetMapping("/test") public void test(){ System.out.println("eurekaClientA"); String url = "http://eurekaClientC/test"; final String forObject = restTemplate.getForObject(url, String.class); System.out.println(forObject); } }
- 启动eurekaServer项目、eurekaClientA项目和eurekaClientC项目
- 访问 http://localhost:8081/test 可以成功访问到EurekaClientC项目
二、Ribbon 负载均衡
三、Feign 远程调用 (集成了负载均衡)
- 创建被调用的项目EurekaClientC
- 依赖
<!--<!– 兼容eureka-client–>--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>3.1.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>3.1.0</version> </dependency>
- 添加application.yml文件
server: port: 8092 spring: application: name: eurekaClientC eureka: client: service-url: defaultZone: http://127.0.0.1:10086/eureka/
- 创建FeignClient
@FeignClient("eurekaClientC") public interface DemoApi { @GetMapping("/test") String test(); }
- 创建controller
@RestController public class Demo { @GetMapping("/test") public String test(){ System.out.println("eurekaClientC"); return "eurekaClientC"; } }
- 启动类添加 @EnableFeignClients 注解 使FeignClient注解的类生效并注入spring
- 利用maven -> deploy 部署项目到仓库。
如果没有远程仓库会报错如图1,可以忽略,利用本地仓库。注意:需要在pom中注释掉maven的打包插件,详细看maven_deploy
图1
- 依赖
- 创建调用的项目EurekaClientE
- 依赖
<!--<!– 兼容eureka-client–>--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>3.1.0</version> </dependency> <!-- 从项目EurekaClientC的pom中来--> <dependency> <groupId>com.example</groupId> <artifactId>EurekaClientC</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
- 添加application.yml文件
server: port: 8084 spring: application: name: eurekaClientE eureka: client: service-url: defaultZone: http://127.0.0.1:10086/eureka/
- 创建controller
@RestController public class Demo { @Resource DemoApi demoApi; @GetMapping("/test") public void demo(){ System.out.println("eurekaClientE"); String demo = demoApi.test(); System.out.println(demo); } }
- 启动类添加 @EnableFeignClients(basePackages = {"com.example.eurekaclientc") 注解 扫描被调用项目的FeignClient
- 依赖
- 启动注册中心,EurekaClientC项目和EurekaClientE项目,访问EurekaClientE项目的controller,远程调用EurekaClientC项目
四、Gateway网关
作用:
- 对用户请求做身份认证、权限校验
- 将用户请求路由到微服务,并实现负载均衡
- 对用户请求做限流
搭建:
- 创建项目Gateway
- 引入网关依赖和服务注册依赖
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>3.1.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-gateway --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> <version>3.1.0</version> </dependency>
- 添加application.yml文件
server: port: 8085 spring: application: name: gateway cloud: gateway: routes: #网关路由配置,数组 - id: eurekaClientE #路由ID,唯一标识 uri: lb://eurekaClientE #路由目标地址,lb负载均衡,eurekaClientE服务名称 predicates: #路由断言,有11中,可以按照时间、IP地址.... ,匹配到服务/404失败 # - Before=2023-01-20T17:42:47.789-07:00[America/Denver] #根据时间断言,before某个时间之前 - Path=/test/ #根据路径断言,路径解析为 eurekaClientE/test/ - id: eurekaClientC uri: lb://eurekaClientC predicates:
- Path=/tests/
# - After=2023-01-20T17:42:47.789-07:00[America/Denver]eureka: client: service-url: defaultZone: http://127.0.0.1:10086/eureka/
- 启动注册中心、Gateway项目和EurekaClientE项目
- 访问 localhost:8085/test 转发EurekaClientE服务成功
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!