版权声明:-万里晴空-祝你前途晴朗 https://blog.csdn.net/qq_35207917/article/details/87927311
Spring Cloud 环境搭建
Spring Cloud 简单介绍
Spring Cloud是一个微服务框架,相比Dubbo等RPC框架, Spring Cloud提供的全套的分布式系统解决方案。
Spring Cloud对微服务基础框架Netflix的多个开源组件进行了封装,同时又实现了和云端平台以及和Spring Boot开发框架的集成。
Spring Cloud为微服务架构开发涉及的配置管理,服务治理,熔断机制,智能路由,微代理,控制总线,一次性token,全局一致性锁,leader选举,分布式session,集群状态管理等操作提供了一种简单的开发方式。
Spring Cloud 为开发者提供了快速构建分布式系统的工具,开发者可以快速的启动服务或构建应用、同时能够快速和云平台资源进行对接。
常用组件
Eureka 在项目中扮演的三个角色
• 服务注册中心:Eureka 提供的服务端, 提供服务注册与发现的功能, 一般被称作eureka-server。
• 服务提供者:
提供服务的应用, 可以是Spring Boot 应用, 也可以是其他技术平台且遵循Eureka 通信机制的应用。它将自己提供的服务注册到Eureka, 以供其他应用发现
• 服务消费者:
消费者应用从服务注册中心获取服务列表, 从而使消费者可以知道去何处调 用其所需要的服务,这个不是我们这部分的内容,暂不介绍。
Ribbon
负责进行客户端负载均衡的组件;一般与RestTemplate结合,在访问EurekaClient提供的服务时进行负载均衡处理。
也就是说,Ribbon用于服务调用者向被调用者进行服务调用,并且如果服务者有多个节点时,会进行客户端的负载均衡处理;
Feign
与Ribbon功能类型,用于调用方与被调用方的服务调用,同时进行客户端负载均衡的处理;不过它能提供类似本地调用的方式调用远程的EurekaClient提供的服务;它实际上是在Ribbon基础上进行了进一步的封装来提高调用服务的简便性。
项目搭建
1.项目图
项目所需依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.1.RELEASE</version>
<relativePath />
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Camden.SR6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
1.配置spring_eurake 工程
1.1 新建application.properties
server.port=9000
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/
1.2 简历启动类EurekaServerApplication
需要加上 @EnableEurekaServer
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
2.配置提供者
2.1 新建application.properties文件
server.port=9001
#唯一表示改springboot的名字,每个springboot都要不一致
spring.application.name=compute-service
#注册中心的地址
eureka.client.serviceUrl.defaultZone=http://localhost:9000/eureka/
2.2 新建服务提供类
@RestController
@RequestMapping("/user")
public class UserService {
@RequestMapping("/findAll")
public String getAll(){
return "hello My name is ChuangZhang";
}
}
2.3 定义启动类
@RestController
@RequestMapping("/user")
public class UserService {
@RequestMapping("/findAll")
public String getAll(){
return "hello My name is ChuangZhang";
}
}
3. 配置消费者
3.1 编写Application.properties配置文件
server.port=9100
#唯一表示改springboot的名字,每个springboot都要不一致
spring.application.name=compute-consumer
#注册中心的地址
eureka.client.serviceUrl.defaultZone=http://localhost:9000/eureka/
3.2 编写启动类
@SpringBootApplication
@EnableDiscoveryClient //discovery 发现
public class ConsumerApp {
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(ConsumerApp.class, args);
}
}
3.3 编写Controller
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
RestTemplate restTemplate;
@RequestMapping(value = "/findAll")
public String findAll() {
return restTemplate.getForEntity("http://compute-service/user/findAll", String.class).getBody();
}
}
以后会不断完善