一、什么是SpringCloud
spring cloud是微服务架构的一站式解决方案,包含了服务发现,服务注册等相关组件;spring cloud基于springboot,提供了一套简便的解决方案。
1.1 Eureka的功能和作用
Spring Cloud Eureka 是对Netflix公司的Eureka的二次封装,它实现了服务治理的功能,Spring Cloud Eureka提供服务端与客户端,服务端即是Eureka服务注册中心,客户端完成微服务向Eureka服务的注册与发现。
二、项目基本架构
(1)项目版本
spring-boot-version:2.3.0.RELEASE
spring-cloud.version:Hoxton.SR4
接下来我们基于Eureka做一个简单的项目,来实现服务拆分和解耦,项目示意图如下:
2.1 代码结构图
根据上述示意图,我们先新建一个空的项目,然后创建三个不同的模块,分别对应Eureka-Server,服务提供者Provider,和服务消费者Consumer,项目如下;
三、代码实现和验证
3.1 编写Eureka-Server的代码和配置
使用spring-initializr创建一个项目,包含eureka-server模块,如下:
然后配置该项目作为服务中心,并启用服务@EnableEurekaServer
,配置文件如下:
server:
port: 8761
eureka:
instance:
hostname: eureka-server
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://localhost:8761/eureka/
启动项目,然后打开浏览器8761端口中,查看我们的服务中心:
服务中心以及可以正常运行了。
3.2 编写Service Provider的代码和配置
我们编写一个服务提供者,这个服务只提供售卖票业务;
使用spring-initializr创建一个项目,包含eureka discover client模块,如下:
编写一个接口,模拟售票服务,代码如下:
@RestController()
@RequestMapping(path = "/ticket")
public class TicketController {
@GetMapping(path = "/sell")
public String sell() {
return "《西游记》";
}
}
将服务注册到服务中心,配置文件如下:
spring:
application:
name: provider-ticket
server:
port: 8090
eureka:
instance:
prefer-ip-address: true
client:
service-url:
defaultZone: http://localhost:8761/eureka/
此时我们的服务以及注册到注册中心。
3.3 编写Service Consumer的代码和配置
(1) 作为服务的消费者,同样使用spring-initializr创建一个项目,包含eureka discover client模块,需要添加的模块和服务提供者相同,如下:
(2) 添加一个配置文件注入RestTemplate,代码如下:
@Configuration
public class RestTemplateConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
(3) 使用RestTemplate消费服务
编写一个简单的controller来模拟服务的调用,代码如下:
@RestController
@RequestMapping(path = "/buy")
public class BuyTicketController {
@Autowired
private RestTemplate restTemplate;
@GetMapping(path = "/ticket")
public String ticket() {
String ticket = restTemplate.getForObject("http://PROVIDER-TICKET/ticket/sell", String.class);
return "买到票了:" + ticket;
}
}
(4) 启用服务发现@EnableDiscoveryClient
,验证是否消费成功
我们访问注册中心,可以看到服务提供者和消费者均按照服务名注册到服务中心了,如下图:
访问消费者的接口,可以看到调用成功:
四、总结
1、Eureka-server可以做服务发现,服务提供者和服务消费者都要注册到该server上;
2、通过上述的简单示例,我们学习了部分微服务的概念,并做了简单实践:
服务发现:其实就是一个“中介”,整个过程中有三个角色:服务提供者(出租房子的)、服务消费者(租客)、服务中介(房屋中介)。
服务提供者: 就是提供一些自己能够执行的一些服务给外界。
服务消费者: 就是需要使用一些服务的“用户”。