Eureka注册中心
Eureka注册中心

Eureka注册中心

一、Eureka结构与作用

1、Eureka注册中心功能:

服务注册与服务发现

2、提供者与消费者

在服务调用关系中,会有两个不同的角色:

服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)

服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)

服务既可以是服务提供者,也可以是服务消费者。

3、注册中心实例

order-service如何得知user-service实例地址?

user-service服务实例启动后,将自己的信息注册到eureka-server(Eureka服务端)。这个叫服务注册
eureka-server保存服务名称到服务实例地址列表的映射关系
order-service根据服务名称,拉取实例地址列表。这个叫服务发现或服务拉取
order-service如何从多个user-service实例中选择具体的实例?

order-service从实例列表中利用负载均衡算法选中一个实例地址
向该实例地址发起远程调用
order-service如何得知某个user-service实例是否依然健康,是不是已经宕机?

user-service会每隔一段时间(默认30秒)向eureka-server发起请求,报告自己状态,称为心跳
当超过一定时间没有发送心跳时,eureka-server会认为微服务实例故障,将该实例从服务列表中剔除
order-service拉取服务时,就能将故障实例排除了

二、Eureka注册中心使用

1、搭建eureka-server

eureka-server: eureka注册中心的服务端,自身也是个独立的微服务

  • 创建项目

在cloud-demo父目录下创建eureka-server子目录

  • 引入依赖

在eureka-server的pom文件中

<dependencies>
<!--eureka-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
  • 在启动类添加eureka自动装配开关注解
@EnableEurekaServer //eureka自动装配开关
@SpringBootApplication
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class,args);
    }
}
  • 在yml中填写配置信息
#服务端口号
server:
  port: 10086

#服务器名称
spring:
  application:
    name: eurekaserver

#服务地址
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka

启动测试:

访问:http://localhost:10086/

2、服务注册

将各个服务模块注册到eureka注册中心

  • 引入依赖
<!--eureka-client-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • 配置文件
#服务器名称
spring:
  application:
    name: orderservice

#服务地址
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka   #eureka-server端口号/eureka 

启动多实例

启动两个user-service实例

  • 右键原服务实例

  • 填写名称及实例端口号

  • eureka注册中心效果

3、服务发现

在order-service服务中从eureka-server注册中心取出注册好的user-service服务,并且实现负载均衡

  • 在order-service的启动类中,restTemplate上添加@LoadBalanced负载均衡注解
@SpringBootApplication
public class OrderApplication {

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

    /**
     * 将RestTemplate注入Spring容器
     * @return
     */
    @Bean
    @LoadBalanced //负载均衡
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

}
  • 在order-service的service中,获取url时可以使用服务名代替 端口号+ip
// 2.获取url
String url="http://userservice/user/"+order.getUserId();

发表回复

您的电子邮箱地址不会被公开。