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);
    }
}
复制代码
相关文章
相关标签/搜索