07 Spring Cloud - Eureka

這是我參與8月更文挑戰的第9天,活動詳情查看:8月更文挑戰java

介紹

Eureka是基於REST(表明性狀態轉移)的服務,主要在AWS雲中用於定位服務,以實現負載均衡和中間層服務器的故障轉移。咱們稱此服務爲Eureka服務器。Eureka還帶有一個基於Java的客戶端組件Eureka Client,它使與服務的交互變得更加容易。客戶端還具備一個內置的負載平衡器,能夠執行基本的循環負載平衡。在Netflix,更復雜的負載均衡器將Eureka包裝起來,以基於流量,資源使用,錯誤條件等多種因素提供加權負載均衡,以提供出色的彈性。git

官方的介紹在這裏Eureka wiki程序員

Eureka是Netflix開源的一個RESTful服務,主要用於服務的註冊發現。( Netflix是一家美國公司)github

Eureka由兩個組件組成:Eureka服務器和Eureka客戶端。spring

Eureka服務器用做服務註冊服務器。服務器

Eureka客戶端是一個java客戶端,用來簡化與服務器的交互、做爲輪詢負載均衡器,並提供服務的故障切換支持。markdown

Netflix在其生產環境中使用的是另外的客戶端,它提供基於流量、資源利用率以及出錯狀態的加權負載均衡。app

在我看來,Eureka的吸引力來源於如下幾點:負載均衡

開源:你們能夠對實現一探究竟,甚至修改源碼。框架

可靠:通過Netflix多年的生產環境考驗,使用應該比較靠譜省心

功能齊全:不但提供了完整的註冊發現服務,還有Ribbon等能夠配合使用的服務。

基於Java:對於Java程序員來講,使用起來,內心比較有底。

spring cloud能夠使用Spring Cloud, 與Eureka進行了很好的集成,使用起來很是方便。

總的來講,Eureka 就是一個服務發現框架。

具體來講就是:建立 2個model工程: 一個model工程做爲服務註冊中心,即Eureka Server,另外一個做爲Eureka Client。

簡單的模塊關係

實現一個簡單的 Eureka Demo 須要三個工程:

  1. 註冊中心
  2. 服務提供者
  3. 服務消費者

image.png

1. 註冊中心

  • pom.xml

spring-cloud-starter-netflix-eureka-server的依賴

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>
複製代碼
  • application.yml
server:
  port: 8888
eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone:  http://${eureka.instance.hostname}:${server.port}/eureka/
複製代碼
  • App.java
@SpringBootApplication
@EnableEurekaServer
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
        System.out.println("註冊中心啓動成功");
    }
}
複製代碼

2. 服務提供者

  • pom.xml省略
  • application.yml
server:
  port: 8888
eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone:  http://${eureka.instance.hostname}:${server.port}/eureka/
複製代碼
  • App.java
@SpringBootApplication
@EnableEurekaServer
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
        System.out.println("註冊中心啓動成功");
    }
}
複製代碼
  • ProviderController.java`
@RestController
public class ProviderController {
    @RequestMapping("/getUserList")
    public List<String> getUserList() {
        List<String> listUser = new ArrayList<String>();
        listUser.add("zhangsan");
        listUser.add("lisi");
        listUser.add("yushengjun");
        return listUser;
    }
}
複製代碼

3. 服務消費者

  • pom.xml省略
  • application.yml
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8888/eureka/
server:
  port: 8764
spring:
  application:
    name: consumer
複製代碼
  • App.java
@EnableEurekaClient
@SpringBootApplication
public class AppOrder {
    public static void main(String[] args) {
        SpringApplication.run(AppOrder.class, args);
        System.out.println("消費者啓動成功");
    }

    @Bean
    @LoadBalanced // 開啓ribbon,提供負載均衡
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
複製代碼
  • ConsumerController.java
@Controller
public class ConsumerController {
    @Autowired
    RestTemplate restTemplate;

    @GetMapping("/getdata")
    @ResponseBody
    List<String>  getAllpoints(){
        return restTemplate.getForObject("http://provider/getUserList", List.class);
    }
}
複製代碼
相關文章
相關標籤/搜索