SpringCloud初体验-使用Eureka进行服务注册和发现

一、什么是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、通过上述的简单示例,我们学习了部分微服务的概念,并做了简单实践:
服务发现:其实就是一个“中介”,整个过程中有三个角色:服务提供者(出租房子的)、服务消费者(租客)、服务中介(房屋中介)。
服务提供者: 就是提供一些自己能够执行的一些服务给外界。
服务消费者: 就是需要使用一些服务的“用户”。

posted @ 2020-09-15 16:55  独钓寒江到酒家  阅读(225)  评论(0编辑  收藏  举报