SpringCloud学习心得---创建consumer、provider、Eureka基础测试环境
1 基本组件[*]注册中心:Eureka
[*]负载均衡:Ribbon
[*]声明式调用远程方法:Ribbon
[*]熔断、降级、监控:Hystrix
[*]网关:zuul
2 学习使用版本
<version>Greenwich.SR2</version>
3 目标 1:准备基础测试环
3.1 结构
3.2 创建父工程
配置依赖管理
<dependencyManagement>
<dependencies>
<!-- 导入 SpringCloud 需要使用的依赖信息 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR2</version>
<type>pom</type>
<!-- import 依赖范围表示将 spring-cloud-dependencies 包中的依赖信息导入 -->
<scope>import</scope>
</dependency>
<!-- 导入 SpringBoot 需要使用的依赖信息 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
3.3创建通用工程
创建实体类com.study.spring.cloud.entity.Employee并生成构造函数和getset方法:
public class Employee {
private Integer empId;
private String empName;
private Double empSalary;
3.4创建提供者工程
加入如下依赖信息:
<dependencies>
<!--引入spring boot依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入commom依赖-->
<dependency>
<groupId>com.study.spring.cloud</groupId>
<artifactId>spring-cloud-study-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
创建主启动类:
@SpringBootApplication
public class AtzytMainType {
public static void main(String[] args) {
SpringApplication.run(AtzytMainType.class, args);
}
}
创建 application.yml 配置文件:server.port: 1000
创建 handler 类和方法com.study.spring.cloud.hander.EmployeeHander:
@RestController
public class EmployeeHander {
@RequestMapping("/provider/get/employee/remote")
public Employee getEmployeeRemote() {
return new Employee(555, "tom555"+port, 555.55);
}
}
3.5创建消费者工程
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入commom依赖-->
<dependency>
<groupId>com.study.spring.cloud</groupId>
<artifactId>spring-cloud-study-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
创建主启动类:
@SpringBootApplication
public class AtzytMainType {
public static void main(String[] args) {
SpringApplication.run(AtzytMainType.class, args);
}
}
创建配置类com.study.spring.cloud.config.AtzytSpringCloudConfig提供RestTemplate
创建hander类com.study.spring.cloud.hander.HumanResourceHandler:
@RestController
public class HumanResourceHandler {
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/consumer/ribbon/get/employee")
public Employee getEmployeeRemote() {
// 远程调用方法的主机地址
String host = "http://localhost:1000";
// 远程调用方法的具体 URL 地址
String url = "/provider/get/employee/remote";
return restTemplate.getForObject(host + url, Employee.class);
}
}
创建 application.yml 配置文件:server.port:4000
4 目标 2:创建 Eureka 注册中心
4.1子目标 1:创建 Eureka 注册中心
加入如下依赖信息:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
创建主启动类:
//启用eureka服务器端功能
@EnableEurekaServer
@SpringBootApplication
public class AtzytMainType {
public static void main(String[] args) {
SpringApplication.run(AtzytMainType.class, args);
}
}
创建 application.yml:
server:
port: 5000
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false # 自己就是注册中心,所以自己不注册自己
fetch-registry: false # 自己就是注册中心,所以不需要“从注册中心取回信息”
service-url: # 客户端访问 Eureka 时使用的地址
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
4.2子目标 2:将 provider 注册到eureka
provider加入如下依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
provider配置 application.yml:
eureka:
client:
service-url:
defaultZone: http://localhost:5000/eureka/
spring:
application:
name: study-provider
启动eureka和provider服务,注册的效果:
5 目标 3:consumer 访问 provider 时使用微,服务名称代替 localhost:1000:
5.1分析
5.2操作
在 consumer 工程加入如下:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
在 application.yml 中加入如下配置:
spring:
application:
name: study-consumer
eureka:
client:
service-url:
defaultZone: http://localhost:5000/eureka
在 RestTemplate 的配置方法处使用@LoadBalanced 注解
@Bean
//这个注解让RestTemplate有负载均衡的功能,通过调用Ribbon访问provider集群
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
修改 consumer 工程的 handler 方法:
@RestController
public class HumanResourceHandler {
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/consumer/ribbon/get/employee")
public Employee getEmployeeRemote() {
// 远程调用方法的主机地址
// String host = "http://localhost:1000";
// 引入 Eureka 和 Ribbon 后,就可以使用微服务名称替代 IP 地址+端口号
String host = "http://study-provider";
// 远程调用方法的具体 URL 地址
String url = "/provider/get/employee/remote";
return restTemplate.getForObject(host + url, Employee.class);
}
}
6 目标 4:provider 以集群方式启
6.1修改 provider的hander方法
@RestController
public class EmployeeHander {
@RequestMapping("/provider/get/employee/remote")
public Employee getEmployeeRemote(HttpServletRequest request) {
int port = request.getServerPort();
return new Employee(555, "tom555"+port, 555.55);
}
}
6.2provider 以集群方式启动
按照端口号 1000 启动第一个实例
按照端口号 2000 启动第二个实例
按照端口号 3000 启动第三个实例
6.3启动各服务测试效果
测试访问consumer远程调用provider1000端口:
刷新网页2000端口:
刷新网页3000端口:
老兄,netflix已经停更了 atai 发表于 2022-2-17 21:19
老兄,netflix已经停更了
这个是以前我的学习笔记,翻来整理整理,spring cloud版本也不是最新的
页:
[1]