SpringCloud初体验--Hello Eureka

时间:2022-07-28
本文章向大家介绍SpringCloud初体验--Hello Eureka,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Spring Cloud Eureka是Spring Cloud Netflix中的一部分,基于Netflix Eureka做了二次封装,主要负责微服务架构中的服务治理。

服务治理主要是用来实现各个微服务实例的自动化注册与发现。

主要功能:

服务注册

每个服务单元向服务中心等级自己提供的服务,将主机号、端口号、版本号、通信协议等一些附加信息告知注册中心,注册中心按服务名分类组织服务清单。

服务注册中心还需要以心跳的方式去监测清单中的服务是否可用,若不可用需要从服务清单中剔除,达到排除故障服务的效果。

服务发现

服务向服务注册中心发起调用,便从服务清单中以某种轮询策略取出一个位置来进行服务调用。

Netflix Eureka包含了服务端和客户端组件,均由java实现,主要适用于Java实现的分布式系统,或是JVM兼容语言构建的系统。Eureka服务端的服务治理机制提供了完备的Restful Api,所以也支持非JVM语言构建的微服务,只是其他语言需要自己实现Eureka服务端程序。

Eureka服务端:服务注册中心。

Eureka客户端:主要处理服务注册与发现。


接下来是服务端的代码部分。

基于SpringBoot项目的基础上,pom文件增加:

<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
      <version>2.2.2.RELEASE</version>
</dependency>

下面是启动类,可以看出启动类和普通的springboot启动类差别不大,只是增加了@EnableEurekaServer

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
  public static void main(String[] args) {
    SpringApplication.run(EurekaServerApplication.class, args);
  }
}

下面是服务端的application.properties

server.port=1111
spring.application.name = eureka-server
eureka.instance.hostname=localhost
# 因为是服务注册中心,所以不向服务注册中心注册自己
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

配置完可以直接登录localhost:1111

可以看到暂时还没有注册任何服务。没有关系,接下来我们搭建客户端。


以下是Eureka客户端代码,因为为我们要测试,需要restful api,所以除了Eureka的客户端以外,还要引入SpringMVC

基于SpringBoot项目的基础上,pom文件增加:

<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
      <version>2.2.2.RELEASE</version>
</dependency>
<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
</dependency>

下面是启动类,可以看出启动类和普通的springboot启动类差别不大,只是增加了@EnableDiscoveryClient

@EnableDiscoveryClient
@SpringBootApplication
public class EurekaClientApplication {
  public static void main(String[] args) {
    SpringApplication.run(EurekaClientApplication.class, args);
  }
}

下面是客户端的application.properties

server.port=8080
spring.application.name = eureka-client
#eureka.instance.hostname=eureka-client
#下面是之前注册的Eureka服务端地址
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

然后我们再新增一个HelloController,用于测试。

@RestController
public class HelloController {
  private final Logger logger = Logger.getLogger("HelloController");
  
  @Autowired
  private DiscoveryClient client;
  @Autowired
  private Registration registration;
  
  @RequestMapping("/hello")
  public String index() {
    ServiceInstance instance = client.getInstances(registration.getServiceId()).get(0);
    logger.info("/hello,host: " + instance.getHost() + " , service_id: " + instance.getServiceId());
    return "Hello World!";
  }
}

我们可以刷新一下http://localhost:1111/

这时候我们的服务就已经注册上去了,尝试访问一下HelloController,打印出如下日志。

2020-04-12 14:23:59.209  INFO 20100 --- [nio-8080-exec-7] HelloController: /hello,host: eureka-client , service_id: EUREKA-CLIENT