什么是Eureka,什么是服务注册与发现
- Eureka是Netflix开源的一个RESTful服务,主要用于服务的注册发现。
- Eureka由两个组件组成:Eureka服务器和Eureka客户端。Eureka服务器用作服务注册服务器。
- Eureka客户端是一个java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。
- Netflix在其生产环境中使用的是另外的客户端,它提供基于流量、资源利用率以及出错状态的加权负载均衡。
搭建Eureka-Server服务注册中心
开发工具使用 IDEA 这个不做解释,点击 File > new > Project… 创建一个新的项目。
选择 Gradle 构建工具,不习惯的可以使用其他的方式, SDK 选择的 java 1.8 下面的语言选择的Kotlin/JVM ,因为我使用 Kotlin 开发,然后下一步。
填写相关信息,然后点击 Finish 完成创建。
配置 Gradle 需要加载的依赖项,以及映射地址
buildscript {
repositories {
// 阿里镜像maven{
url "http://maven.aliyun.com/nexus/content/groups/public/"}mavenCentral()jcenter()}dependencies {
classpath group: 'org.springframework.boot', name: 'spring-boot-gradle-plugin', version: SPRING_BOOT_VERSIONclasspath group: 'org.jetbrains.kotlin', name: 'kotlin-gradle-plugin', version: KOTLIN_VERSIONclasspath group: 'org.jetbrains.dokka', name: 'dokka-gradle-plugin', version: DOKKA_VERSIONclasspath group: 'com.google.protobuf', name: 'protobuf-gradle-plugin', version: PROTOBUF_GRADLE_VERSION// ssh插件, 用于部署classpath 'org.hidetake:gradle-ssh-plugin:2.10.1'}
}apply plugin: 'kotlin'
apply plugin: 'org.jetbrains.dokka'
apply plugin: 'war'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'group 'org.example'
version '1.0-SNAPSHOT'sourceCompatibility = 1.8repositories {
maven{
url "http://maven.aliyun.com/nexus/content/groups/public/"}mavenCentral()jcenter()
}dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"testCompile group: 'junit', name: 'junit', version: '4.12'// kotlin 依赖compile group: 'org.jetbrains.kotlin', name: 'kotlin-stdlib-jdk8', version: KOTLIN_VERSIONcompile group: 'org.jetbrains.kotlin', name: 'kotlin-reflect', version: KOTLIN_VERSION//// spring boot 依赖providedCompile group:'org.springframework.boot', name:'spring-boot-starter-tomcat', version: SPRING_BOOT_VERSION// spring cloud 依赖compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-eureka-server', version: SPRING_CLOUD_VERSION
}compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${
SPRING_CLOUD_DEPENDENCIES}"}
}
按照上面的配置发现没有版本号,版本号统一配置在 gradle.properties 文件中。
# https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web
SPRING_BOOT_VERSION = 2.2.2.RELEASE
# https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib-jdk8
KOTLIN_VERSION = 1.3.61
# https://mvnrepository.com/artifact/org.jetbrains.dokka/dokka-gradle-plugin
DOKKA_VERSION=0.9.16
# https://mvnrepository.com/artifact/com.google.protobuf/protobuf-gradle-plugin
PROTOBUF_GRADLE_VERSION = 0.8.10
# https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server
SPRING_CLOUD_VERSION = 1.4.7.RELEASE
# https://repo.spring.io/milestone
SPRING_CLOUD_DEPENDENCIES = Hoxton.RELEASE
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.builder.SpringApplicationBuilder
import org.springframework.boot.runApplication
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer/*** 配置用用** @author wx*/
@EnableEurekaServer
@SpringBootApplication
open class CloudEurekaApp : SpringBootServletInitializer() {
/*** 配置应用** @param builder 应用builder对象* @return 配置好的应用builder对象*/override fun configure(builder: SpringApplicationBuilder): SpringApplicationBuilder {
return builder.sources(CloudEurekaApp::class.java)}} // Class CloudEurekaApp/*** Web应用入口** @param args 命令行参数*/
fun main(args: Array<String>) {
runApplication<CloudEurekaApp>(*args)return
}
创建一个主程序入口,配置 @EnableEurekaServer 注解声明 是 EurekaServer 服务。
添加 yml 配置文件,发现我建了三个 yml 文件,我这里区分了开发环境和生产环境,如果你那里不需要,只建立一个就可以了
主yml:
eureka:client:# 仅作为服务器,不作为客户端register-with-eureka: false# 无需注册自身fetch-registry: falsespring:application:name: cloud-centerjmx:default-domain: cloud-centerserver:servlet:application-display-name: 云中心(服务注册)
开发 dev :
eureka:client:service-url:defaultZone: http://127.0.0.1:${server.port}/eureka/#开发环境
server:port: 8761
生产环境 prod:
eureka:client:service-url:defaultZone: http://127.0.0.1:${server.port}/${spring.application.name}/eureka/#开发环境
server:port: 8080
准备运行:
打开设置要运行的环境 dev :
右键点击程序入口主类选择运行:
开发环境的端口号为8761 运行在本机上 ,地址: http://localhost:8761
只是运行起来了还没有加入服务,下一篇介绍怎么加入服务完成负载均衡。下一篇见。
源码下载