选择版本
搭建项目需要选择合适的版本,这样才可以减少一些不必要的BUG的出现。
Spring Cloud与Spring Boot版本对应关系
方法一:打开Spring官网 ,选择Spring Cloud往下滑
方法二:更详细的版本对应关系访问 https://start.spring.io/actuator/info ;使用json格式化工具格式化
方法三:也可以访问 https://docs.spring.io/spring-cloud/docs/ ,点击某一个版本reference -> html就可以看到对应的Spring Boot版本
搭建父工程
搭建Maven项目,命名为spring-cloud-2022
删除src文件夹,导入依赖
①统一管理资源版本,使用dependencyManagement标签
<dependencyManagement> <dependencies> </dependencies> </dependencyManagement>
②导入SpringCloud依赖
<!--SpringCloud 依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR12</version> </dependency>
③导入SpringBoot依赖
<!--SpringBoot 依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.3.12.RELEASE</version> </dependency>
④数据库相关依赖
<!--数据库连接池依赖--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.21</version> </dependency> <!--MySQL依赖--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <!--mybatis依赖--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency>
⑤导入其他依赖
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.24</version> <optional>true</optional> </dependency>
搭建Eureka注册中心
在父工程里面创建maven模块,命名为cloud-eureka7001
①导入依赖
<!--eureka server依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <!--spring boot依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
②resources目录下创建application.yml配置文件,设置参数
server: port: 7001 spring: application: name: cloud-eureka eureka: instance: hostname: localhost client: register-with-eureka: false #自己是注册中心,因此不注册自己 fetch-registry: false service-url: #注册与发现地址 defaultZone: http://localhost:7001/eureka/
③创建启动类,添加@EnableEurekaServer注解
@EnableEurekaServer @SpringBootApplication public class Eureka7001 { public static void main(String[] args) { SpringApplication.run(Eureka7001.class, args); } }
④启动Eureka注册中心,访问http://localhost:7001/
搭建服务提供者
在父工程里面新建maven模块,命名为cloud-provider8001
①导入依赖
<!--eureka依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!--springboot依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
②创建application.yml,设置端口号
server: port: 8001 spring: application: name: cloud-provider eureka: client: register-with-eureka: true #注册到注册中心 fetch-registry: true service-url: #注册中心地址 defaultZone: http://localhost:7001/eureka/ instance: prefer-ip-address: true instance-id: provider8001
③创建启动类,添加@EnableEurekaClient注解
@EnableEurekaClient @SpringBootApplication public class Provider8001 { public static void main(String[] args) { SpringApplication.run(Provider8001.class, args); } }
④创建controller
@Slf4j @RestController @RequestMapping("provider") public class ProviderController { @GetMapping("getUUID") public String getUUID() { String uuid = UUID.randomUUID().toString(); log.info(uuid); return uuid; } }
⑤访问http://localhost:8001/provider/getUUID
⑥ 启动Eureka注册中心,访问http://localhost:7001/
搭建消费者
在父工程里面新建maven模块,命名为cloud-consumer80
①导入依赖
<!--eureka client依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!--spring boot依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-actuator</artifactId> </dependency> <!--负载均衡依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency>
②创建application.yml配置文件,设置参数
server: port: 80 spring: application: name: cloud-consumer eureka: client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://localhost:7001/eureka/
③创建启动类,添加@EnableEurekaClient注解
@EnableEurekaClient @SpringBootApplication public class Consumer80 { public static void main(String[] args) { SpringApplication.run(Consumer80.class, args); } }
④创建ApplicationContextConfig类
@Configuration public class ApplicationContextConfig { @Bean @LoadBalanced public RestTemplate getRestTemplate() { //用来远程调用,调用provider提供的服务 return new RestTemplate(); } }
⑤创建controller
@RestController @RequestMapping("consumer") public class ConsumerController { //提供者名称 private static final String URL="http://cloud-provider"; @Autowired private RestTemplate restTemplate; @GetMapping("getUUID") public String getUUID(){ String result=restTemplate.getForObject(URL+"/provider/getUUID",String.class); return result; } }
⑥ 依次启动Eureka注册中心,提供者,消费者,访问http://localhost:7001/
⑦ 访问http://localhost/consumer/getUUID 实现远程调用
搭建Eureka集群
配置hosts映射文件
①以管理员的身份启动记事本
②打开C:\Windows\System32\drivers\etc下的hosts,追加以下内容并保存
##### eureka集群 127.0.0.1 eureka7001 127.0.0.1 eureka7002
修改cloud-eureka7001配置
①修改application.yml配置文件
server: port: 7001 spring: application: name: cloud-eureka eureka: instance: hostname: eureka7001 client: register-with-eureka: false #自己是注册中心,因此不注册自己 fetch-registry: false service-url: defaultZone: http://eureka7002:7002/eureka #集群(相互注册) #更多Eureka注册中心,逗号隔开往后加: # http://eureka7002:7002/eureka,http://eureka7003:7003/eureka ...
新建Eureka注册中心,命名为cloud-eureka7002
①导入依赖
<!--eureka server依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <!--spring boot依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
②创建application.yml配置文件
server: port: 7002 spring: application: name: cloud-eureka eureka: instance: hostname: eureka7002 client: register-with-eureka: false #自己是注册中心,因此不注册自己 fetch-registry: false service-url: defaultZone: http://eureka7001:7001/eureka
③创建启动类,添加@EnableEurekaServer注解
@EnableEurekaServer @SpringBootApplication public class Eureka7002 { public static void main(String[] args) { SpringApplication.run(Eureka7002.class, args); } }
测试
①启动cloud-eureka7001,cloud-eureka7002
集群模式下进行远程调用
⭐我们需要把provider,consumer注册到集群当中,所以需要修改他的注册地址。
修改cloud-provider8001的配置
①修改application.yml配置文件
server: port: 8001 spring: application: name: cloud-provider eureka: instance: prefer-ip-address: true instance-id: ${spring.application.name}:${server.port} client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://eureka7001:7001/eureka,http://eureka7002:7002/eureka #集群模式
修改cloud-consumer80的配置
①修改application.yml配置文件
server: port: 80 spring: application: name: cloud-consumer eureka: client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://eureka7001:7001/eureka,http://eureka7002:7002/eureka #集群模式
测试
①依次启动Eureka集群,cloud-provider8001,cloud-consumer80
②访问http://eureka7001:7001/
④远程调用