Eureka是一个核心的模块,Eureka采取cs的设计架构,也就是Eureka由两个组件组成:Eureka服务端和Eureka客户端。
Eureka Service(一个独立的项目)用于注册服务以及实现服务的负载均衡和故障转移,他是服务的注册中心,Eureka Client(我们的微服务)他是用于与Eureka Server交互,获取其上注册的服务,使得交互变得非常简单。
Spring Cloud封装了Netflix公司开发的Eureka模块来实现服务和发现,也就是说Spring Cloud对Netflix Eureka做了二次封装;
搭建与配置Eureka服务注册中心
Spring Cloud要是用Eureka注册中心非常简单和方便,Spring Cloud中的Eureka服务注册中心实际上是也是也一个Spring Boot工程,我们只需要通过引入相关依赖和注解配置就能让Spring Boot构建的微服务应用轻松地与Eureka进行整合。
具体步骤如下:
- 创建一个Spring Boot项目,并且添加Spring Boot的相关依赖
- 添加eureka的依赖
<artifactId>Spring-cloud-framework-netfllix-eureka-server<artifactId>
- 在Spring Boot的入口类上添加一个@EnableEurekaServer注解,用于开启Eureka注册中心服务端
- 在application. Properties文件配置Eureka服务注册中心信息;
#内嵌定时tomcat的端口
server. port=8761
#设置该服务注册中心的hostname
eureka.instance.hostname=localhost
#由于我们目前创建的是一个服务注册中心,而不是普通的应用,默认情况下,这个应用会向注册中心(也就是他自己)注册他自己,设置false表示禁止这种自己向自己注册的默认行为。
eureka.client.register-with-eureka=false
#表示不去从服务端检索其他服务信息,因为他自己就是服务端,服务注册中心本身的职责就是维护服务实例,他不需要去检索其他服务
eureka.client.fetch-registry=false
#指定服务注册中心的位置
Eureka.client.service-url.defaultZone=http://eureka8761;8762/eureka,
http:eureka8762:8763/eureka
启动与测试Eureka服务注册中心
- 完成上面的项目搭建后,我们就可以启动SpringBoot程序,main方法运行
- 启动成功之后,通在浏览器地址栏访问我们的注册中心
向Eureka服务注册中心注册服务
我们前面搭建了服务提供下和项目,接下来我们就可以将服务提供者注册到Eureka注册中心,步骤如下:
- 在该服务提供者中添加eureka的依赖,因为服务提供者向注册中心服务,需要连接eureka,所以需要eureka客户端支持;
<artifactId>Spring-cloud-starter-netfllix-eureka-server<artifactId>
- 配置服务名称和注册中心地址
打开所有的web访问端口
management.endpoints.web.exposure.include=*
#每间隔2s,向服务端发送一次心跳,证明自己依然“存活”
eureka.instance.lease-renewal-interval-in-second=2
#告诉客户端如果10s我没有给你发心跳,就代表我故障了,将我踢出掉
eureka.instance.lease-expiration-duration=in-seconds=10
#告诉客户端,服务实例以ip作为链接,而不是取机器名
eureka.instance.prefer-ip-address=true
#告诉服务端,实例的名字
eureka.instance.instance-id=34-soringcloud-service-good
#eureka注册中心的连接地址
eureka.client.service-rul.defaultZone=http://localhost:8761/eureka
spring.application.name=34-soringcloud-service-good
- 激活Eureka中的EnableEurekaClient功能:
在SpringBoot的入口函数处,通过添加@EnableEurekaClient注解来表明自己是一个eureka客户端,让我的服务提供这可以连接eureka注册中心
- 启动服务提供者SpringBoot程序main方法运行
- 启动运行之后,通过在浏览器地址访问我们之前搭建好的eureka注册中心,就可以看到一个服务已经注册成功了。
从Eureka服务注册中心发现与消费服务
我们已经搭建一个服务注册中心,同时也向这个服务注册中心注册了服务,接下来我们就可以发现和消费服务了,这其中的发现由eureka客户端实现,而服务的消费由Ribbon实现,也就是说服务的调试需要eureka客户端和Ribbon,两者配合起来才能实现;
Eureka客户端是一个Java客户端,用来连接Eureka服务端,与服务端进行交互、负载均衡,服务的故障切换等;
Ribbon是一个基于HTTP和TCP的客户端负载均衡,当时用Ribbon对服务进行访问的时候,他会扩展Eureka客户端的服务发现功能,实现从Eureka注册中心中获取服务端列表,并通过Eureka客户端来确定服务端是否已经启动。
Ribbon在Eureka客户端服务发现的基础上,实现对服务实例的选择策略,从而实现对服务的负载均衡消费。
接下来我们来让服务消费者去消费服务。
我们前面搭建了服务消费者项目,接下来我们就可以使用该服务消费者通过注册中心去调用服务提供者,步骤如下:
- 在该消费者项目中添加eureka的依赖,因为服务消费者从注册中心获取服务,需要来接eureka,所以需要eureka客户端的支持;
<!—spring-cloud-starter-netflix-eureka-client-->
<dependency>
<groupId>org.springframework.cloud< /groupId >
<artifactId>spring-cloud-starter-netfllix-eureka-client</artifactId>
</dependency>
- 激活Eureka中的EnableEurekaClient功能:
在Spring Boot的入口函数处,通过添加@EnableEurekaClient注解来表明自己是一个eureka客户端,让我的服务消费者可以使用eureka注册中心;
- 配置服务的名称和注册中心的地址:
Spring.application.name=03-springcloud-web-consumer
Eureka.client.service-url.defaultZone=http://localhost:8761/eureka
- 前面介绍了服务的发现由eureka客户端实现,而服务的真正调用由ribbon实现,所以我们需要调用在服务提供者时使用ribbon来调用:
@LoadBalanced//使用Ribbon实现负载均衡的调用
@Bean
Public RestTemplate restTemplate(){
Return new RestTemplate();
}
加入了ribbon的支持,那么在调用时,即可改为使用服务名称来访问:
restTemplate.get.getForEntity(http://34-SPRINGCLOUD-SERVICE-GOODS/service/goods,string.class).getBody();
- 在完成上面的步骤之后,我们就可以启动消费者的SpringBoot程序,main方法
- 启动成功之后,通过在浏览器地址栏访问我们的消费者,看是否调用远程服务提供者的服务