吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1104|回复: 2
收起左侧

[学习记录] SpringCloud学习心得---创建consumer、provider、Eureka基础测试环境

[复制链接]
zyt温柔发 发表于 2022-2-17 14:30
1 基本组件
  • 注册中心:Eureka
  • 负载均衡:Ribbon
  • 声明式调用远程方法:Ribbon
  • 熔断、降级、监控:Hystrix
  • 网关:zuul

01.png
2 学习使用版本
<version>Greenwich.SR2</version>
3 目标 1:准备基础测试环
  3.1 结构
02.png
  3.2 创建父工程

parent

parent

配置依赖管理

<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创建通用工程
03common.png
创建实体类com.study.spring.cloud.entity.Employee并生成构造函数和getset方法:

public class Employee {
private Integer empId;
private String empName;
private Double empSalary;


  3.4创建提供者工程
04provider.png
加入如下依赖信息:

<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创建消费者工程
05consume.png

<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 注册中心
06eureka创建.png
加入如下依赖信息:

<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服务,注册的效果:
注册效果.png
5 目标 3:consumer 访问 provider 时使用微,服务名称代替 localhost:1000:
  5.1分析
引入ribbon.png
  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启动各服务测试效果

eureka注册各服务

eureka注册各服务

bb.png
测试访问consumer远程调用provider1000端口:
1000.png
刷新网页2000端口:

2000

2000

刷新网页3000端口:
3000.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

atai 发表于 2022-2-17 21:19
老兄,netflix已经停更了
 楼主| zyt温柔发 发表于 2022-2-17 21:36
atai 发表于 2022-2-17 21:19
老兄,netflix已经停更了

这个是以前我的学习笔记,翻来整理整理,spring cloud版本也不是最新的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 16:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表