springcloud-netflix搭建概要梳理(一)

一、eureka搭建
1、eureka的搭建,首先是基础的parent定义好,springcloud版本,springboot版本,dependencymanager版本管理标签定义好
2、构建eureka-server子项目,引入spring-cloud-starter-netflix-eureka-server依赖,配置文件里如果是单机注册与发现获取均为false,注册指的是将本服务是否注册到eureka进行管理而发现获取是从 Eureka 服务器中获取注册信息;如果是双节点就true互相注册,启动类上@EnableEurekaServer
3、构建eureka-client子项目注册,引入spring-cloud-starter-netflix-eureka-client依赖,配置文件里面配置客户端信息,注册中心的url配置如果多个逗号隔开即可,同样的启动类上@EnableEurekaClient注解打上即可
4、到此配置完成。优化与完善:
    a.注意client的配置文件中指定instanceId: ${spring.application.name}:${server.port} # 指定实例ID,就不会显示主机名了
    b.但是此时鼠标放在 实例 ID 上,显示的还是主机名,而不是显示IP地址,修改:preferIpAddress: true #访问路径可以显示IP地址,继续加在与instanceid并列配置项
    c.注意如果某个实例挂掉了,eureka并不会立刻删除信息,依旧会对该微服务的信息进行保存。但是也会在最上方弹出红色的英文提示大概意思有道了一下:紧急!EUREKA可能错误地声称实例已经启动,而实际上它们并没有。更新小于       阈值,因此实例不会仅仅为了安全而过期。这个是eureka的架构哲学:该保护机制的目的是避免网络连接故障,在发生网络故障时,微服务和注册中心之间无法正常通信,但服务本身是健康的,不应该注销该服务,如果eureka因网络故       障而把微服务误删了,那即使网络恢复了,该微服务也不会重新注册到eureka server了,因为只有在微服务启动的时候才会发起注册请求,后面只会发送心跳和服务列表请求,这样的话,该实例虽然是运行着,但永远不会被其它服务所       感知。开发的时候如果我们为了让其能比较敏感的感知到服务下线(有个两三分钟的等待)可以关闭自我保护机制:server:  enable-self-preservation: false
     d.如果我们部署eureka集群的话,部署完毕后可以看到 DS Replicas  这个下面的信息是这个Eureka Server相邻节点,互为一个集群。再往下面,就是注册到这个服务上的实例信息。

二、Ribbon负载均衡
LB,即负载均衡(Load Balance),负载均衡是微服务架构中经常使用的一种技术。 负载均衡是我们处理高并发、缓解网络压力和进行服务端扩容的重要手段之一,简单的说就是将用户的请求平摊的分配到多个服务上,从而实现系统的高可用性集群。负载均衡其实分为客户端负载均衡以及服务器负载均衡,客户端负载均衡要维护一份服务列表。客户端负载均衡和服务端负载均衡最大的区别在于服务清单所存储的位置。在客户端负载均衡中,每个客户端服务都有一份自己要访问的服务端清单,这些清单统统都是从Eureka服务注册中心获取的。而在服务端负载均衡中,只要负载均衡器维护一份服务端列表 。所以nginx就是服务器负载均衡,而ribbon是客户端负载均衡,ribbon默认轮训算法,像其他的还有权重、随机、地址哈希等,ribbon无需新增服务只需要在消费者端进行配置即可。
1、配置使用:Ribbon 相关依赖,eureka会自动引入Ribbon,因此只需要引入eureka客户端依赖即可spring-cloud-starter-netflix-eureka-client;
2、在消费者配置文件中配置eureka配置与普通服务注册唯一区别是注册为false,发现服务也就是fetchRegistry:true,否则无法做客户端负载均衡;
3、在自定义配置类中添加新注解 @LoadBalanced ,这里的自定义配置类其实就是使用@Configuration与@Bean注册一个resttemplate实例到spring容器中,现在相当于在@Bean之上在添加一个@LoadBalanced注解,作用是:@LoadBalanced表示这个RestTemplate开启负载均衡,在调用服务提供者的接口时,可使用 服务名称替代真实IP地址。服务名称 就是服务提供者在application.yml中配置的spring.application.name属性的值 。
4、如上3中所说我们需要修改之前的调用方式:restTemplate.postForObject(REST_URL_PREFIX + "/product/add", product, Boolean.class)之前private static final String REST_URL_PREFIX = "http://localhost:8001";修改这个变量为private static final String REST_URL_PREFIX = "http://MICROSERVICE-PRODUCT";
5、注意最后的启动类上加上@EnableEurekaClient //向服务注册中心进行注册
6、测试OK。负载均衡测试可以同时搭建两个接口的提供者,然后每个指向不同数据库用来区分是调用的哪个服务,然后用消费者内部定义resttemplate并打上@LoadBalanced注解然后调用发现默认轮询机制,来回切换调用。

三、Feign 
使用 Feign 只需要定义一个接口,然后在接口上添加注解即可。Spring Cloud 对 Feign 进行了封装,Feign 默认集成了 Ribbon 实现了客户端负载均衡调用。
配置步骤:
1、引入依赖spring-cloud-starter-openfeign;
2、指定服务调用service层接口ProductClientService注意接口上要指定feign调用的微服务的servicename比如@FeignClient(value = "MICROSERVICE-PRODUCT"),然后接口里面写抽象方法,写法注意其url与被代理接口保持一致,说白了拼接万就是被代理接口的url路径
3、然后在congroller层创建ProductController_Feign正常配置调用即可与普通controller一样
4、修改启动类@EnableFeignClients(basePackages= {"com.mengxuegu.springcloud"})。如果不配置basePackages的话被调用接口需要打上@FeginClient注解,但是大注解也是需要服务先注册到微服务中否则此方法也不行,保险起见还是配置basePackages为好,到此为止配置完成,并且是基于服务名的ribbon的负载均衡。
原理:
Feign通过接口的方法调用Rest服务(之前是Ribbon+RestTemplate),请求发送给 Eureka 服务器(http://MICROSERVICE-PRODUCT/product/list), 通过Feign直接找到服务接口 ,因为集成了 Ribbon 技术,Feign 自带负载均衡配置功能。说白了也是用的ribbon。
1、 启动类添加@EnableFeignClients注解,Spring会扫描标记了@FeignClient注解的接口,并生成此接口的代理对象
2、 @FeignClient("服务名称 ") 即指定了 product 服务名称,Feign会从Eureka注册中心获取 product 服务列表,并通过负载均衡算法进行服务调用。
3、在接口方法中使用注解 @RequestMapping(value = "/product/list",method = RequestMethod.GET),指定调用的url,Feign 会根据url进行远程调用。
注意事项:
SpringCloud对Feign进行了增强兼容了SpringMVC的注解 ,我们在使用SpringMVC的注解时需要注意:
1、@FeignClient接口方法有基本类型参数在参数必须加@PathVariable("XXX") 或 @RequestParam("XXX")
2、@FeignClient接口方法返回值为复杂对象时,此类型必须有无参构造方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值