微服务SpringCloud之服务注册与发现

在找.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的过程,我也是以初学者的角度来完成这本书的。本书目录在前面的博客中,可以点击查看

原文地址:https://www.cnblogs.com/5ishare/p/11111621.html

时间: 2024-11-07 10:31:40

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

微服务SpringCloud之服务网关zuul一

前面学习了Eureka.Feign.Hystrix.Config,本篇来学习下API网关zuul.在微服务架构中,后端服务往往不直接开放给调用端,而是通过一个API网关根据请求的url,路由到相应的服务.当添加API网关后,在第三方调用端和服务提供方之间就创建了一面墙,这面墙直接与调用方通信进行权限控制,后将请求均衡分发给后台服务端. 为什么需要API Gateway 1.简化客户端调用复杂度 在微服务架构模式下后端服务的实例数一般是动态的,对于客户端而言很难发现动态改变的服务实例的访问地址信息

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

上一篇我们学习了服务的注册与发现,本篇博客是在上一篇的基础上学习服务的调用.上一博客主要创建了Eureka的服务端和一个Client,该Client包含了一个Controller用来提供对外服务供外部调用,可以作为生产者. 一.引入依赖 前面创建了EurekaClient的项目,在项目中引入了spring-cloud-starter-netflix-eureka-client用来注册服务,是生产者,这里调用属于消费者,同样也需要引入spring-cloud-starter-netflix-eur

springcloud微服务系列之服务注册与发现组件Eureka

一.Eurake的简介二.使用Eureka进行服务的注册消费1.创建一个服务注册中心2.创建服务的提供者3.创建服务的消费者总结 一.Eurake的简介 今天我们来介绍下springcloud的核心组件Eureka,Eurake是负责微服务架构中服务治理的功能,负责各个服务实例的注册与发现. Eureka包含了服务器端和客户端组件.服务器端,也被称作是服务注册中心,用于提供服务的注册与发现. 客户端组件包含服务消费者与服务生产者.在应用程序运行时,服务生产者向注册中心注册自己的服务实例,当消费者

024.微服务之服务注册与发现(基于kubernetes / SpringCloud)

微服务 微服务是一种架构模式,一种分布式的架构风格. 顾名思义,micro service,将一个庞大的单体应用拆分成若干个“微小”的服务,服务间通过进程通讯完成原本在单体应用中的调用. 其中必要的六个基本技术为: 1.服务注册与发现: 2.进程间通信: 3.负载均衡: 4.分布式配置中心: 5.熔断器: 6.网关路由. 基于k8s.springcloud的服务注册与发现对比 k8s并没有引入新的注册中心,使用的就是k8s的kube-dns. k8s将Service的名称当做域名注册到kube-

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

一.Eureka基本架构 1.Eureka角色结构图 角色职责如下: 1).Register:服务注册中心,它是一个Eureka Server ,提供服务注册和发现功能. 2).Provider:服务提供者,它是一个Eureka Client ,提供服务. 3).Consumer:服务消费者,它是一个Eureka Cient ,消费服务. 2.Eureka中几个核心概念 1).Registe服务注册 当Client向Server 注册时,Client 提供自身的元数据,比如IP 地址.端口.运行

springCloud(3):微服务的注册与发现(Eureka)

一.简介 服务消费者需要一个强大的服务发现机制,服务消费者使用这种机制获取服务提供者的网络信息.即使服务提供者的信息发生变化,服务消费者也无须修改配置. 服务提供者.服务消费者.服务发现组件三者之间的关系大致如下: 1.各个微服务在启动时,将自己的网络地址等信息注册到服务发现组件中,服务发现组件会存储这些信息. 2.服务消费者可以从服务发现组件查询服务提供者的网络地址,并使用该地址调用服务提供者的接口. 3.各个微服务与服务发现组件使用一定机制(如:心跳)通信,服务发现组件如长时间无法与某微服务

SpringCloud微服务云架构构建B2B2C电子商务平台之-服务的注册与发现Eureka

创建服务注册中心在这里,我还是采用Eureka作为服务注册与发现的组件,至于Consul 之后会出文章详细介绍. 2.1 首先创建一个maven主工程. 首先创建一个主Maven工程,在其pom文件引入依赖,spring Boot版本为2.0.3.RELEASE,Spring Cloud版本为Finchley.RELEASE.这个pom文件作为父pom文件,起到依赖版本控制的作用,其他module工程继承该pom.这一系列文章全部采用这种模式,其他文章的pom跟这个pom一样.再次说明一下,以后

SpringCloud构建微服务 | 服务注册与发现(一)提供Demo

Eureka介绍: Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的. SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能. Eureka包含两个组件:Eureka Server和Eureka Client. Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,

微服务:实现服务发现与服务注册

一.服务发现的方式: 1.客户端发现:Eureka.ZooKeeper(存在缺陷)原因:http://blog.csdn.net/whereismatrix/article/details/53305045 2.服务端发现:consul+nginx 描述:Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的.SpringCloud将它集成在其子项目spring-cloud-netflix中