• 概述
     最近研究了一下springCloud的微服务集群,主要用到了SpringCloud的服务发现和服务器端负载均衡,所有的项目都是用的springboot,
    可以和springCloud无缝对接。
  • 技术选型

    服务发现:eureka
    负载均衡:zuul
  • 实现
    Eureka集群(eurekaServer):8001、8002、8003
    服务提供方(eurekaClient):9001、9002
    服务端负载均衡服务:9100

    1、新建工程eureka服务器,用idea创建springboot项目,引入eureka依赖

    下面是三台服务器的配置文件

    //第一台
    server:
    port: 8001 spring:
    application:
    name: eureka-server eureka:
    server:
    use-read-only-response-cache: false #禁用readOnlyMap,分为ReadWriteMap和ReadOnlyMap
    eviction-interval-timer-in-ms: 3000 #主动失效检测时间
    instance:
    hostname: server8001
    client:
    # register-with-eureka: false #false表示不将自己也作为服务注册到eureka
    # fetch-registry: false
    service-url:
    #集群设置,搭建eureka集群,用逗号分隔
    defaultZone: http://localhost:8002/eureka/,http://localhost:8003/eureka/ //第二台
    server:
    port: 8002 spring:
    application:
    name: eureka-server eureka:
    server:
    use-read-only-response-cache: false
    eviction-interval-timer-in-ms: 3000
    instance:
    hostname: server8002
    client:
    # register-with-eureka: false #表示不将自己作为服务注册进eureka
    # fetch-registry: false
    service-url:
    #集群设置,搭建eureka集群,用逗号分隔,defaultZone是map类型,所以没有提示
    defaultZone: http://localhost:8001/eureka/,http://localhost:8003/eureka/ //第三台
    server:
    port: 8003 spring:
    application:
    name: eureka-server eureka:
    server:
    use-read-only-response-cache: false
    eviction-interval-timer-in-ms: 3000
    instance:
    hostname: server8003
    client:
    # register-with-eureka: false #表示不将自己作为服务注册进eureka
    # fetch-registry: false
    service-url:
    #集群设置,搭建eureka集群,用逗号分隔,defaultZone是map类型,所以没有提示
    defaultZone: http://localhost:8001/eureka/,http://localhost:8002/eureka/

    在入口处加上EnableEurekaServer注解

    2、服务提供者

    //第一台
    server:
    port: 9001 spring:
    application:
    name: eureka-client eureka:
    client:
    service-url:
    # 指定集群服务器列表
    defaultZone: http://localhost:8001/eureka/,http://localhost:8002/eureka/,http://localhost:8003/eureka/
    instance:
    instance-id: client9001.com
    prefer-ip-address: true
    lease-renewal-interval-in-seconds: 5 #发送心跳包服务刷新时间
    lease-expiration-duration-in-seconds: 15 #服务过期时间 //第二台
    server:
    port: 9002
    spring:
    application:
    name: eureka-client eureka:
    client:
    service-url:
    # 指定集群服务器列表
    defaultZone: http://localhost:8001/eureka/
    instance:
    instance-id: client9002.com
    prefer-ip-address: true
    lease-renewal-interval-in-seconds: 5 #发送心跳包服务刷新时间
    lease-expiration-duration-in-seconds: 15 #服务过期时间

    添加EnableEurekaClient注解,并添加api业务测试接口

    3、zuul负载均衡服务

    server:
    port: 9100 spring:
    application:
    name: zuul-gateway eureka:
    client:
    service-url:
    defaultZone: http://localhost:8001/eureka,http://localhost:8002/eureka,http://localhost:8003/eureka
    registry-fetch-interval-seconds: 5 #拉取服务列表时间
    instance:
    instance-id: gateway-9100.com
    prefer-ip-address: true zuul:
    prefix: /gateway
    ignored-services: eureka-client
    routes:
    eureka-client.serviceId: eureka-client
    eureka-client.path: /client/**

    依次启动Eureka服务器、服务提供者client,zull服务,访问其中一台Eureka服务器的控制台显示如下

    问题:
    1)、在配置eureka时,defaultZone是个map类型,不提供检测,所以会发现在配置时没有提示,直接写就行;
    2)、eurekaServer的hostname起的作用暂不明确,在控制台显示的都是application的name,三台eureka集群和两台服务提供客户端的application.name分别是一样的;
    3)、eureka服务器的服务清单分为ReadWriteMap和ReadOnlyMap,其他服务读取时是从ReadOnlyMap读取的,当有服务注册时,写入的是ReadWriteMap,然后会同步到
    ReadOnlyMap,这是为了解决读写锁的问题。当一台服务提供应用宕机之后会发现控制台还是有这台服务器的信息,表示没有将服务下线,服务清单列表没有删除这台
    服务器的信息,导致zuul在负载均衡时,有时会调用到宕机的那台应用导致返回异常,解决方法是禁用掉eureka服务器的ReadOnlyMap,设置主动失效检测时间,让服务器定时
    去检测服务,服务提供者设置服务失效时间和发送心跳包的时间,zuul设置拉取服务清单的时间间隔
    4)、zuul路由设置,设置路径前缀和服务的匹配关系

  • 测试

    不停刷新页面,会在9001和9002之间切换,证明配置成功,关闭9002应用,刷新页面,刚开始还会出现访问失败,过了一段时间后就稳定了,
    会有一个时间差,也可以给zuul配置熔断器来进行服务降级或者转发请求到其他正常服务。

springCloud搭建微服务集群+Zuul服务器端负载均衡的更多相关文章

  1. Spring Cloud(Dalston.SR5)--Zuul 网关-微服务集群

    通过 url 映射的方式来实现 zuul 的转发有局限性,比如每增加一个服务就需要配置一条内容,另外后端的服务如果是动态来提供,就不能采用这种方案来配置了.实际上在实现微服务架构时,服务名与服务实例地 ...

  2. Eclipse启动SpringCloud微服务集群的方法

    1.说明 下面这篇文章介绍了Eureka Server集群的启动方法, SpringCloud创建Eureka模块集群 是通过jar包启动时指定配置文件的方式实现的. 现在只有Eureka Serve ...

  3. Spring Cloud Turbine微服务集群实时监控

    本文代码下载地址: https://gitlab.com/mySpringCloud/turbine SpringBoot版本:1.5.9.RELEASE (稳定版) SpringCloud版本:Ed ...

  4. 一个C#开发者学习SpringCloud搭建微服务的心路历程

    前言 Spring Cloud很火,很多文章都有介绍如何使用,但对于我这种初学者,我需要从创建项目开始学起,所以这些文章对于我的启蒙,帮助不大,所以只好自己写一篇文章,用于备忘. SpringClou ...

  5. Dubbo工作原理,集群容错,负载均衡

    Remoting:网络通信框架,实现了sync-over-async和request-response消息机制. RPC:一个远程过程调用的抽象,支持负载均衡.容灾和集群功能. Registry:服务 ...

  6. 4.Dubbo2.5.3集群容错和负载均衡

    转载请出自出处:http://www.cnblogs.com/hd3013779515/ 1.集群容错和负载均衡原理 各节点关系: 这里的Invoker是Provider的一个可调用Service的抽 ...

  7. Dubbo之旅--集群容错和负载均衡

    当我们的系统中用到Dubbo的集群环境,由于各种原因在集群调用失败时,Dubbo提供了多种容错方案,缺省为failover重试. Dubbo的集群容错在这里想说说他是由于我们实际的项目中出现了此类的问 ...

  8. ASP.NET Core使用Docker-Swarm集群部署实现负载均衡实战演练

    一.需求背景 人生苦短,我用.NET Core!阿笨对Docker是这样评价的:Docker在手,环境我有!Docker出手,集群我有!前面的Doc基础课程我们学习了如何使用Docker来部署搭建单机 ...

  9. Openfire 集群部署和负载均衡方案

    Openfire 集群部署和负载均衡方案 一.   概述 Openfire是在即时通讯中广泛使用的XMPP协议通讯服务器,本方案采用Openfire的Hazelcast插件进行集群部署,采用Hapro ...

随机推荐

  1. hisi mmz模块驱动讲解

    一.概述 如图所示,在海思平台上将内存分为两个部分:os内存和mmz内存.os内存指:由linux操作系统管理的内存:mmz内存:由mmz驱动模块进行管理供媒体业务单独使用的内存,在驱动加载时可以指定 ...

  2. emacs bookmark(书签)初次使用

    emacs bookmark(书签)初次使用 编辑或者查看多个文件的时候,要想记住刚才在什么地方进行编辑,是很难的.所以emacs的bookmark功能就登场了.你可以在文件的任何地方设置一个书签,然 ...

  3. C语言中函数返回字符串的4中方法

    C语言中函数返回字符串的4中方法 函数的构成部分:返回类型.函数名称.参数.函数主体 参数:函数调用时传入的参数称为实参,函数定义时出现的参数为形参 形参的作用在于接收实参传入的值,形参和函数内部的其 ...

  4. 谷歌浏览器安装JsonView插件

    可方便阅读json格式文件,参考https://www.jianshu.com/p/6ea9f2245f4d

  5. c# WF 第3节 窗体的属性

    本节内容: 1:如何找到窗口属性 2:窗口属性 1:如何找到窗口属性 2:窗口属性

  6. python爬虫之深度爬取实例

    写了一个之前没完成的项目,代码优化不够,速度有点慢,应该也有错误的地方,望大佬看了之后能给点建议......... 这是开始的url,先看一下它的网页结构:http://www.cymodel.net ...

  7. 鲜贝7.3--mysql安装

    1.安装包下载 首先是下载 mysql-installer-community-5.6.14.0.msi ,大家可以到 mysql 官方网去下载. win10的安全机制比较严格,安装前最好到<设 ...

  8. 树莓派开机主动发送自己的局域网ip/外网ip到你的微信

    开机时,树莓派主动发送自己的内网ip以及公网ip到你的微信上,这样就能方便地使用ssh或VNC. 操作步骤 下载目录下的 boot_getIP_send_Wechat.py 到你的 Raspberry ...

  9. Class的使用,构造方法,实例属性和实例方法,静态属性和静态方法,this和super关键字,类的继承

    s6新增了一种定义对象实例的方法,Class(类)这个概念,作为对象的模板.class可以看作只是一个语法糖,通过class关键字,可以定义类.让对象原型的写法更加清晰.更像面向对象编程的语法. 一. ...

  10. Java 发红包

    使用Java实现发红包的功能. 结构: package redPocket User.java Manager.java Member.java Demo.java 思路: Manager和Membe ...