摘要:本文重点介绍一下基于实现服务发现。使用方式下面我们开始的使用添加和的依赖添加注解开启服务发现,注解支持客户端。同样子,他可以使用默认的也可以使用或者修改配置文件服务名字服务无端口会随机选择一个服务集群名字注册中心地址,完成。
springcloud-feign实现服务发现
上一篇介绍了nacos实现配置和注册中心,在微服务中只有配置和注册中心远远不够,还需要有服务发现。本文重点介绍一下基于feign实现服务发现。
简单介绍
springcloud使用服务发现进行服务间调用。对外使用网关gateway屏蔽分流转发接口。服务发现客户端到注册中心拉取服务列表实现客户端负载均衡。客户端实现负载均衡主要有两种方式。一种是ribbon另一种是基于ribbon封装的feign。这是feign官方的解释
我总结了一下主要有一下几个优点:
(1)可插拔的注解支持,包括Feign注解和JAX-RS注解;
(2)支持可插拔的HTTP编码器和解码器;
(3)支持Hystrix和它的Fallback;
(4)支持Ribbon的负载均衡;
(5)支持HTTP请求和相应的压缩。
微服务调用常用概念
(1)服务降级:
当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略测不处理或换种简单的方式处理,从而释放资源以保证核心交易正常运作成高效运作。
(2)断路:
熔断这一概念来自于电子工程中的断路器(circuit Breaker)。在互联网系统中,当下游服务因访问压力过大而相应变慢或者失败,上游为了保护系统整体的可用性,可以暂时切断对下游服务的调用。
简单理解就是降级是针对业务,断路是上下游故障。
(3)幂等性:
就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。
使用方式
下面我们开始feign的使用:
(1)添加springcloudalibaba和openfeign的依赖
org.springframework.cloud spring-cloud-starter-openfeign org.springframework.cloud spring-cloud-starter-alibaba-nacos-discovery
(2)添加注解 @EnableDiscoveryClient开启服务发现,注解 @EnableFeignClients支持feign客户端。
用@FeignClient("serviceName")注解在对外的接口上,这样接口就支持调用服务,因此支持热插拔。serviceName使用注册中心被调用的服务名字。@RequestMapping注解的方法是服务提供方的接口方法,看起来是不是和springmvc使用方法很像,没错因为这是feign对mvc支持的一种契约。feign默认是@RequestLine。它可以支持各种契约。同样子,他可以使用默认的HttpUrlConnection也可以使用httpclient或者okhttp3.
(3)修改application.peoperties配置文件
#服务名字
----- spring.application.name=feign-service
#服务无端口0会随机选择一个
----- server.port=0
#服务集群名字
---- spring.cloud.nacos.discovery.cluster-name=consumer-service
#nacos注册中心地址
----- spring.cloud.nacos.discovery.server-addr=nacos.blog.ailijie.top
ok,完成。下面是feign的高级使用
feign高级使用
(1)feign日志配置
创建feign日志级别,还有feign的重试机制,这样feign可以使用重试机制同时把每一次的请求用日志记录下来。
(2)feign的断路
在feignclient注解中配置fallbackFactory工厂,进行断路解决。使用factory的好处是可以处理异常信息。还可以使用fallback处理。如果使用fallback,fallbackFactory将不会生效。看一下,Factory
需要返回一个IProviderService的实现类,在create方法里可以处理异常。这样在服务端发生异常或者下线后,将会走断路方法。
(2)feign的高级配置
#开启okhttp
----- feign.okhttp.enabled=true
#开启hystrix断路,不开启feign的降级不生效
----- feign.hystrix.enabled=true
#hystrix断路超时时间
----- hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds = 2000
----- provider- ----- service.ribbon.ConnectTimeout = 1000
----- provider-service.ribbon.ReadTimeout = 1000
#对所有操作请求都进行重试
----- provider-servicee.ribbon.OkToRetryOnAllOperations = true
#切换实例的重试次数
----- provider-service.ribbon.MaxAutoRetriesNextServer = 2
#对当前实例的重试次数
----- provider-service.ribbon.MaxAutoRetries = 1
#设置日志级别
----- logging.level.com.wotrd.feignservice.service.IProviderService=DEBUG
断路的超时时间需要大于读超时时间,不然重试不生效。
未完待续,接下来将会更新springmvc全局异常处理和springdataflow。有问题请留言。
个人博客地址 https://blog.ailijie.top/arch...
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/75189.html
摘要:在系统出现前企业应用架构基本被等模式垄断,直到的出现为我们打开了另一个扇大门,废话不说了,我们直奔主题我们先了解下一个简单的系统是如何为用户提供服务的企业用户上传它的应用代码或其他代码托管方式,我们生成用户应用的镜像,或者用户直接上传镜像或 在CAAS系统出现前企业应用架构基本被IAAS/SAAS/PAAS等模式垄断,直到docker的出现为我们打开了另一个扇大门,废话不说了,我们直奔...
摘要:在系统出现前企业应用架构基本被等模式垄断,直到的出现为我们打开了另一个扇大门,废话不说了,我们直奔主题我们先了解下一个简单的系统是如何为用户提供服务的企业用户上传它的应用代码或其他代码托管方式,我们生成用户应用的镜像,或者用户直接上传镜像或 在CAAS系统出现前企业应用架构基本被IAAS/SAAS/PAAS等模式垄断,直到docker的出现为我们打开了另一个扇大门,废话不说了,我们直奔...
摘要:可以在主进程中抛出一个子进程,子进程中实现的自动发现,子进程侦察到节点数据变化时,主动通知主进程。架构的整体思路是子进程实现的自动发现,主进程维护一个节点数据的共享变量,其他服务要想使用节点数据时,从主进程中获取。 php是当下最流行的web服务器端语言,zookeeper是大型分布式协同工具,本文在这里介绍一种架构实现php服务器对于zookeeper数据变化的自动监听 一.问题背景...
摘要:第三种是以为代表的服务网格,通过劫持业务请求的方式实现服务发现和治理。服务网格对于上述服务发现和治理功能,北极星提供统一的控制面和数据面。腾讯业务线众多,开发语言和框架也众多,北极星数据面支持多语言和两种模式。 .markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overf...
阅读 2323·2023-04-25 19:27
阅读 3419·2021-11-24 09:39
阅读 3859·2021-10-08 10:17
阅读 3356·2019-08-30 13:48
阅读 1896·2019-08-29 12:26
阅读 3092·2019-08-28 17:52
阅读 3496·2019-08-26 14:01
阅读 3500·2019-08-26 12:19