eureka多了一个莫名其妙的服务_微服务SpringCloud之服务注册与发现

在找.net core 微服务框架时发现了Steeltoe开源项目,它可以基于Spring Cloud实现.net core和.net Framework的微服务。正好之前也有学习过SpringBoot,而Spring Cloud是基于SpringBoot的,有了SpringBoot基础上手入门SpringCloud应该也不难,正好我的第一本书<>即将上架,感兴趣的朋友可以多多支持。本篇主要学习服务注册与发现组件Eureka。

在学习之前首先聊一聊为什么会有微服务,它的优缺点是什么。

在微服务之前主要是单体应用,单体应用常见的就是一个war文件包含所有功能的应用程序包,每次迭代更新哪怕是更新一行代码都需要重新打包部署,同样每次迭代可能都要进行测试,模块与模块之间耦合度也比较高,导致可能需要对整个war包进行的测试,如果出现一个bug导致内存溢出,死循环,可能导致整个应用崩溃。二八原则在日常生活中普遍存在,在软件领域也一样,我们平时浏览网页一般读的多,写的少,例如逛博客园,我们可能浏览的比较多,提交数据的频率比较少,在单体应用中如果要增加浏览接口的部署,同样也会将提交数据的接口部署上去会造成资源浪费,单体应用往往使用统一的技术平台或方案解决所有的问题,开发语言和框架固定之后后续想引入新框架和技术也比较困难。

在单体应用中主要是面对单个应用的编程,而在微服务中主要是面对单个功能点的编程,将提供的功能点对外发布,这样其他地方可以不用关心具体用什么语言什么技术实现的,直接调用即可。而且每个功能点可以独立部署,是解耦的。假如某个接口调用增多,可以单独部署该接口应用,扩展性比较好。某个节点出现故障可以迅速让其他节点顶上,不至于整个应用不可用,容错性好,某个服务访问超出服务器承载时也可以进行限流,后续的CI、CD容器化也比较方便。同样有优点也有缺点,微服务会导致对外提供的接口增多,部署数量增多,服务治理带来新的挑战,A服务会调用B服务,B服务会调用C服务,如果A服务报错了,那是A服务导致的还是B、C服务导致的呢,而且对外提供服务的节点可能会有很多,那是哪个服务的哪个节点导致的呢?所以还需要微服务的链路追踪与排查。前面也提到微服务方便扩展,那什么情况下需要扩展,哪些服务节点需要扩展,这需要用数据说话,那就需要对服务进行监控,而且监控的参数指标和维度也是不一样的。

前面算是导语,下面切回正题,来学习服务注册与发现组件Eureka。每个站点都对外提供某些服务,有点类似家里赶集一样,有的卖家说卖衣服的,提供卖衣服的接口,有的卖家是卖拖拉机的,提供卖拖拉机的接口,每个卖家都是独立分散的,假如每个卖家都不在一个集市上,那买家可能需要先找到每个卖家住在什么地方,哪个村的叫什么名字,一般逛一家可能还没选到合适的,还要多逛几家,这样买家就要来回跑,那有了集市之后就不一样了,每个卖家都在集市上提供不同的服务,买家只要到固定的集市上找需要的服务即可,就和在没出现淘宝之前买东西需要到实体商店,有了淘宝之后只要输入淘宝网址就能找到不同商家提供的不同服务。Eureka就是有点类似淘宝的功能,它为服务提供者(卖家)提供了一个集中的平台,只要注册一下说明提供什么服务,服务消费者(买家)不用关心服务提供者在什么地方,直接调用就好了,是一个中心化的过程。

一、创建Eureka Server

1.引入依赖

SpringCloud使用Eureka也比较容易,创建SpringBoot项目时选中Eureka Server即可,它会在pom.xml中自动引入下面两个依赖,也可以自己添加。

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

2、启动代码中添加@EnableEurekaServer注解

package com.example.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@EnableEurekaServer@SpringBootApplicationpublic class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); }}

3、配置文件

在默认设置下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为,在application.properties添加以下配置:

spring.application.name=spring-cloud-eurekaeureka.client.register-with-eureka=falseeureka.client.fetch-registry=falseeureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/server.port=8088

eureka.client.register-with-eureka :表示是否将自己注册到Eureka Server,默认为true。

eureka.client.fetch-registry :表示是否从Eureka Server获取注册信息,默认为true。

eureka.client.serviceUrl.defaultZone :设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。默认是http://localhost:8761/eureka ;多个地址可使用 , 分隔。

4.启动应用

在浏览器输入http://localhost:8088/,即可看到下面页面,暂时还未有注册的实例。

76d6f9542f0a47e2995a94aaf036feb9

二、Eureka集群

这里使用两个节点来构建Eureka注册中心,首先添加两个配置文件application-peer1.properties、application-peer2.properties.分别启动了8000、8001端口。同时

eureka.client.serviceUrl.defaultZone为对方的地址。

application-peer1.properties:

spring.application.name=spring-cloud-eurekaserver.port=8000eureka.client.serviceUrl.defaultZone=http://localhost:8001/eureka/

application-peer2.properties:

spring.application.name=spring-cloud-eurekaserver.port=8001eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/

application.properties:

spring.application.name=spring-cloud-eurekaeureka.client.register-with-eureka=falseeureka.client.fetch-registry=false

将Eureka Server项目打包,mvn clean package,会生成EurekaServer-0.0.1-SNAPSHOT.jar包。

a83e49093278429885ada155c0908d24

在EurekaServer-0.0.1-SNAPSHOT.jar的目录下,分别执行下面两句命令,启动两个EurekaServer实例。

java -jar EurekaServer-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1java -jar EurekaServer-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2
5de7e48f1a234c5fb09fdd02a74a80fc

然后在浏览器中输入http://localhost:8001/和http://localhost:8000/就会发现你中有我我中有你。这里也都是参考纯洁的微笑大神的:http://www.ityouknow.com/springcloud/2017/05/10/springcloud-eureka.html。在里面介绍说注册中心会出现在available-replicas中,但我这边的测试并未在available-replicas中,看它的评论里也有一些也是未出现在available-replicas中,这个地方可能还要再留意一下。

7260ae946bb14f7abf4055c56f8ebb82
a4ff8358498c4dc9b06a5e4c4cfd97c2

三、创建Eureka Client

1、引入依赖

这里先创建个服务提供者,也就是生产者。在创建时选中Eureka Client,项目会自动引入下面的spring-cloud-starter-netflix-eureka-client依赖。由于要提供服务,所以这里又引入了spring-boot-starter-web。

 org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-starter-netflix-eureka-client 

2、启动代码中添加@EnableDiscoveryClient注解

与上面添加@EnableEurekaServer类似,这里添加@EnableDiscoveryClient注解。

3.配置文件

这里提供配置了eureka交互地址,这里为两个,将服务注册到eureka两个实例中。

spring.application.name=spring-cloud-producerserver.port=9000eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/,http://localhost:8001/eureka/

4.增加服务HelloController

package com.example.demo;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class HelloController { @RequestMapping("/hello") public String index(@RequestParam String name) { return "hello "+name+",this is first messge"; }}

5.启动应用就可在http://localhost:8000/和http://localhost:8001/中看到最近注册到Eureka的实例spring-cloud-producer。

50031238fa6e4f658452ae51bdf0396f
eb03cad7a81d472daf11c14354e8696c

四、小结

本篇主要了解了下什么是Eureka,它的作用,以及如何使用。主要学习Eureka服务端的配置和双节点配置,将Eureka client注册到Eureka server中,后续就是要学习如何调用生产者提供的服务了。

最后再推荐下我的新书<>,个人认为对与Spring初学者来说还是值得一读的,虽然之前也没有过Java的工作经验,写这本书的过程也是我二次复习巩固Spring的过程,我也是以初学者的角度来完成这本书的。本书目录在前面的博客中,可以点击查看。

作者:社会主义接班人 出处:http://www.cnblogs.com/5ishare/

本文版权归作者和博客园共有,未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如文中有误,欢迎指出。以免更多人被误导。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值