天天看點

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