目录
1.Eureka简介
2.Eureka⼊⻔案例(IDEA ,jdk11)
2.1 EurekaServer (服务注册中心)
2.1.1 pom文件内容
2.1.2 启动器(加入注解@EnableEurekaServer )
2.1.3 配置文件
2.1.4 启动并测试
2.2 cloud_payment(支付工程:服务提供者)
2.2.1 pom文件内容
2.2.2 启动器(加入注解@EnableDiscoveryClient )
2.2.3 配置文件
2.2.4 启动并测试
2.2.5 配置支付项目
2.3 cloud_order (订单⼯程 :服务消费者)
2.3.1 pom文件内容
2.3.2 配置文件
2.3.3 启动器(加入注解@EnableDiscoveryClient )
RestTemplate
2.3.4 启动并测试
2.3.5 配置订单工程
3. 测试
3.1 测试工具 Postman
3.2 测试
访问 http://localhost:9000/payment/123 证明支付工程配置正确
访问 http://localhost:9001/order/payment/123 结果如下图,证明订单工程成功调用了支付工程配置正确
4. Eureka Server集群(扩展)
1.Eureka简介 Eureka是⼀个⽤于服务注册和发现的组件,Eureka分为Eureka Server和Eureka Client,Eureka Server为Eureka服务注册中⼼,Eureka Client为Eureka客户端。 在分布式架构中,服务会注册到Eureka注册中⼼,当服务需要调⽤其它服务时,就从Eureka 找到服务的地址,进⾏调⽤。Eureka在Spring Cloud中的作⽤是⽤来作为服务治理实现服务注册和发 现。 Eureka主要涉及到三⼤⻆⾊:服务提供者、服务消费者、注册中⼼。 服务注册是指,各个微服务在启动时,将⾃⼰的⽹络地址等信息注册到Eureka,服务提供者将⾃⼰的服务信息,如服务名、IP等告知服务注册中⼼。 服务发现是指当⼀个服务消费者需要调⽤另外⼀个服务时,服务消费者从Eureka查询服务提供者的地址,并通过该地址调⽤服务提供者的接⼝。⼀个服务既可以是服务消费者,也可以是服务发现者。
各个微服务与注册中⼼使⽤⼀定机制(例如⼼跳)通信。如果Eureka与某微服务⻓时间⽆法通信,Eureka会将该服务实例从服务注册中⼼中剔除,如果剔除掉这个服务实例过了⼀段时间,此服务恢复⼼ 跳,那么服务注册中⼼将该实例重新纳⼊到服务列表中,Eureka架构图,如图下图所示。2.Eureka⼊⻔案例(IDEA ,jdk11)
本节介绍Eureka的基本使⽤,创建Eureka Server,让后将上⾯⽀付微服务,和订单微服务注册到
Eureka Server中。Eureka基本机构主要包括以下3个⻆⾊。
●
Eureka Server:服务注册中⼼,提供服务注册和发现功能。
●
Provider Service:服务提供者,案例中就是⽀付微服务。
●
Consumer Service:服务消费者,案例中就是订单微服务。
2.1 EurekaServer (服务注册中心)
首先准备一个空项目 File -> New -> Project..
选择自己的JDK版本
创建 EurekaServer
File -> new -> Module
next->选择依赖 选择下⾯依赖,如下图所示。 (注意Spring Boot版本) ● Spring Boot 2.4.12 ● Spring Boot DevTools ● Lombok ● Eureka Server
2.1.1 pom文件内容
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.4.12
com.csh
Eureka-Bill
0.0.1-SNAPSHOT
Eureka-Bill
Demo project for Spring Boot
11
2020.0.4
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.springframework.boot
spring-boot-devtools
runtime
true
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
org.projectlombok
lombok
2.1.2 启动器(加入注解@EnableEurekaServer )
注:@EnableEurekaServer,声明当前应⽤为Eureka Server
@SpringBootApplication
@EnableEurekaServer
public class
EurekaApplication
{
public static
void
main(
String
[] args) {
SpringApplication.run(EurekaApplication.
class
, args);
}
}
2.1.3 配置文件
4.0.0 org.springframework.boot spring-boot-starter-parent2.4.12 com.csh Eureka-Bill0.0.1-SNAPSHOT Eureka-Bill Demo project for Spring Boot 11 2020.0.4 org.springframework.cloud spring-cloud-starter-netflix-eureka-serverorg.springframework.boot spring-boot-devtoolsruntime true org.projectlombok lomboktrue org.springframework.boot spring-boot-starter-testtest org.springframework.cloud spring-cloud-dependencies${spring-cloud.version} pom import org.springframework.boot spring-boot-maven-pluginorg.projectlombok lombok
@SpringBootApplication @EnableEurekaServer public class EurekaApplication { public static void main( String [] args) { SpringApplication.run(EurekaApplication. class , args); } }
2.1.3 配置文件
server:
port: 9004
spring:
application:
name: eureka-server
eureka:
client:
service-url:
# eureka 服务地址,如果是集群的话;需要指定其它集群eureka地址
defaultZone: http://127.0.0.1:9004/eureka/
# 不注册⾃⼰
register-with-eureka: false
# 不拉取服务
fetch-registry: false
2.1.4 启动并测试
启动应⽤访问http://localhost:9004/,效果如下图所示。
2.2 cloud_payment(支付工程:服务提供者)
选择下⾯依赖,如下图所示。 (注意Spring Boot版本)
● Spring Boot 2.4.12
● Spring Boot DevTools
● Lombok
2.2.1 pom文件内容
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.4.12
com.example
cloud_payment
0.0.1-SNAPSHOT
cloud_payment
Demo project for Spring Boot
2020.0.3
11
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-devtools
runtime
true
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
org.projectlombok
lombok
2.2.2 启动器(加入注解@EnableDiscoveryClient )
@SpringBootApplication
@EnableDiscoveryClient
public class BillApplication {
public static void main(String[] args) {
SpringApplication.run(BillApplication.class, args);
}
}
2.2.3 配置文件
4.0.0 org.springframework.boot spring-boot-starter-parent2.4.12 com.example cloud_payment0.0.1-SNAPSHOT cloud_payment Demo project for Spring Boot 2020.0.3 11 org.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-devtoolsruntime true org.projectlombok lomboktrue org.springframework.boot spring-boot-starter-testtest org.springframework.cloud spring-cloud-starter-netflix-eureka-clientorg.springframework.cloud spring-cloud-dependencies${spring-cloud.version} pom import org.springframework.boot spring-boot-maven-pluginorg.projectlombok lombok
@SpringBootApplication
@EnableDiscoveryClient
public class BillApplication {
public static void main(String[] args) {
SpringApplication.run(BillApplication.class, args);
}
}
2.2.3 配置文件
server:
port: 9000
spring:
application:
name: cloud-payment
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:9004/eureka/
register-with-eureka: true
fetch-registry: true
2.2.4 启动并测试
首先启动服务注册中心,然后再启动支付工程访问http://localhost:9004/,效果如下图所示。有红色底线标识证明我们配置成功
2.2.5 配置支付项目
controller
@RestController
@RequestMapping("/payment")
public class PaymentController {
@GetMapping("/{id}")
public ResponseEntity payment(@PathVariable("id") Integer id) {
Payment payment = new Payment(id, "⽀付成功");
return ResponseEntity.ok(payment);
}
}
entity
@Data//@Data 生成getter,setter ,toString等函数
@NoArgsConstructor//@NoArgsConstructor 生成无参构造函数
@AllArgsConstructor//@AllArgsConstructor 生成全参数构造函数
public class Payment {
private Integer id;
private String message;
}
2.3 cloud_order (订单⼯程 :服务消费者)
根据2.1 与 2.2 order 工程如下
2.3.1 pom文件内容
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.4.12
com.example
cloud_order
0.0.1-SNAPSHOT
cloud_payment
Demo project for Spring Boot
2020.0.3
11
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-devtools
runtime
true
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
org.projectlombok
lombok
2.3.2 配置文件
4.0.0 org.springframework.boot spring-boot-starter-parent2.4.12 com.example cloud_order0.0.1-SNAPSHOT cloud_payment Demo project for Spring Boot 2020.0.3 11 org.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-devtoolsruntime true org.projectlombok lomboktrue org.springframework.boot spring-boot-starter-testtest org.springframework.cloud spring-cloud-starter-netflix-eureka-clientorg.springframework.cloud spring-cloud-dependencies${spring-cloud.version} pom import org.springframework.boot spring-boot-maven-pluginorg.projectlombok lombok
server:
port: 9001
spring:
application:
name: cloud-order
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:9004/eureka/
register-with-eureka: true
fetch-registry: true
2.3.3 启动器(加入注解@EnableDiscoveryClient )
RestTemplate
Spring提供了⼀个RestTemplate模板⼯具类,对基于Http的客户端进⾏了封装,并且实现了对象与json 的序列化和反序列化,⾮常⽅便。RestTemplate并没有限定Http的客户端类型,⽽是进⾏了抽象,⽬前
常⽤的3种都有⽀持:
HttpClient OkHttp JDK原⽣的URLConnection(默认的)
@SpringBootApplication
@EnableDiscoveryClient
public class CloudOrderApplication {
public static void main(String[] args) {
SpringApplication.run(CloudOrderApplication.class, args);
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
2.3.4 启动并测试
访问http://localhost:9004/,效果如下图所示。有红色底线标识证明我们配置成功
2.3.5 配置订单工程
controller
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/payment/{id}")
public ResponseEntity getPaymentById(@PathVariable("id") Integer id) {
String url = "http://localhost:9000/payment/" + id;
Payment payment = restTemplate.getForObject(url, Payment.class);
return ResponseEntity.ok(payment);
}
}
entity
@Data//@Data 生成getter,setter ,toString等函数
@NoArgsConstructor//@NoArgsConstructor 生成无参构造函数
@AllArgsConstructor//@AllArgsConstructor 生成全参数构造函数
public class Payment {
private Integer id;
private String message;
}
3. 测试
3.1 测试工具 Postman
下载以及使用说明(点击访问)
3.2 测试
访问 http://localhost:9000/payment/123 证明支付工程配置正确
访问 http://localhost:9001/order/payment/123 结果如下图,证明订单工程成功调用了支付工程配置正确
4. Eureka Server集群(扩展)
Eureka Server集群讲解(点击访问)



