Eureka是做什么的?
Eureka作为SpringCloud中的一个关键组件,其主要负责完成服务治理的功能。 服务治理就是用来实现各个微服务实例的注册和发现。 软件设计中的一个常用解耦手段就是引入一个第三方“角色”来进行解耦,例如spring里通过引入容器来进行IOC对“创建对象”这一动作进行了解耦,通过动态代理对象完成了对“使用方”和“被代理对象”之间进行解耦,引入消息队列对服务消费方和服务提供方进行解耦等等… 在微服务中,通过引入注册中心,就能够满足:消费方只需要关心调用哪一个服务而不用关心这个服务由谁提供,而服务方也只提供服务而不用关心这个服务会被谁调用,其他不需要被关心的这层“依赖关系”就交给注册中心去做.
Eureka的几种“角色”
1. 作为Servver:服务注册中心
提供注册与发现的功能,注册中心的集群由多个Eureka互相注册构成
a. 主要需要导入的依赖:
1 |
|
b. 配置配置文件
1 | # 设置端口 |
c. 在启动类上增加@EnableEurekaServer注解
1 | package com.example.eurek_server; |
可以访问 ip:port 来看注册信息.
2. 作为Client:
pom文件需要导入依赖:
1 | <dependency> |
作为Client的Eureka有着两个角色:
a. 服务提供者:
提供服务的应用,一般是SpringBoot应用(也可以是其他技术平台,但要遵守Eureka通信机制).
配置properties:
1
2
3
4
5server.port=9999
# 设置服务名字
spring.application.name=hello-service
# 设置默认注册到的zone的地址信息
eureka.client.service-url.defaultZone=http://localhost:8080/eureka在启动类上加@EnableDiscoveryClient,表示以客户端的身份被发现. @EnableDiscoveryClient是springcloud中的注解,可以继承大部分的注册中心(例如zookeeper),而EnableEurekaClient则是netflix中的注册中心… 所以建议使用@EnableDiscoveryClient
然后被该springboot项目的rest方法就能作为微服务被consumer调用
1 | package com.example.eureka_service; |
b. 服务消费者:
配置properties:
1
2
3
4
5server.port=1111
# 设置服务名字
spring.application.name=hello-consumer
# 设置默认注册到的zone的地址信息
eureka.client.service-url.defaultZone=http://localhost:8080/eureka在启动类上加@EnableDiscoveryClient,表示以客户端的身份被发现.
远程调用微服务模块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41package com.example.eureka_consumer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.context.annotation.Import;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.sql.Struct;
.class}) ({RestTemplate
public class EurekaConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaConsumerApplication.class, args);
}
private RestTemplate restTemplate;
private LoadBalancerClient eurekaClient;
"hello_consumer") (
public String hi(){
ServiceInstance serviceInstance = eurekaClient.choose("hello-service");
String host = serviceInstance.getHost();
int port = serviceInstance.getPort();
String uri = "/hello";
String url = "http://" + host + ":" + port + uri;
return restTemplate.getForEntity(url,String.class).getBody();
}
}