在找.net core 微服务框架时发现了Steeltoe开源项目,它可以基于Spring Cloud实现.net core和.net  Framework的微服务。正好之前也有学习过SpringBoot,而Spring Cloud是基于SpringBoot的,有了SpringBoot基础上手入门SpringCloud应该也不难,正好我的第一本书<<Spring快速入门>>即将上架,感兴趣的朋友可以多多支持。本篇主要学习服务注册与发现组件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中自动引入下面两个依赖,也可以自己添加。

    <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

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
@SpringBootApplication
public class EurekaServerApplication { public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
} }

3、配置文件

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

spring.application.name=spring-cloud-eureka
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.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/,即可看到下面页面,暂时还未有注册的实例。

二、Eureka集群

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

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

application-peer1.properties:

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

application-peer2.properties:

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

application.properties:

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

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

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

java -jar EurekaServer-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1
java -jar EurekaServer-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2

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

三、创建Eureka Client

1、引入依赖

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

        <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

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

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

3.配置文件

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

spring.application.name=spring-cloud-producer
server.port=9000
eureka.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; @RestController
public 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。

四、小结

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

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

微服务SpringCloud之服务注册与发现的更多相关文章

  1. 【spring cloud】一个ms微服务想要给注册中心eureka发现,需要满足这些条件,微服务不能被eureka注册中心发现的解决方案

    在spring cloud中,一个新的微服务想要被注册中心发现,需要注意几个地方: 1.pom.xml文件依赖中需要有这个依赖 spring boot 2.x 需要这个依赖 <dependenc ...

  2. 微服务SpringCloud之服务网关zuul一

    前面学习了Eureka.Feign.Hystrix.Config,本篇来学习下API网关zuul.在微服务架构中,后端服务往往不直接开放给调用端,而是通过一个API网关根据请求的url,路由到相应的服 ...

  3. 微服务SpringCloud之服务调用与负载均衡

    上一篇我们学习了服务的注册与发现,本篇博客是在上一篇的基础上学习服务的调用.上一博客主要创建了Eureka的服务端和一个Client,该Client包含了一个Controller用来提供对外服务供外部 ...

  4. Spring-Cloud之Eureka注册与发现-2

    一.Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的.SpringCloud将它集成在其 ...

  5. 微服务——SpringCloud(Eureka注册中心搭建)

    IDE:IDEA,说实话,真不怎么喜欢用Eclipse这个IDE,太锻炼人了 配置模式:Grandle 微服务框架:SpringCloud 第一步 创建一个Spring Initializr项目 第二 ...

  6. 微服务SpringCloud之服务网关zuul二

    Zuul的核心 Filter是Zuul的核心,用来实现对外服务的控制.Filter的生命周期有4个,分别是“PRE”.“ROUTING”.“POST”.“ERROR”,整个生命周期可以用下图来表示. ...

  7. Consul之:服务注册与发现

    一.服务的管理(注册与发现)有三种方式: 1:通过配置文件的方式静态注册2:通过HTTP API接口来动态注册(spring cloud使用方式,spring cloud中使用的是consul api ...

  8. 微服务框架SpringCloud(Dalston版)学习 (一):Eureka服务注册与发现

    eureka-server eureka服务端,提供服务的注册与发现,类似于zookeeper 新建spring-boot工程,pom依赖: <dependency> <groupI ...

  9. SpringCloud微服务(01):Eureka组件,管理服务注册与发现

    本文源码:GitHub·点这里 || GitEE·点这里 一.Eureka基本架构 1.Eureka简介 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,SpringCl ...

随机推荐

  1. Android中WebView的相关使用

    近期做的项目中,遇到个非常棘手的问题: 客户给我的数据是有限制的,因此,在返回某条详细页面内容的时候,他仅仅能给我一个html片段,里面包括 文字,图片以及附件的下载地址.假设网页模版规范的爱比較好说 ...

  2. SQL语句中使用Group by

    参考经典文章:https://blog.csdn.net/liu_shi_jun/article/details/51329472 1.group by 分组 ,每一组数据只有一行,如果group b ...

  3. ISO/IEC 27001 信息安全管理体系认证

    一. 信息安全管理体系标准业务介绍 1. 背景介绍 信息作为组织的重要资产,需要得到妥善保护.但随着信息技术的高速发展,特别是Internet的问世及网上交易的启用,许多信息安全的问题也纷纷出现:系统 ...

  4. WPF 实现波浪浮动效果

    原文:WPF 实现波浪浮动效果 目标:实现界面图标Load时,整体图标出现上下波浪浮动效果,如下图: 前台代码: <Windowxmlns="http://schemas.micros ...

  5. c# 守护进程,WPF程序自守护

    原文:c# 守护进程,WPF程序自守护 版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/lwwl12/article/details/79035246 如何 ...

  6. 解决popup不随着window一起移动的问题

    原文:解决popup不随着window一起移动的问题 当我们设置Popup的StayOpen="True"时,会发现移动窗体或者改变窗体的Size的时候,Popup并不会跟随着一起 ...

  7. 在Keystone V3基础上改进的分布式认证体系

    目标 使用java实现keystone v3相关功能与概念: api client authentication service discovery distributed multi-tenant ...

  8. js css加时间戳

    为了强制更新文件,取消浏览器缓存 <link rel="stylesheet" href="~/XXX.css?time='+new Date().getTime( ...

  9. XF 定制图片

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  10. DELPHI下多线程编程的几个思维误区(QDAC)

    有几个网友私下问我一些有关线程的事情.过节写个东西上来大家交流. 思维误区1,自己新建的THREAD是线程,自己的主程序不是线程. 很多人在多线程编程没有把主线程也当作线程.其实主线程也是线程.看起来 ...