文章目录
- SpringCloud之Eureka
- 前言
- 一、Eureka单机构建
- Eureka单机构建
- 将服务提供者注册进Eureka Server
- 二、Eureka集群构建
- 原理
- 步骤
- 三、负载均衡
- 扩展阅读
前言
由于传统RPC框架随着微服务数目不断增加,体系的复杂度不断提高,尝试手动配置每个服务就很难做到,同时有更高的概率出错。Eureka就是用于服务发现(Service Discovery Server)和注册(Service )的,并且可将服务器配置为高可用性。
一、Eureka单机构建 Eureka单机构建-
新建模块
eurekaServer1
-
pom.xml添加依赖
<dependencies> <dependency> <groupId>org.springframework.cloudgroupId> <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId> dependency> dependencies>
-
在yaml配置文件中修改配置
server: port: 8761 eureka: instance: hostname: eurekaServer1 client: register-with-eureka: false fetch-registry: false service-url: defaultZone: http://eurekaServer1:8761/eureka/
这里逐行解释一下yaml配置文件中的意思
server.port
:表示端口号eureka.instance.hostname
:表示创建eureka服务端的实例名称eureka.client.register-with-eureka
:表示是否在注册中心注册自己eureka.client.fetch-registry
:表示自己就是服务注册中心,不需要才从服务中心获取服务信息eureka.client.service-url.defaultZone
:表示Eureka Server的地址
-
新建启动类
@SpringBootApplication @EnableEurekaServer public class EurekaServer1 { public static void main(String[] args) { SpringApplication.run(EurekaServer1.class,args); } }
@SpringBootApplication
不需多说,就是标注主启动类的注解重要的是
@EnableEurekaServer
这个注解,表示将该启动类作为Eureka Server -
为了方便后面构建集群式,使用上述方法构建模块
eurekaServer2
端口号为8762
-
测试
在浏览器中输入地址
http://eurekaServer1:8761/eureka/
显示下图页面,即为成功
- 创建模块
serviceProvider1
- pom.xml添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
dependencies>
- 在yaml配置文件中修改配置
server:
port: 8080
spring:
application:
name: service-provider1
eureka:
client:
register-with-eureka: true
fetchRegistry: true
service-url:
defaultZone: http://localhost:8761/eureka
此时需要将服务注册进eureka,所以将属性
eureka.client.register-with-eureka
改为true
,需要注册中心获取信息,将属性eureka.client.fetch-registry
改为true
- 新建启动类
@SpringBootApplication
@EnableEurekaClient
public class ServiceProvider1 {
public static void main(String[] args) {
SpringApplication.run(ServiceProvider1.class,args);
}
}
@EnableEurekaClient
即将服务作为Eureka客户端注册进服务注册中心
- 测试
先启动EurekaServereurekaServer1
,再启动serviceProvider1
,浏览器中输入地址http://localhost:8761/eureka
,可以看到serviceProvider1
已经注册进去了
- 将服务消费者注册进Eureka Server同理,只不过在启动服务消费者之前,要先将服务提供者启动。这里只讲流程,具体业务逻辑需自行解决。
为实现高可用性,假设注册中心只有一个,如果出故障就会使整个服务环境不可用,所以需要构建Eureka集群提高容灾能力
原理即将两个Eureka Server互相注册进对方的服务中,互相注册,互相守望
步骤- 修改
eurekaServer1
和eurekaServer2
的yaml配置文件
# eurekaServer1
server:
port: 8761
eureka:
instance:
hostname: eurekaServer1.com
client:
register-with-eureka: false #false表示不向注册中心注册自己。
fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
service-url:
defaultZone: http://eurekaServer2.com:8762/eureka/
# eurekaServer2
server:
port: 8762
eureka:
instance:
hostname: eurekaServer2.com #eureka服务端的实例名称
client:
register-with-eureka: false #false表示不向注册中心注册自己。
fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
service-url:
defaultZone: http://eurekaServer1.com:8761/eureka/
这里
defaultZone
指向另一个Eureka Server实现相互注册
- 将服务提供者和服务消费者注册进Eureka集群,需要修改两个模块的yaml配置文件
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
即同时注册进两个Eureka Server
三、负载均衡-
按上述方法新建
serviceProvider2
-
在服务消费者创建
ApplicationContextConfig
配置类
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
@LoadBalanced
给RestTemplate
赋予负载均衡的能力,后续会在Ribbon(浅浅的挖一个坑😃)中详细讲解
- 在服务消费者HelloController中添加
@RestController
public class Consumer {
@Resource
private RestTemplate restTemplate;
public static final String PROVIDER_URL = "http://CLOUD-PAYMENT-SERVICE";
@GetMapping("/consumer/hello")
public String hello(){
return restTemplate.getForObject(PROVIDER_URL,String.class);
}
}
注意: 不要将
PROVIDER_URL
地址写死,否则就没有负载均衡能力扩展:
RestTemplate
中的方法getForObject
中的参数
PROVIDER_URL
即为请求的地址String.class
为返回值类型
- 测试
先启动Eureka Server集群,再启动serviceProvider1
和serviceProvider2
,以及服务消费者,在浏览器中输入http:/localhost/consumer/hello
,会发现网页8080
和8081
交替出现
说明使用负载均衡
扩展阅读
[1] Spring Cloud 官网的 Eureka 文档
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)