#Eureka 学习之 Eureka Client(二)
上一章节学了怎么样快速注册一个 Eureka Server
注册中心,这章主要学习讲怎么把Eureka Client
注册到 Eureka Server
注册中心去。Eureka
和 Dubbo
不同, Eureka Client
同时可以是 Provider
和 Consumer
。即是服务提供者,又是服务消费者。每个Client
都可以消费其它的已注册的Client
。同时注册自己后也可以被其它Client
消费。
1. Eureka Client Provider
还是通过 idea 自带的 spring Initializr 插件快速创建项目
###1.1 创建项目
- Idea 通过 File-New-project 选择 Spring Initializr 插件创建,其它默认 Next
- 配置自己的 Project Metadata 为了学习及演示,我定义该 Client 为Provider。
- 这里需要选择
Spring Cloud Discovery
中的Eureka Discovery Client
依赖以及Spring Web Start
依赖。添加 Web 依赖是为了定义一个 Restful 接口规范的服务
1.2 快速配置
- 对 application.properties 进行配置,也可以使用 yml 文件,看个人喜好了。properies文件的配置很简单,比 Eureka Server 还少一些,比较关键的是
eureka.client.service-url.defaultZone
这个配置是指向了 Eureka Server 的注册地址。也就是这个 Client 注册到哪个Eureka Server 上。
# Eureka 客户端口号
server.port=20001
# 应用名
spring.application.name=spring-cloud-eureka-provider
# Eureka 相关配置
# 1.注册地址 注册到 Eureka Server 服务
eureka.client.service-url.defaultZone=http://localhost:10001/eureka/
- 对
SpringCloudEurekaProviderApplication
增加EnableDiscoveryClient
注解
@SpringBootApplication
@EnableDiscoveryClient
public class SpringCloudEurekaProviderApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudEurekaProviderApplication.class, args);
}
}
- 通过
@RestController
编写一个接口,我这里用UserController
这是一个用户接口的微服务
@RestController
public class UserController {
@GetMapping("/getUser/{id}")
public String getUser(@PathVariable() String id){
return "This is User [id = " + id + "]";
}
}
- 启动
SpringCloudEurekaProviderApplication
后通过地址 http://localhost:10001/ 可以看到 Client 已经被成功注册到Eureka Server
中,状态为UP。
- 测试接口 http://localhost:20001/getUser/3 返回
This is User [id = 3]
可以正常提供服务
2. Eureka Client Consumer
通过同样的方式再创建一个Client
作为服务消费者,这里注意一个概念。服务的消费者自身也可以是 Eureka Clinet
注册到Eureka Server
。也就是消费者也是服务提供者。
- 新建
Spring Boot
项目
- 添加
Eureka Discovery Client
,Spring Web Starter
,OpenFeign
依赖。OpenFeign
是作为Spring Cloud
的子项目之一,为微服务架构下服务之间的调用提供了解决方案。他可以利用声明式的方式定义Web服务客户端。
2.1 快速配置
application.properties
的配置和Provider
差不多,只是定义了不同的server.prot
和application.name
。同事他也注册到Eureka Server
注册中心
# Eureka 客户端口号
server.port=30001
# 应用名
spring.application.name=spring-cloud-eureka-consumer
# Eureka 相关配置
# 1.注册地址 注册到 Eureka Server 服务
eureka.client.service-url.defaultZone=http://localhost:10001/eureka/
SpringCloudEurekaConsumerApplication
中增加@EnableFeignClients
注解,这个注解会把consumer
也注册到注册中心去
@SpringBootApplication
@EnableFeignClients
public class SpringCloudEurekaConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudEurekaConsumerApplication.class, args);
}
}
- 通过注解方式编写一个
@FeignClient
接口
@FeignClient
定义了provider的微服务名称,这里用的是application-name
- 接口方法上定义了
@GetMapping
的注解和RestFul的调用地址
@FeignClient(value = "spring-cloud-eureka-provider")
public interface UserService {
@RequestMapping(value = "/getUser/{id}", method = RequestMethod.GET)
String getUser(@PathVariable("id") String id);
}
- 编写一个
Controller
来调用接口
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/getUser/{id}")
public String getUser(@PathVariable String id){
return userService.getUser(id);
}
}
- 启动项目查看http://localhost:10001/ 此时发现已经有2个服务被注册到了Server上
- 测试接口 http://localhost:30001/getUser/3 返回 This is User [id = 3]
3. 总结
Spring Cloud Eureka Client
作为服务的提供方,亦可作为消费者。一个 Client 实例即是一个微服务,对于多个拥有相同名字的实例,则是一个Client集群,Eureka 提供了软负载均衡,这个后面学习。
4. 参考
[Spring Cloud netflix 英文官网][https://spring.io/projects/spring-cloud-netflix]