springcloud 随笔 2 -- eureka

通过前文的讲解, 大家对springboot 的简单应用有了一些了解,但是在实际工作中, 各个事业部,产品线都在维护着各自的项目, 又依赖着其他产品线的项目, 那么,各个项目的相互依赖以及调用该如何高效简洁的维护呢,是时候该让服务注册与发现这一理念上场了:服务发现机制 是指 服务消费者通过该机制获取的服务提供者的信息,即使服务提供者的配置或者信息发生变化,对于消费者是无感知的,或者说是低侵入式的。
先简单说一下服务提供者, 服务消费者 以及注册中心(就是服务发现组件)这三者之间的关系

  1. 各个服务在启动的时候都会讲自身的配置信息等都注册到注册中心,注册中心就会保存这些信息,以便其他服务调用,这里所说的各个服务包括服务提供者, 服务消费者,以及注册中心自己(这个在后文中会有讲解)
  2. 服务消费者并不知道服务提供者网络信息, 而是先通过注册中心获取提供者的网络地址,然后再去调用服务
  3. 各个服务与注册中心通过一定的机制(比如心跳检查)来通信,表示自身服务健在,如果某个服务长时间无法与注册中心通信, 注册中心就会注销该实例
  4. 服务地址发生变化后,会重新向注册中心注册。消费者无需人工修改提供者的网络地址等信息

eureka 就是springcloud 家族中的注册中心组件,本身就是一个rest服务, 包含server 和client 端
下面我们编写一个简单的Eureka Server

buildscript {
    repositories {
        mavenLocal()
        maven {
            url "http://maven.aliyun.com/nexus/content/groups/public/"
        }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.9.RELEASE")
    }
}
apply plugin: 'application'
apply plugin: 'org.springframework.boot'



def env = System.getProperty("env") ?: "dev"

sourceSets {
    main {
        resources {
            srcDirs = ["src/main/resources", "src/main/profile/$env"]
        }
    }
}


dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:Edgware.SR1"
    }
}
dependencies {
    compile('org.springframework.cloud:spring-cloud-starter-eureka-server')
}

配置文件 application-peer1.yml

server:
  port: 6201
eureka:
  instance:
    prefer-ip-address: true
    hostname: 127.0.0.1
  client:
    serviceUrl:
      defaultZone: http://127.0.0.1:6202/eureka
    register-with-eureka: true
    fetch-registry: true

spring:
  application:
    name: miracle-eureka-server

logging:
  config: classpath:log4j2.xml

启动类

package com.miralcle.eureka;

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

/**
 * Created by naonao on 18/4/22.
 */
@SpringBootApplication
@EnableEurekaServer
public class MiracleEurekaApplication1 {
    public static void main(String[] args) {
        setProfile("peer1");
        SpringApplication.run(MiracleEurekaApplication1.class, args);

    }
    public static void setProfile(String active) {
        String profile = "spring.profiles.active";
        System.setProperty(profile, active);
    }
}

在写一个MiracleEurekaApplication2

package com.miralcle.eureka;

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

/**
 * Created by naonao on 18/4/22.
 */
@SpringBootApplication
@EnableEurekaServer
public class MiracleEurekaApplication2 {
    public static void main(String[] args) {
        MiracleEurekaApplication1.setProfile("peer2");
        SpringApplication.run(MiracleEurekaApplication2.class, args);
    }
}

相对应的配置文件和 和peer1类似,具体可见代码

启动两个application 输入licalhost:6201 查看

猜你喜欢

转载自blog.csdn.net/weixin_39526391/article/details/80024608