天天看点

Eureke服务入门就这一篇就够了Eureka服务发现入门Demo

什么是Eureka

  • Eureka服务发现
    • 拓扑图
  • 入门Demo
    • microservice-eureka-server
    • 配置
    • 启动类
    • 效果
    • microservice-provider-user
    • 依赖
    • 配置
    • 实体类
    • 服务层
    • 控制层
    • 启动类
    • 效果
    • microservice-consumer-user
    • 配置
    • 实体类
    • 控制层
    • 启动类
    • 效果

Eureka服务发现

Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。

Eureka包含两个组件:Eureka Server和Eureka Client。

Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。

Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。

在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。

Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。

拓扑图

Eureke服务入门就这一篇就够了Eureka服务发现入门Demo

入门Demo

microservice-eureka-server

配置

server:
  port: 8761
eureka:
  client:
#要不要去注册中心获取其他服务的地址
    fetch-registry: false
#自己就是注册中心,不用注册自己
    register-with-eureka: false
           

启动类

package com.xxx.proj.eurekaserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

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

}

           

效果

Eureke服务入门就这一篇就够了Eureka服务发现入门Demo

microservice-provider-user

依赖

Eureke服务入门就这一篇就够了Eureka服务发现入门Demo
springboot的版本号
<version>2.2.4.RELEASE</version>
springcloud的版本号
<spring-cloud.version>Hoxton.SR1</spring-cloud.version>
           

配置

server:
  port: 8000
spring:
  application:
    name: microservice-provider-user
  jpa:
    show-sql: true
  datasource:
    url: jdbc:mysql:///test?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password:
eureka:
  instance:
    prefer-ip-address: true
           

实体类

package com.xxx.proj.eurekaprovider.entity;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import javax.persistence.*;

@Entity
@Table(name = "tb_user")
@Getter
@Setter
@ToString
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String username;

    private String password;
}

           

服务层

package com.xxx.proj.eurekaprovider.dao;

import com.xxx.proj.eurekaprovider.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserDao extends JpaRepository<User, Integer> {
}
           

控制层

package com.xxx.proj.eurekaprovider.controller;

import com.xxx.proj.eurekaprovider.dao.UserDao;
import com.xxx.proj.eurekaprovider.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Optional;

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserDao dao;

    @RequestMapping("/findById/{id}")
    public User findById(@PathVariable("id") Integer id) {
        Optional<User> optional = dao.findById(id);
        if (optional.isPresent()) return optional.get();
        else return null;
    }
}

           

启动类

@SpringBootApplication
@EnableDiscoveryClient
public class EurekaProviderUser1Application {

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

}
           

效果

Eureke服务入门就这一篇就够了Eureka服务发现入门Demo

microservice-consumer-user

Eureke服务入门就这一篇就够了Eureka服务发现入门Demo

配置

server:
  port: 8010
spring:
  application:
    name: micro-consumer-user
eureka:
  instance:
    prefer-ip-address: true
           

实体类

package com.xxx.proj.eurekaconsumer.entity;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@ToString
@Getter
@Setter
public class User {
    private Integer id;

    private String username;

    private String password;
}

           

控制层

package com.xxx.proj.eurekaconsumer.controller;

import com.xxx.proj.eurekaconsumer.entity.User;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/{id}")
    public User getOne(@PathVariable("id") Integer id) {
        RestTemplate restTemplate = new RestTemplate();
        return restTemplate.getForObject("http://localhost:8000/user/findById/" + id, User.class);
    }
}
           

启动类

@SpringBootApplication
@EnableDiscoveryClient
public class EurekaConsumerUserApplication {

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

}
           

效果

Eureke服务入门就这一篇就够了Eureka服务发现入门Demo