一、Spring Cloud简介

Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式环境中运行良好,包括开发人员自己的笔记本电脑,裸机数据中心,以及Cloud Foundry等托管平台。

二、服务注册发现

微服务架构中,服务随着业务的增长也会越来越多,如果还使用ip方式调用服务,那简直就是一个无底洞,所以服务的注册在微服务中是一个重要的原则和可扩展能力之一。今天我学习的Spring Cloud支持种服务注册与发现的实现,比如Eureka、Consul、Zookeeper等,但是整合最好的还是Eureka,所以首先进行Eureka的学习。

服务注册发现的基本流程是用一个中心化的组件完成对各个服务的整合,即将分散于各处的服务进行汇总,汇总的信息可以是提供服务的组件名称、地址、数量等,每个组件拥有一个监听设备,当本组件内的某个服务的状态变化时报告至中心化的组件进行状态的更新。服务的调用方在请求某项服务时首先到中心化组件获取可提供该项服务的组件信息(IP、端口等),通过默认或自定义的策略选择该服务的某一提供者进行访问,实现服务的调用。

三、创建Eureka Server项目

Spring Cloud中的项目都是以Spring Boot为基础的,所以大家最好先去熟悉一下Spring Boot框架,当然,Spring Boot框架是很容易入门的,不得不对Spring项目团队五体投体啊。

我的学习项目使用的是maven,所以首先创建一个简单的maven项目,修改pom,引入Spring Cloud和Eureka依赖,我的pom.xml内容如下。

<?xml version="1.0" encoding="UTF-8"?>
<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><groupId>com.nan</groupId><artifactId>eurekaserver</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>eurekaserver</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.6.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Dalston.SR2</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

很简单,其实就是一个Spring Boot项目,只不过整合了Spring Cloud和Eureka而已。

由于大部分功能,Spring Cloud Eureka项目已经帮我们实现了,所以我们只需写个项目启动入口代码就好啦。

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

接下来是比较重要的配置,Spring Boot项目我习惯用YAML配置,所以我的配置文件内容是。

spring:profiles:active: node01
---
spring:profiles: node01
server:port: 8081
eureka:instance:hostname: localhostclient:register-with-eureka: falsefetch-registry: falseservice-url:defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

为什么会有多环境呢?没错,这是Eureka server高可用的配置方式,不过目前我们暂时只启动一个server节点,后面会讲到高可用的配置。eureka.instance.hostname是server域名,用于eureka客户端或其他eureka server节点,也是我们访问eureka web ui的域名,register-with-eureka是指注册服务到eureka,fetch-register是指拉取eureka注册的服务,由于我们部署的是单机eureka server,所以这2个都false就好了,server-url.defaultZone是默认的url中心地址,用的就是我们之前配置的hostname和port,再加上eureka这个path。

然后浏览器输入 http://localhost:8081/,就会看到如下界面。

可以看到,没有服务实例注册到上面。

四、编写服务注册到Eureka中

Eureka server既然准备好了,现在我们就编写一个servie注册到eureka中。此项目的依赖与Eureka server项目一致,如下。

<?xml version="1.0" encoding="UTF-8"?>
<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><groupId>com.nan</groupId><artifactId>service-hello</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>service-hello</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.6.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Dalston.SR2</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

项目启动入口文件是有区别的,如下。

package com.nan.servicehello;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication
@EnableEurekaClient
public class ServiceHelloApplication {public static void main(String[] args) {SpringApplication.run(ServiceHelloApplication.class, args);}
}

可以看到服务提供项目使用的是Eureka client。然后实现一个rest接口。

package com.nan.servicehello.controller;import org.springframework.beans.factory.annotation.Value;
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 {@Value("${server.port}")private String serverPort;@RequestMapping("/hello")public String hello(@RequestParam String name) {return "Hello " + name + ", this service port is " + serverPort;}}

然后是关键的配置文件。

spring:profiles:active: hello01application:name: HelloService
---
spring:profiles: hello01
server:port: 9091
eureka:client:service-url:defaultZone: http://localhost:8081/eureka/

区别很明显,client的service-url就是刚刚Eureka server的地址。然后启动service hello项目,再去访问http://localhost:8081/。

可以看到,service已经注册到Eureka server了。

5、Eureka server高可用配置

Eureka既然能作为服务注册中心,当然是可以高可用配置的,其实原理很简单,多启动几个服务端,每个服务端都能注册和发现其他服务端,主要和单机不同的就是yaml配置文件了。

---
spring:profiles: node01
server:port: 8081
eureka:instance:hostname: node01client:service-url:defaultZone: http://node02:8082/eureka/
---
spring:profiles: node02
server:port: 8082
eureka:instance:hostname: node02client:service-url:defaultZone: http://node01:8081/eureka/

记得电脑host要增加 127.0.0.1 node01 node02。

客户端呢,service-url就是http://node01:8081/eureka/,http://node02:8082/eureka,客户端会将服务注册到第一台server上,当停止第一台server后,服务会注册到第二台上。

以上就是笔者目前所学,还是很初级的内容,如果有什么错误和遗漏,还请见谅并指正,不胜感激。

Spring Cloud学习系列第一章:Eureka之服务注册与发现相关推荐

  1. python eureka服务发现_Spring Cloud版——电影售票系统—Eureka微服务注册与发现

    一.服务提供者与服务消费者 使用微服务构建的是分布式系统,微服务之间通过网络进行通信.我们使用服务提供者与服务消费者来描述微服务之间的调用关系. 名称 定义 服务提供者 服务的被调用方(为其他服务提供 ...

  2. Spring Cloud Alibaba系列使用(二)----Nacos注册中心

    1|1Spring Cloud Alibaba 介绍 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spri ...

  3. Spring Cloud Alibaba教程:使用Nacos作为服务注册中心

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 什么是Nacos? Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易 ...

  4. 未发现oracle(tm)客户端和网络组件_SpringColud Eureka的服务注册与发现

    一.Eureka简介 本文中所有代码都会上传到git上,请放心浏览 项目git地址:https://github.com/839022478/Spring-Cloud 在传统应用中,组件之间的调用,通 ...

  5. SpringColud Eureka的服务注册与发现

    一.Eureka简介 本文中所有代码都会上传到git上,请放心浏览 项目git地址:https://github.com/839022478/Spring-Cloud 在传统应用中,组件之间的调用,通 ...

  6. Spring Cloud学习系列第六篇【分布式配置中心】

    今天来学习如何使用Spring Cloud Config在微服务中搭建一个分布式配置中心,使用了分布式配置中心之后,我们就可以通过它来管理应用资源与业务资源配置内容.Spring Cloud Conf ...

  7. Spring Cloud【Finchley】-03将微服务注册到Eureka Server上 + 为Eureka Server添加用户认证

    文章目录 概述 将用户微服务micorservice-provider-user注册到Eureka Server上 pom中增加 spring-cloud-starter-netflix-eureka ...

  8. SpringBoot 2 使用 SpringCloud Netflix Eureka 实现服务注册与发现

    开篇词 该指南将引导你启动和使用 Netflix Euraka 服务注册表. 你将创建的应用 我们将搭建 Netflix Eureka 服务注册表,然后构建一个客户端,该客户端将同时在注册表中注册并使 ...

  9. Eureka实现服务注册与发现,服务续约

    介绍 Eureka 目前是 2.x 版本,并且官方已经宣布不再维护更新.不过其实 Eureka 已经很稳定了,当做注册中心完全没有问题.Spring Cloud 集成了 Eureka ,并做了完善的封 ...

最新文章

  1. 提取某一个镇的行政边界_池店镇消防安全违法典型案例通报(一)
  2. 35 岁前程序员要规划好的四件事(转载)
  3. easypoi导出excel不设置样式_EasyExcel为单个Cell设置样式
  4. VBox虚拟机仅主机模式时,出现connetct:Network is unreachable,解决方法
  5. 遗传算法在JobShop中的应用研究(part1: 绪论)
  6. 【Android学习】自定义Android样式checkbox
  7. pandas 取excel 中的某一列_Excel快速分表(xlwings+pandas)
  8. 没有计算机的一天英语作文带翻译,初一英语作文我的一天带翻译
  9. Java操作Oracle
  10. 后端用的nodejs怎么打包_你怎么也想象不到,平板玻璃、玻璃瓶这些竟可以用PET塑钢带打包!...
  11. js打印服务器文件,用Electron / Node.js编写的打印服务器
  12. windows 的使用 —— 注册表(软件的安装和卸载)
  13. BIOS中的内存测试memtest
  14. iperf 服务端发送数据_iperf使用指南
  15. Spark入门基本操作
  16. win11改win10重装系统教程图解
  17. 网页浏览flash时不停黑屏
  18. 【LEACH协议】基于matlab实现无线传感器网络LEACH与DEEC协议
  19. linux安装软件之./configure、make、make install 命令含义
  20. 18966 两两配对差值最小

热门文章

  1. 腾讯微服务框架-MSEC-部署 - 首个hello word服务
  2. 【爱贝观察】无现金支付,美国排第一,中国排第几呢?
  3. 链路分析(Link analysis)
  4. ubuntu中的apt终端命令解析
  5. 3主3从redis集群扩缩容配置案例说明
  6. 银行卡在哪个银行都能取款吗?
  7. SU10批量处理用户
  8. 计算机网络-概述篇(上)
  9. 命令行查看笔记本电脑电池使用状态
  10. 面试官:Zookeeper怎么解决读写、双写并发不一致问题,以及共享锁的实现原理?