前言:

必需学会SpringBoot基础知识

简介:

spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单,可以在开发人员的电脑上跑。

工具:

JDK8

apache-maven-3.5.2

IntelliJ IDEA 2017.3 x64

文章 SpringCloud 教程 第一篇: 服务的注册与发现(Eureka) 介绍了服务注册与发现,其中服务注册中心Eureka Server,是一个实例,当成千上万个服务向它注册的时候,它的负载是非常高的,这在生产环境上是不太合适的,这篇文章主要介绍怎么将Eureka Server集群化。

一、准备工作

创建三个实例:

  1. eureka-server-peer1
  2. eureka-server-peer2
  3. eureka-server-peer3

二、Code.View

2.0 peer*
<?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.lwc</groupId><artifactId>eureka-server-peer1</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>eureka-server-peer1</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.10.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>Edgware.SR3</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>
2.1 peer1
package com.lwc;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;/*** @author Eddie*/
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerPeer1Application {public static void main(String[] args) {SpringApplication.run(EurekaServerPeer1Application.class, args);}
}
server:port: 8861
spring:application:name: eureka-server-peer1profiles:active: peer1
eureka:instance:hostname: eureka-server-peer1client:registerWithEureka: falsefetchRegistry: falseserviceUrl:defaultZone: http://eureka-server-peer2:8862/eureka/,http://eureka-server-peer3:8863/eureka/
2.2 peer2
package com.lwc;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;/*** @author Eddie*/
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerPeer2Application {public static void main(String[] args) {SpringApplication.run(EurekaServerPeer2Application.class, args);}
}
server:port: 8862
spring:application:name: eureka-server-peer2profiles:active: peer2
eureka:instance:hostname: eureka-server-peer2client:registerWithEureka: falsefetchRegistry: falseserviceUrl:defaultZone: http://eureka-server-peer2:8861/eureka/,http://eureka-server-peer3:8863/eureka/
2.3 peer3
package com.lwc;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;/*** @author Eddie*/
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerPeer3Application {public static void main(String[] args) {SpringApplication.run(EurekaServerPeer3Application.class, args);}
}
server:port: 8863
spring:application:name: eureka-server-peer3profiles:active: peer3
eureka:instance:hostname: eureka-server-peer3client:registerWithEureka: falsefetchRegistry: falseserviceUrl:defaultZone: http://eureka-server-peer2:8862/eureka/,http://eureka-server-peer3:8861/eureka/
2.4 改造 eureka-client
package com.lwc.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @author eddie.lee* @Package com.lwc.controller* @ClassName EurekaClientController* @description* @date created in 2018-03-26 17:19* @modified by*/
@RestController
@RequestMapping("/eureka")
public class EurekaClientController {@Autowiredprivate DiscoveryClient discoveryClient;@GetMapping("/client")public String home(@RequestParam String name) {List<Map<String, Object>> list = new ArrayList<>();Map<String, Object> map = new HashMap<>(16);List<String> stringList = discoveryClient.getServices();stringList.forEach(str -> {List<ServiceInstance> serviceInstances = discoveryClient.getInstances(str);serviceInstances.forEach(ins -> {map.put("host", ins.getHost());map.put("port", ins.getPort());map.put("serviceId", ins.getServiceId());map.put("uri", ins.getUri());list.add(map);});});String url = null;for (Map<String, Object> m : list) {for (String k : m.keySet()) {System.out.println(k + " : " + m.get(k));url = "欢迎点击:  "+m.get("uri") + "/eureka/client?name=" + name;}}return url;}}
eureka:client:serviceUrl:#defaultZone: http://localhost:8761/eureka/defaultZone: http://eureka-server-peer1:8861/eureka/
server:port: 8762

三、测试

启动:

访问: http://localhost:8861/

最后改造 client 是为了让大家学习一下获取信息,访问:  http://localhost:8762/eureka/client?name=eddie

欢迎点击: http://EDDIE-THINKPAD:8762/eureka/client?name=eddie

题外话:

也可以通过原来第一篇的项目结构, 修改配置文件的端口达到效果;

1. 通过Maven打包之后

2. CMD下运行:

java -jar eureka-server-0.0.1-SNAPSHOT.jar - -spring.profiles.active=peer1

java -jar eureka-server-0.0.1-SNAPSHOT.jar - -spring.profiles.active=peer2

3. 在运行:

java -jar eureka-client-0.0.1-SNAPSHOT.jar

技巧:

eureka.instance.preferIpAddress=true是通过设置ip让eureka让其他服务注册它。也许能通过去改变去通过改变host的方式。

原理:

peer1 8861,peer2 8862,peer2 8863 相互感应,当有服务注册时,两个Eureka-server是对等的,它们都存有相同的信息,这就是通过服务器的冗余来增加可靠性,当有一台服务器宕机了,服务并不会终止,因为另一台服务存有相同的数据。

三、源码下载

标签 10-1

https://github.com/eddie-code/SpringCloudDemo

转载于:https://www.cnblogs.com/EddieBlog/p/8783732.html

【SpringCloud】 第十篇: 高可用的服务注册中心相关推荐

  1. 史上最简单的SpringCloud教程 | 第十篇: 高可用的服务注册中心

    转自:https://blog.csdn.net/forezp/article/details/81041101 文章 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eu ...

  2. 史上最简单的SpringCloud教程 | 第十篇: 高可用的服务注册中心(Finchley版本)

    转载请标明出处: http://blog.csdn.net/forezp/article/details/81041101 本文出自方志朋的博客 个人博客纯净版:https://www.fangzhi ...

  3. 第十篇: 高可用的服务注册中心(Finchley版本)V2.0_dev

    一.准备工作 Eureka通过运行多个实例,使其更具有高可用性.事实上,这是它默认的熟性,你需要做的就是给对等的实例一个合法的关联serviceurl. 二.创建eureka-server 引入依赖 ...

  4. java版b2b2c社交电商spring cloud分布式微服务(十)高可用的服务注册中心

    电子商务社交平台源码请加企鹅求求:一零三八七七四六二六.文章 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka) 介绍了服务注册与发现,其中服务注册中心Eure ...

  5. Spring Cloud第十篇:高可用的服务注册中心

    文章 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka) 介绍了服务注册与发现,其中服务注册中心Eureka Server,是一个实例,当成千上万个服务向它注册 ...

  6. springcloud 高可用的服务注册中心

    https://blog.csdn.net/forezp/article/details/81041101 上面是方老师的博客,看liuyan也有好多同学不是很清楚,这里自己也记录一下具体的做法. 1 ...

  7. 史上最简单的SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)(Finchley版本)

    转载请标明出处: http://blog.csdn.net/forezp/article/details/81041045 本文出自方志朋的博客 个人博客纯净版:https://www.fangzhi ...

  8. 史上最简单的SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)

    转:https://blog.csdn.net/forezp/article/details/70037513 上一篇文章讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当 ...

  9. Spring Cloud(十)高可用的分布式配置中心 Spring Cloud Config 中使用 Refresh

    上一篇文章讲了SpringCloudConfig 集成Git仓库,配和 Eureka 注册中心一起使用,但是我们会发现,修改了Git仓库的配置后,需要重启服务,才可以得到最新的配置,这一篇我们尝试使用 ...

最新文章

  1. 用LIBSVM做回归和预测
  2. Web框架之Django篇
  3. 计算机专业跨专业考文科,给07年想跨专业考湖大计算机专业的同学
  4. 中小型研发团队架构落地实践18篇,含案例、代码
  5. 如何走出创新者的窘境?走向2049
  6. linux玩游戏无声音,Linux下LumaQQ 无声音的解决方法与播放电影
  7. 求证:拉皮手术费多少钱,拉皮手术后会有哪些后遗症,原来如此
  8. QEMU仿真aarch64处理器运行Linux kernel
  9. 如何写出一份让面试官刮目相看的高质量简历
  10. Android GMS认证总结01
  11. C语言求2/1,-3/2,5/3,-8/5...前十项之和
  12. 电视剧《勇敢的心》观后感
  13. HDUOJ 1847 Good Luck in CET-4 Everybody!(尼姆博奕)
  14. 【数学建模】常见的数学建模比赛汇总(参考资料)
  15. C++实现的BP神经网络(代码与详解)
  16. python经典程序练习题6:健康食谱的输出。列出5种不同的食材,输出两两之间可能的组合形式
  17. 怎么把文字转换成语音?教你几个方法,超级简单
  18. Android SD卡多级目录的创建
  19. ArcGIS基础:获取栅格数据边界的线要素和独立格网面
  20. linux sd卡 速度测试,你的sd卡到底有多快? 256G SD 卡实际速度测试

热门文章

  1. 导入 kotlin(7)
  2. 微软发布的两个MSF过程指导(Process Guidance)
  3. java 试题 历届试题 单词分析 题解
  4. python数据可视化代码_Python实现简单的数据可视化
  5. 安卓安装包不能覆盖原安装包_LOL手游全网最简单注册,安装教程,安卓 IOS皆可登录!攻略群有游戏安装包!...
  6. C语言函数在硬件中的执行原理
  7. (53)多路时钟复用FPGA如何约束二(片内时钟复用约束)
  8. (71)Verilog HDL时间度量系统函数:$time
  9. (27)System Verilog设计UART接收
  10. FPGA设计思想与技巧