搭建项目
创建一个父工程microservie-learning
,以及两个子工程microservice-netflix-eureka-server
和microservice-netflix-eureka-client
,这两个子工程分别对应的是 Eureka Server 和 Eureka Client。
创建一个父工程microservie-learning
,以及两个子工程microservice-netflix-eureka-server
和microservice-netflix-eureka-client
,这两个子工程分别对应的是 Eureka Server 和 Eureka Client。
Eureka 是支持服务集群的,它与 Zookeeper 集群不一样,Eureka 集群是去中心化的,是没有主节点和从节点之分的,每一个 Eureka Server 都是独立开的,每一个 Eureka Server 是通过配置去发现其他 Eureka Server 的,包括 Eureka Client 也是需要通过配置才能知道往哪里注册。
这里创建了三个 Eureka Server,分别是 microservice-netflix-eureka-cluster-server-01
、microservice-netflix-eureka-cluster-server-02
、microservice-netflix-eureka-cluster-server-03
,两个 Eureka Client microservice-netflix-eureka-client
和 microservice-provider-01
。
Eureka 是基于 REST(代表性状态转移)的服务,主要在 AWS 云中用于定位服务,以实现负载均衡和中间层服务器的故障转移。我们称此服务为 Eureka 服务器。Eureka 还带有一个基于 Java 的客户端组件 Eureka Client,它使得客户端与 Eureka 服务器交互变得更加容易。客户端还具有一个内置的负载均衡器,还可以执行基本的循环负载均衡。在 Netflix,使用了更复杂的负载均衡器将 Eureka 进行包装,以实现基于流量、资源使用、错误条件等多种因素提供加权负载均衡,提供更为出色的弹性。
Eureka 作为一款服务发现框架,他是如何去发现服务的呢?
hystrix:
command: #用于控制HystrixCommand的行为
default:
execution:
isolation:
strategy: THREAD #控制HystrixCommand的隔离策略,THREAD->线程池隔离策略(默认),SEMAPHORE->信号量隔离策略
thread:
timeoutInMilliseconds: 1000 #配置HystrixCommand执行的超时时间,执行超过该时间会进行服务降级处理
interruptOnTimeout: true #配置HystrixCommand执行超时的时候是否要中断
interruptOnCancel: true #配置HystrixCommand执行被取消的时候是否要中断
timeout:
enabled: true #配置HystrixCommand的执行是否启用超时时间
semaphore:
maxConcurrentRequests: 10 #当使用信号量隔离策略时,用来控制并发量的大小,超过该并发量的请求会被拒绝
fallback:
enabled: true #用于控制是否启用服务降级
circuitBreaker: #用于控制HystrixCircuitBreaker的行为
enabled: true #用于控制断路器是否跟踪健康状况以及熔断请求
requestVolumeThreshold: 20 #超过该请求数的请求会被拒绝
forceOpen: false #强制打开断路器,拒绝所有请求
forceClosed: false #强制关闭断路器,接收所有请求
requestCache:
enabled: true #用于控制是否开启请求缓存
collapser: #用于控制HystrixCollapser的执行行为
default:
maxRequestsInBatch: 100 #控制一次合并请求合并的最大请求数
timerDelayinMilliseconds: 10 #控制多少毫秒内的请求会被合并成一个
requestCache:
enabled: true #控制合并请求是否开启缓存
threadpool: #用于控制HystrixCommand执行所在线程池的行为
default:
coreSize: 10 #线程池的核心线程数
maximumSize: 10 #线程池的最大线程数,超过该线程数的请求会被拒绝
maxQueueSize: -1 #用于设置线程池的最大队列大小,-1采用SynchronousQueue,其他正数采用LinkedBlockingQueue
queueSizeRejectionThreshold: 5 #用于设置线程池队列的拒绝阀值,由于LinkedBlockingQueue不能动态改版大小,使用时需要用该参数来控制线程数