irpas技术客

『互联网架构』软件架构-SpringCloud服务发现Eureka的使用教程_IT架构圈

网络投稿 3545

上次说了单体架构和微服务之前优缺点的对比,也说了zookeeper和Eureka理论上的区别,也说了Eureka高水平的架构。Eureka Server 和Eureka Client也就是消费者和生产者的的关系。

Eureka分区的概念(一)

用户量比较大或者用户地理位置分布范围很广的项目,一般都会有多个机房。这个时候如果上线springCloud服务的话,我们希望一个机房内的服务优先调用同一个机房内的服务,当同一个机房的服务不可用的时候,再去调用其它机房的服务,以达到减少延时的作用。

eureka提供了region和zone两个概念来进行分区,这两个概念均来自于亚马逊的AWS:

① region

可以简单理解为地理上的分区,比如亚洲地区,或者华北地区,再或者北京等等,没有具体大小的限制。根据项目具体的情况,可以自行合理划分region。

②zone

可以简单理解为region内的具体机房,比如说region划分为北京,然后北京有两个机房,就可以在此region之下划分出zone1,zone2两个zone。

Eureka简单搭建(二) ① EurekaServer

pom 配置,加入spring cloud父POM及spring-cloud-starter-eureka-server。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://·.tuling.springcloud=DEBUG #eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/ eureka.client.serviceUrl.defaultZone=http://zhangfei:777@localhost:8761/eureka eureka.instance.prefer-ip-address=true eureka.instance.instance-id=${spring.application.name}:${spring.application.instance_id:${server.port}}

controller

package com.tuling.springcloud.api; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController @RequestMapping("/order") public class OrderController { private final Logger logger = LoggerFactory.getLogger(OrderController.class); @Autowired private RestTemplate restTemplate; //http://localhost:8082/order/user/getById?userId=1 @RequestMapping("/user/getById") public Object getUserById(String userId) { String url = "http://localhost:8081/user/getById?id=" + userId; logger.debug("param userId : {}, request url : {}", userId, url); Object result = restTemplate.getForEntity(url, Object.class); return result; } @RequestMapping("/user/getByIdEureka") public Object getUserByIdEureka(String userId) { String url = "http://microservice-user/user/getById?id=" + userId; Object result = restTemplate.getForEntity(url, Object.class); return result; } }

启动类

package com.tuling.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication @EnableDiscoveryClient public class OrderMicroStart { public static void main(String[] args) throws Exception { SpringApplication.run(OrderMicroStart.class, args); } } Eureka重要概念(三)

按照这个思路去观看源码

Register 服务注册Renew 服务的续期Fetch Registers : 获取注册列表信息Eviction 服务剔除Cancel: 服务下线

PS:eureka在springcloud中充当服务注册功能,相当于dubbo+zk里面得zk,但是比zk要简单得多,zk可以做得东西太多了,包括分布式锁,分布式队列都是基于zk里面得四种节点加watch机制通过长连接来实现得,但是eureka不一样,eureka是基于HTTPrest来实现的,就是把服务的信息放到一个ConcurrentHashMap中,然后服务启动的时候去读取这个map,来把所有服务关联起来,然后服务器之间调用的时候通过信息,进行http调用。eureka包括两部分,一部分就是服务提供者(对于eureka来说就是客户端),一部分是服务端,客户端需要每个读取每个服务的信息,然后注册到服务端,很明显了,这个服务端就是接受客户端提供的自身的一些信息。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Eureka #Server #和Eureka