1. Eureka 服务注册与发现

  • Eureka 是一个基于REST的服务,用于服务的的注册与发现;
  • Eureka采用C-S的设计架构,Eureka Server作为服务注册功能的服务器,它是服务注册中心;
  • Eureka包含两个组件:Eureka Server 和 Eureka Client
    • Eureka Server提供服务注册和发现;
    • Eureka Client是一个java客户端;

1.1 三大角色

  • Eureka Server提供服务注册和发现;
  • Service Provider服务提供方将自身服务注册到Eureka,从而使服务消费方能够找到;
  • Service Consumer服务消费方从Eureka获取注册服务列表,从而能够消费服务;

1.2 Eureka 服务注册中心Module(microservicecloud-eureka-7001)

// pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.noodles.springcloud</groupId>
<artifactId>microservicecloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent> <artifactId>microservicecloud-eureka-7001</artifactId>
<dependencies>
<!-- eureka-server 服务端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<!-- 修改后立即生效,热部署 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
</project> // application.yml
server:
port: 7001 eureka:
instance:
hostname: localhost #eureka服务端的实例名称
client:
register-with-eureka: false # false 表示不向注册中心注册自己
fetch-registry: false # false 表示自己就是注册中心,职责是维护服务实例,并不需要检索服务
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
#设置与Eureka Server交互的地址,查询和注册服务都需要依赖这个地址 // com.noodles.springcloud
// EurekaServer7001_App
@SpringBootApplication
@EnableEurekaServer // EurekaServer 服务器端启动类,接收其他微服务注册进来
public class EurekaServer7001_App { public static void main(String[] args) {
SpringApplication.run(EurekaServer7001_App.class, args);
}
} // 测试
// 访问: http://localhost:7001

1.3 将已有的部门微服务注册进eureka服务中心(microservicecloud-provider-dept-8001)

// 修改microservicecloud-provider-dept-8001
// pom.xml 增加
<!-- 将微服务provider 注册进 eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency> // application.yml 增加
eureka:
client: # 客户端注册进eureka服务列表内
service-url:
defaultZone: http://localhost:7001/eureka // DeptProvider8001_App 主启动类
@SpringBootApplication
@EnableEurekaClient // 本服务启动后,自动注册进eureka服务中
public class DeptProvider8001_App { public static void main(String[] args) {
SpringApplication.run(DeptProvider8001_App.class, args);
}
} // 测试
// 先要启动 EurekaServer,然后启动 DeptProvicer8001_App
// 访问:http://localhost:7001/

1.3.1 actuator 与注册微服务信息完善

  • 主机映射名称修改
  • 访问信息有IP信息提示
  • 微服务info内容详细信息

修改之前

修改之后

// 主机映射名称修改
// 修改microservicecloud-provider-dept-8001
// application.xml
eureka:
client: # 客户端注册进eureka服务列表内
service-url:
defaultZone: http://localhost:7001/eureka
instance:
instance-id: microservicecloud-dept8001 # 主机映射名称 // 访问信息有IP信息提示
// 修改microservicecloud-provider-dept-8001
// application.xml
eureka:
client: # 客户端注册进eureka服务列表内
service-url:
defaultZone: http://localhost:7001/eureka
instance:
instance-id: microservicecloud-dept8001 # 主机映射名称
prefer-ip-address: true # 访问路径可以显示IP地址 // 微服务info内容详细信息
// 修改microservicecloud-provider-dept-8001
// pom.xml
<!-- actutator 监控信息完善 --> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency> // 修改父工程 microservicecloud
// pom.xml
<!-- dependencyManagement -->
<build>
<finalName>microservicecloud</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<configuration>
<delimiters>
<delimit>$</delimit>
</delimiters>
</configuration>
</plugin>
</plugins>
</build> <!-- modules --> // 修改microservicecloud-provider-dept-8001
// application.yml
info:
app.name: noodles-microservicecloud
company.name: www.google.com
build.artifactId: $project.artifactId$
build.version: $project.version$

1.3.2 Eureka 自我保护机制

// 修改 microservicecloud-eureka-7001
// 将自我保护机制关闭(不推荐)
// application.yml
eureka:
server:
enable-self-preservation: false

1.3.3 Eureka 服务发现

// 修改 microservicecloud-provider-dept-8001
@RestController
public class DeptController { @Autowired
private DeptService deptService; @Autowired
private DiscoveryClient client; @RequestMapping(value = "/dept/discovery", method=RequestMethod.GET)
public Object discovery() {
List<String> list = client.getServices();
System.out.println("==========="+list); List<ServiceInstance> srvList = client.getInstances("MICROSERVICECLOUD-DEPT");
for(ServiceInstance element : srvList) {
System.out.println(element.getServiceId()+"\t"+element.getHost()+"\t"+element.getPort()+
"\t"+element.getUri());
}
return this.client;
}
} // DeptProvider8001_App 主启动类
@SpringBootApplication
@EnableEurekaClient // 本服务启动后,自动注册进eureka服务中
@EnableDiscoveryClient // 服务发现
public class DeptProvider8001_App { public static void main(String[] args) {
SpringApplication.run(DeptProvider8001_App.class, args);
}
} // 修改 microservicecloud-consumer-dept-80 工程的 DeptController Consumer
@RequestMapping(value="/consumer/dept/discovery")
public Object discovery() {
return restTemplate.getForObject(REST_URL_PREFIX+"/dept/discovery", Object.class);
}

2. Eureka 集群

// 新建microservicecloud-eureka-7002/microservicecloud-eureka-7003

// 按照7001为模板粘贴POM

// 修改7002和7003的主启动类

// 修改映射配置 hosts
127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com
127.0.0.1 eureka7003.com // 7001 application.yml
server:
port: 7001 eureka:
instance:
hostname: eureka7001.com #eureka服务端的实例名称
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ // 7002 application.yml
server:
port: 7002 eureka:
instance:
hostname: eureka7002.com #eureka服务端的实例名称
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7003.com:7003/eureka/ // microservicecloud-provider-dept-8001
// 微服务发布到3台eureka集群配置中, application.yml
eureka:
client: # 客户端注册进eureka服务列表内
service-url:
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka // 测试访问:
// http://eureka7001.com:7001
// http://eureka7002.com:7002
// http://eureka7003.com:7003

3. Eureka和Zookeeper比较

  • Eureka遵守AP原则(可用性,分区容错性)
  • Zookeeper遵守CP原则(强一致性,分区容错性)

参考资料:

SpringCloud 进阶之Eureka(服务注册和发现)的更多相关文章

  1. SpringCloud学习系列-Eureka服务注册与发现(1)

    1.Eureka的基本架构 Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现(请对比Zookeeper). Eureka 采用了 C-S 的设计架构 ...

  2. springcloud(二):Eureka服务注册与发现

    Spring Cloud Netflix  该项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix ...

  3. F版本SpringCloud 3—大白话Eureka服务注册与发现

    引用:服务注册与发现,就像是租房子一样 前言 今天洛阳下雨了,唉,没有想到有裹上了羽绒服,不穿冷穿了热的尴尬温度.上学工作这么多年都在外面,家里竟然没有一件春天的外套. 日常闲聊之后,开始今天的芝士环 ...

  4. SpringCloud学习系列-Eureka服务注册与发现(2)

    构建 microservicecloud-eureka-7001 eureka服务注册中心Module 1.新建microservicecloud-eureka-7001 2.pom <proj ...

  5. 「 从0到1学习微服务SpringCloud 」02 Eureka服务注册与发现

    系列文章(更新ing): 「 从0到1学习微服务SpringCloud 」01 一起来学呀! Spring Cloud Eureka 基于Netflix Eureka做了二次封装(Spring Clo ...

  6. SpringCloud学习系列-Eureka服务注册与发现(3)

    修改microservicecloud-provider-dept-8001 1.修改pom 增加内容 <!-- 将微服务provider侧注册进eureka --> <depend ...

  7. SpringCloud学习系列-Eureka服务注册与发现(4)

    actuator与注册微服务信息完善 1.主机名称:服务名称修改 当前问题 含有主机名称 修改修改microservicecloud-provider-dept-8001 的yml文件 修改内容 eu ...

  8. SpringCloud(3)---Eureka服务注册与发现

    Eureka服务注册与发现 一.Eureka概述 1.Eureka特点 (1) Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移. (2) Eureka 主管服务 ...

  9. SpringCloud(二)- 服务注册与发现Eureka

    离上一篇微服务的基本概念已经过去了几个月,在写那篇博客之前,自己还并未真正的使用微服务架构,很多理解还存在概念上.后面换了公司,新公司既用了SpringCloud也用了Dubbo+Zookeeper, ...

随机推荐

  1. Ecshop安装的坑,建议不要使用!

    最近因为工作的需要,安装了下ecshop,这个曾经的火爆开源程序,现在也呈现出疲态. 1.请看官方的运行环境推荐: 服务器端运行环境推荐·php版本5.0以上5.3以下的版本(推荐使用5.2系列版本) ...

  2. C# XCOPY命令 预先生成事件命令行”和“后期生成事件命令行”

    $(ConfigurationName) 当前项目配置的名称(例如,“Debug|Any CPU”). $(OutDir) 输出文件目录的路径,相对于项目目录.这解析为“输出目录”属性的值.它包括尾部 ...

  3. Unix系统编程()发送信号kill

    与shell的kill命令类似,一个进程能够使用kill系统调用向另一进程发送信号. 之所以选择kill作为术语,因为早期UNIX实现中大多数信号的默认行为是终止进程. #include <si ...

  4. springboot日志管理+集成log4j

    sprongboot使用的默认日志框架是Logback. 可以在application.properties配置简单日志属性,也可以单独配置logback.xml格式,还可以使用log4j来管理. 下 ...

  5. Thinkphp3.2 PHPMailer 发送 QQ邮箱 163邮箱

    在进入正题这前先看下网易(163)邮箱的服务器地址和端口号 类型 服务器名称 服务器地址 SSL协议端口号 非SSL协议端口号 收件服务器 POP pop.163.com 995 110 收件服务器 ...

  6. 《精通CSS》读书笔记(一)

    最近新添16本书,目前开始看陈剑瓯翻译的<精通CSS——高级Web标准解决方案>(Andy Budd, CSS Mastery -- Advanced Web Standards Solu ...

  7. JavaBeans 官方文档学习

    提示,重点:JavaBeans的Property和 Events:PropertyEditor极其注册和查找机制. 从目前来看,JavaBeans 更像是源自GUI的需求. 使用NetBeans新建一 ...

  8. Spring Framework 官方文档学习(一)介绍

    http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#overview-maven-bom ...

  9. 第二百五十五节,Bootstrap项目实战--关于

    Bootstrap项目实战--关于 html <!DOCTYPE html> <html lang="zh-cn"> <head> <me ...

  10. Mybatis实现了接口绑定,使用更加方便。

    1.Mybatis实现了接口绑定,使用更加方便. 在ibatis2.x中我们需要在DAO的实现类中指定具体对应哪个xml映射文件, 而Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生 ...