热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringCloud微服务框架02Eureka服务注册与发现

1、Eureka简介Eureka是Netflix出品的用于实现服务注册和发现的工具。SpringCloud集成了Eureka,并提供了开箱即用的支持。Netflix在设计Eurek

1、Eureka简介

Eureka是Netflix出品的用于实现服务注册和发现的工具。Spring Cloud集成了Eureka,并提供了开箱即用的支持。Netflix在设计Eureka时遵循着A(可用性)P(分区容错性)原则,它是基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移,功能类似于Dubbo的注册中心Zookeeper。Zookeeper更着重于C(一致性)P(分区容错性)。

2、实现原理

SpringCloud微服务框架02-Eureka服务注册与发现

Eureka采用C-S的设计架构,即包括了Eureka Server(服务端),Eureka Client(客户端)。

  1. Eureka Server提供服务注册,各个节点启动后,在Eureka Server中进行注册
  2. Eureka Client是一个Java客户端,用于和服务端进行交互,同时客户端也是一个内置的默认使用轮询负载均衡算法的负载均衡器。在应用启动后,会向Eureka Server发送心跳(默认30s)。如果Eureka Server在多个心跳周期内没有接受到某个节点的心跳,Eureka Server将会从服务注册表中将这个服务取出(默认90s)。

3、SpringCloud Eureka的使用步骤

3.1 创建Eureka service注册中心

创建一个SpringBoot项目:maple-eureka-service

导入pom.xml需要的依赖



    org.springframework.cloud
    spring-cloud-starter-eureka-server

        


    org.springframework.boot
    spring-boot-starter-security





    
        
            org.springframework.cloud
            spring-cloud-dependencies
            Dalston.SR3
            pom
            import
        
    

配置application.properties文件

# 服务注册中心端口号
server.port=1111

# 项目名
spring.application.name=eureka-server

# 注册中心主机名
eureka.instance.hostname=localhost

# false表示不向注册中心注册自己。
eureka.client.register-with-eureka=false

# false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
eureka.client.fetch-registry=false

# 单机设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址(单机)
eureka.client.serviceUrl.defaultZOne=http://${eureka.instance.hostname}:${server.port}/eureka/

# Eureka高复用时设置其他的Eureka之间通信
#eureka.client.serviceUrl.defaultZOne=http://backup1:1112/eureka/,http://backup2:1113/eureka/

# Eureka服务端关闭心跳连接测试
#eureka.server.enable-self-preservation=false

# 是否启用安全策略 security.basic.enabled为true时表示开启
security.basic.enabled=true
security.user.name=admin
security.user.password=admin123

这里只做单机的Eureka,高可用的集群环境在后面的文章详细介绍。

配置主服务类文件MapleEurekaServiceApplication.java

添加 Eureka 服务声明注解@EnableEurekaServer

@EnableEurekaServer
@SpringBootApplication
public class MapleEurekaServiceApplication {

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

访问Eureck服务注册中心

在浏览器输入http://localhost:1111

显示登录页面,如果无需登录,则可以设置application.properties文件里属性rity.basic.enabled=false

SpringCloud微服务框架02-Eureka服务注册与发现

登录之后显示以下页面,表示Eureka注册中心服务启动成功。

SpringCloud微服务框架02-Eureka服务注册与发现

 

3.2 创建提供服务者的Eureka Client

创建springBoot项目:maple-eureka-provider

导入pom.xml需要的依赖



    org.springframework.cloud
    spring-cloud-starter-eureka

        


     org.springframework.boot
    spring-boot-starter-actuator




    
        
            org.springframework.cloud
            spring-cloud-dependencies
            Dalston.SR3
            pom
            import
        
    

配置application.properties文件

server.port=8087
spring.application.name=maple-provider

#如果注册中心服务不需要登录
#eureka.client.service-url.defaultZOne=http://master:1111/eureka/
#如果注册中心服务需要登录则:http://user:[email protected]:8761/eureka
eureka.client.service-url.defaultZOne=http://admin:[email protected]:1111/eureka/

配置主服务类文件MapleEurekaProviderApplication.java

添加 Eureka 客户端声明注解@EnableDiscoveryClient或@EnableEurekaClient

spring cloud中discovery service有许多种实现(eureka、consul、zookeeper等等)

@EnableDiscoveryClient基于spring-cloud-commons;

@EnableEurekaClient基于spring-cloud-netflix

注解@EnableEurekaClient上有@EnableDiscoveryClient注解,可以说基本就是EnableEurekaClient有@EnableDiscoveryClient的功能,@EnableEurekaClient注解就是一种方便使用eureka的注解而已,可以说使用其他的注册中心后,都可以使用@EnableDiscoveryClient注解

但是使用@EnableEurekaClient的情景,就是在服务采用eureka作为注册中心的时候,使用场景较为单一。

@EnableDiscoveryClient
@SpringBootApplication
public class MapleEurekaProviderApplication {

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

创建测试服务ProviderDemoController.java

@RestController
@RequestMapping("/demo")
public class ProviderDemoController {

	@RequestMapping(value = "/providerDemo")
	@ResponseBody
	public String providerDemo(){
		return "这是项目《maple-eureka-provider》ProviderDemo的数据";
	}
}

3.3 创建服务消费者的Eureka Client

创建springBoot项目:maple-eureka-client

导入pom.xml需要的依赖



    org.springframework.cloud
    spring-cloud-starter-eureka

   

	org.springframework.cloud
	spring-cloud-starter-ribbon




    
        
            org.springframework.cloud
            spring-cloud-dependencies
            Dalston.SR3
            pom
            import
        
    

配置application.properties文件

server.port=8065
spring.application.name=maple-client

#如果注册中心服务不需要登录
#eureka.client.service-url.defaultZOne=http://master:1111/eureka/
#如果注册中心服务需要登录则:http://user:[email protected]:8761/eureka
eureka.client.service-url.defaultZOne=http://admin:[email protected]:1111/eureka/

配置主服务类文件MapleEurekaClientApplication .java

添加 Eureka 客户端声明注解@EnableDiscoveryClient

@EnableDiscoveryClient
@SpringBootApplication
public class MapleEurekaClientApplication {

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

创建测试服务DemoController.java

@RestController
@RequestMapping("/demo")
public class DemoController {
	
	private String PROVIDER_URL = "http://MAPLE-PROVIDER";
	@Autowired
	private RestTemplate restTemplate; 
	
	@RequestMapping(value = "/test")
	public @ResponseBody String test(){
		return restTemplate.getForEntity(PROVIDER_URL + "/demo/providerDemo" , String.class).getBody();
	}
}

这里需要配置RestTemplate

@Configuration
public class TemplateConfig {

	@Bean
	@LoadBalanced	//负载均衡
	public RestTemplate restTemplate(ClientHttpRequestFactory factory){
		return new RestTemplate(factory);
	}
	
    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setReadTimeout(15000);//ms
        factory.setConnectTimeout(15000);//ms
        return factory;
    } 
}

@LoadBalanced注解参考

SpringCloud微服务框架03 - Ribbon负载均衡一文

启动项目:maple-eureka-provider和maple-eureka-client

此时,Eureka的注册中心就可以看到注册的服务了。

SpringCloud微服务框架02-Eureka服务注册与发现

在浏览器***问http://127.0.0.1:8065/demo/test.do显示页面:

SpringCloud微服务框架02-Eureka服务注册与发现

此时,Eureka服务和发现已经搭建好了。

4、Eureka-HA(高可用) 机制

现在已经成功的实现了一个 Eureka 服务器,但是现在属于单节点的服务运行过程,如果说现在单节点的 Eureka 出现了错误, 导致无法使用,那么对于所有的微服务的架构就将出现整体的瘫痪,就需要进行 Eureka 集群搭建,同时利用集群可以有效的实现 HA 的处理机制,如果要进行集群的搭建一定要选择两台或以上的电脑完成,而基本的流程如下:

SpringCloud微服务框架02-Eureka服务注册与发现

配置hosts文件

127.0.0.1 master
127.0.0.1 backup1
127.0.0.1 backup2

修改maple-eureka-service项目application.properties文件,并创建maple-eureka-service2、maple-eureka-service项目。

application.properties文件分别如下

# maple-eureka-service-----------------------------
# 服务注册中心端口号
server.port=1111

# 项目名
spring.application.name=eureka-server

#注册中心主机名
eureka.instance.hostname=master

# false表示不向注册中心注册自己。
eureka.client.register-with-eureka=false

# false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
eureka.client.fetch-registry=false

# Eureka高复用时设置其他的Eureka之间通信
eureka.client.serviceUrl.defaultZOne=http://backup1:1112/eureka/,http://backup2:1113/eureka/



# maple-eureka-service2-----------------------------
#服务注册中心端口号
server.port=1112
spring.application.name=eureka-server

#注册中心主机名
eureka.instance.hostname=backup1

#服务注册中心的配置内容,指定服务注册中心的位置
eureka.client.serviceUrl.defaultZOne=http://master:1111/eureka/,http://backup2:1113/eureka/



# maple-eureka-service3-----------------------------
#服务注册中心端口号
server.port=1113
spring.application.name=eureka-server

#注册中心主机名
eureka.instance.hostname=backup2

#服务注册中心的配置内容,指定服务注册中心的位置
eureka.client.serviceUrl.defaultZOne=http://master:1111/eureka/,http://backup2:1112/eureka/

修改maple-eureka-client、maple-eureka-provider项目的application.properties文件eureka.client.service-url.defaultZon属性

eureka.client.service-url.defaultZOne=http://master:1111/eureka/,http://backup1:1112/eureka/,http://backup2:1113/eureka/

启动所有的 eureka 服务,而后进入到每一个服务的后台去观察运行的副本效果:

此时访问http://master:1111,显示如下:

SpringCloud微服务框架02-Eureka服务注册与发现

参考:

EureKa:服务注册与发现

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

 


推荐阅读
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 2018深入java目标计划及学习内容
    本文介绍了作者在2018年的深入java目标计划,包括学习计划和工作中要用到的内容。作者计划学习的内容包括kafka、zookeeper、hbase、hdoop、spark、elasticsearch、solr、spring cloud、mysql、mybatis等。其中,作者对jvm的学习有一定了解,并计划通读《jvm》一书。此外,作者还提到了《HotSpot实战》和《高性能MySQL》等书籍。 ... [详细]
  • 开发笔记:读《分布式一致性原理》JAVA客户端API操作2
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了读《分布式一致性原理》JAVA客户端API操作2相关的知识,希望对你有一定的参考价值。创 ... [详细]
author-avatar
朱甜520_322
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有