Eureka 服务的注册、发现、调用

Eureka 服务的注册、发现、调用

薛定谔的汪

前天学习了 Eureka 的基本使用并搭建了 Eureka 单节点和集群,今天来学习 Eureka 是如何注册、发现、调用服务的。

注册中心继续用上次配置好的 eureka-server,eureka-provider 和eureka-consumer 需要配置下:

服务提供者

创建eureka-provider 的 SpringBoot 项目

引入依赖

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

启动类

添加注解@EnableEurekaClient或@EnableDiscoveryClient 使其拥有服务注册和发现的能力

1
2
3
4
5
6
7
8
@SpringBootApplication
@EnableEurekaClient
public class EurekaProviderApplication {

public static void main(String[] args) {
SpringApplication.run(EurekaProviderApplication.class, args);
}
}

注:@EnableEurekaClient和@EnableDiscoveryClient的区别在于:

spring cloud中discovery service有许多种实现(eureka、consul、zookeeper等等),@EnableDiscoveryClient基于spring-cloud-commons, @EnableEurekaClient基于spring-cloud-netflix。

其实用更简单的话来说,就是如果选用的注册中心是eureka,那么就推荐@EnableEurekaClient,如果是其他的注册中心,那么推荐使用@EnableDiscoveryClient。

配置文件

1
2
3
4
5
6
7
8
9
10
11
server:
port: 9000
eureka:
client:
service-url:
#注册中心的地址
defaultZone: http://localhost:8000/eureka/
spring:
application:
#根据应用名称来注册发现
name: provider

REST API

前面学过,Eureka 是基于 REST 的,服务之间的调用是 http 协议,服务提供者对外提供服务只需要提供一个 controller 的调用即可:

1
2
3
4
5
6
7
8
@RestController
public class ProviderController {

@GetMapping("hello")
public String hello(){
return "Hello, Eureka!";
}
}

先后启动 eureka-server 和 eureka-provider,访问注册中心管理页面 http://localhost:8000

发现服务 provider 服务已注册,访问http://localhost:9000/hello 发现页面返回”hello! Yakai!” 说明服务正常。

服务消费者

创建eureka-consumer 的 SpringBoot 项目

引入依赖

同服务提供者一样

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

启动类

1
2
3
4
5
6
7
8
9
@SpringBootApplication
@EnableFeignClients
@EnableEurekaClient
public class EurekaCustomerApplication {

public static void main(String[] args) {
SpringApplication.run(EurekaCustomerApplication.class, args);
}
}

注:

@EnableEurekaClient 使其拥有服务注册和发现的能力。

@EnableFeignClients 使用 Feign 来远程调用服务。

配置文件

1
2
3
4
5
6
7
8
9
10
server:
port: 10000
eureka:
client:
service-url:
#注册中心地址
defaultZone: http://localhost:8000/eureka/
spring:
application:
name: customer

调用服务

service
1
2
3
4
5
6
@FeignClient(name = "provider")//调用的服务名称 对应 spring.application.name
public interface ProviderService {

@GetMapping("hello")//调用的 api
String hello();
}
controller
1
2
3
4
5
6
7
8
9
10
11
@RestController
public class ConsumerController {

@Autowired
private ProviderService providerService;

@RequestMapping("hello")
public String hello(){
return providerService.hello();
}
}

测试

启动 eureka-consumer项目,访问http://localhost:10000/hello 发现页面返回 “hello! Yakai!”,说明consumer 正确发现并调用了 provider的服务。

  • Title: Eureka 服务的注册、发现、调用
  • Author: 薛定谔的汪
  • Created at : 2018-05-27 18:20:16
  • Updated at : 2023-11-17 19:37:36
  • Link: https://www.zhengyk.cn/2018/05/27/springcloud/register-discovery/
  • License: This work is licensed under CC BY-NC-SA 4.0.
On this page
Eureka 服务的注册、发现、调用