springcloud之Eureka基础

Eureka简介

1、Eureka原理

Application server:相当于项目中的服务提供者;  
Application Client:相当于本书的服务消费者;  
Make Remote Call:可以理解成调用RESTful API的行为;  
us-east-lc、us-east-ld等都是zone,它们都属于us-east-l这个region;

2、Eureka的两个组件 Eureka server 和 Eureka Client

Eureka server:提供服务发现的能力,各个微服务启动时,会向Eureka server注册自己的信息(例如:IP、端口、微服务名称等),Eureka server会存储这些信息;  
Eureka Client:是一个Java客户端,用于简化与Eureka server的交互;微服务启动后,会周期性(默认30s)地向Eureka server发送心跳以续约自己的“租期”;如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将注销该实例(默认90 s);默认情况下,Eureka Server同时也是Eureka Client。多个Eureka Server实例互相直接通过复制的方式来实现服务注册列表中数据的同步;  
Eureka Client会缓存服务注册表中的信息,这种方式有一定的优势——首先,微服务无需每次请求都查询Eureka Server,从而降低了Eureka Server的压力;其次,即使Eureka Server所有节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者并完成调用。

注释:Eureka通过心跳检查、客户端缓存等机制,提高了系统的灵活性、可伸缩性和可用性;

3、创建Eureka Server

(1)依赖的jar包

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

pom文件内容

<packaging>jar</packaging>
   <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>2.0.1.RELEASE</version>
       <relativePath/>
   </parent>
   <properties>
       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
       <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
       <java.version>1.8</java.version>
   </properties>
   <build>
       <plugins>
           <plugin>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-maven-plugin</artifactId>
           </plugin>
       </plugins>
   </build>
   <dependencyManagement>
       <dependencies>
           <dependency>
               <groupId>org.springframework.cloud</groupId>
               <artifactId>spring-cloud-dependencies</artifactId>
               <version>Finchley.M9</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
       </dependencies>
   </dependencyManagement>
   <dependencies>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
       </dependency>
   </dependencies>
   <repositories>
       <repository>
           <id>spring-snapshots</id>
           <name>Spring Snapshots</name>
           <url>https://repo.spring.io/snapshot</url>
           <snapshots>
               <enabled>true</enabled>
           </snapshots>
       </repository>
       <repository>
           <id>spring-milestones</id>
           <name>Spring Milestones</name>
           <url>https://repo.spring.io/milestone</url>
           <snapshots>
               <enabled>false</enabled>
           </snapshots>
       </repository>
   </repositories>
   <pluginRepositories>
       <pluginRepository>
           <id>spring-snapshots</id>
           <name>Spring Snapshots</name>
           <url>https://repo.spring.io/snapshot</url>
           <snapshots>
               <enabled>true</enabled>
           </snapshots>
       </pluginRepository>
       <pluginRepository>
           <id>spring-milestones</id>
           <name>Spring Milestones</name>
           <url>https://repo.spring.io/milestone</url>
           <snapshots>
               <enabled>false</enabled>
           </snapshots>
       </pluginRepository>
   </pluginRepositories>

(2)启动类的编写

  import org.springframework.boot.SpringApplication;
  import org.springframework.boot.autoconfigure.SpringBootApplication;
  import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
  @SpringBootApplication
  @EnableEurekaServer
  public class EurekaServer {
      public static void main(String\[\] args) {
          SpringApplication.run(EurekaServer.class, args);
      }
  }

注解:

@EnableEurekaServer表示声明一个Eureka Service

(3)application.xml文件的配置

server:
  port: 8001
eureka:
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
       defaultZone: http://127.0.0.1:${server.port}/eureka/

注解

server.port:表示当前服务的端口号  
eureka.client.registerWithEureka:表示是否将自己注册到Eureka Server,默认为true。由于当前应用就是Eureka Server,故而设为false;  
eureka.client.fetchRegistry:表示是否从Eureka Server获取注册信息,默认为true。因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,故而设为false;  
eureka.client.serviceUrl.defaultZone:设置与Eureka Server交互的地址,查询服务和注册服务需要依赖这个地址。默认是http://127.0.0.1:${server.port}/eureka/  多个地址之间可以使用,分隔。

(4)测试

启动Eureka Server 访问http://127.0.0.1:6868/

3、将微服务注册到Eureka Server上

(1)依赖jar包

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
pom文件
<packaging>jar</packaging>
    <!--引入spring boot的依赖-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        <relativePath/>
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.M9</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>
    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>

(2)application.yml配置文件

server:
  port: 8010
spring:
  application:
    name: microservice-simple-consumer-movie
eureka:
  client:
    service-url:
       defaultZone: http://127.0.0.1:8001/eureka/
  instance:
    prefer-ip-address: true

注释:

pring.application.name:用于指定注册到Eureka Server上的应用名称;
eureka.instance.prefer-ip-address:表示将自己的IP注册到Eureka Server。如不配置该属性获将其设置为false,则表示注册微服务所在操作系统的hostname到Eureka Server;

(3)启动类

package com.itmuch;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableDiscoveryClient
@EnableEurekaClient
public class ConsumerMoverApplication {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

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

注释:

这样既可将用户微服务注册到Eureka Server上。同理,将其他微服务也注册到Erueka Server上,配置以上信息

注意事项:

1、在Spring Cloud Edgware之前,要想将微服务注册到Eureka Server或其他服务发现组件上,必须在启动类上添加@EnableDiscoveryClient或者@EnableEurekaClient  
2、在Spring CloudEdgware以及更高版本中,只需要添加相关依赖,即可自动注册。这是由于在实际项目中,我们可能希望实现“不同环境不同配置”的效果,例如:在开发环境中,不注册到Eureka Server上,而是服务提供者、服务消费者直连,便于调测;在生产环境中,我们有希望能够享受服务发现的优势---服务消费者无须知道服务提供者的绝对地址。  
3、如不想将服务注册到Eureka Server,只需设置  
spring.cloud.service-reg-istry.auto-registration.enabled=false  
或者@EnableDiscoveryClient(auto-Register=false)即可;

转载于:https://my.oschina.net/u/3943993/blog/2413614

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值