CGB2109Step4—Nacos服务注册中心应用实践(Feign)

Why:

消费方每次都要自己拼接URL很费事,所以就有了feign

What:

在这里插入图片描述

Feign 是一种声明式Web服务客户端,底层封装了对Rest技术的应用

How

step1:添加pom依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

step2:在启动类上添加@EnableFeignClients注解

@EnableFeignClients
@SpringBootApplication
public class ConsumerApplication {…}

step3:定义Http请求API,基于此API借助OpenFeign访问远端服务,搞一个方法,让其和provider搭上线

package com.jt.consumer.service;
@FeignClient(name="sca-provider")//sca-provider为服务提供者名称
public interface RemoteProviderService{
    @GetMapping("/provider/echo/{string}")//前提是远端需要有这个服务
    public String echoMessage(@PathVariable("string") String string);
}

@FeignClient:连接的名字

/provider/echo/{string}:连接的是什么

Step4:调用

package com.jt.consumer.controller;
@RestController
@RequestMapping("/consumer/ ")
public class FeignConsumerController {
    @Autowired
    private RemoteProviderService remoteProviderService;
    /**基于feign方式的服务调用*/
    @GetMapping("/echo/{msg}")
    public String doFeignEcho(@PathVariable  String msg){
        //基于feign方式进行远端服务调用(前提是服务必须存在)
        return remoteProviderService.echoMessage(msg);
    }
}

最终,用户基于/echo/{msg}进行访问。

Feign进阶

1.contextId

如果一个提供方,有多个接口,这个时候需要为远程调用服务接口指定一个contextId,作为远程调用服务的唯一标识

 这样会失败,因为重名了

这时,我们使用如下操作:

 

这样就可以进行正常的调用了。 

2.FallbackFactory:

当我们调用失败时,这个时候会有一个容错的解决方案。

1.创建类

package com.cy.service.factory;
/**
 * 基于此对象处理RemoteProviderService接口调用时出现的服务中断,超时等问题
 */
@Component
public class ProviderFallbackFactory implements FallbackFactory<RemoteProviderService> {
    /**
     * 此方法会在RemoteProviderService接口服务调用时,出现了异常后执行.
     * @param throwable 用于接收异常
     */
    @Override
    public RemoteProviderService create(Throwable throwable) {
        return (msg)->{
                return "服务维护中,稍等片刻再访问";
        };
    }
}

implements FallbackFactory<RemoteProviderService>:如果RemoteProviderService出问题,就会跑过来。

2.把这个方法写进去

@FeignClient(name = "sca-provider", contextId = "remoteProviderService",
             fallbackFactory = ProviderFallbackFactory.class)//sca-provider为nacos中的服务名
public interface RemoteProviderService {
    @GetMapping("/provider/echo/{msg}")
    public String echoMsg(@PathVariable String msg);
}

3.配置打开:

feign:  
  hystrix:
    enabled: true #默认值为false

小节面试分析

  • 为什么使用feign?(基于Feign可以更加友好的实现服务调用简化服务消费方对服务提供方方法的调用)。
  • @FeignClient注解的作用是什么?(告诉Feign Starter,在项目启动时,为此注解描述的接口创建实现类-代理类)
  • Feign方式的调用,底层负载均衡是如何实现的?(Ribbon)
  • @EnableFeignCleints 注解的作用是什么?(描述配置类,例如启动类)

总结(Summary)


何为注册中心?(用于记录服务信息的一个web服务,例如淘宝平台,滴滴平台,美团外卖平台,……)
注册中心的核心对象?(服务提供方,服务消费方,注册中心-Registry)
市面上常用注册中心?(Google-Consul,Alibaba-Nacos,…)

常见问题分析


@LoadBalanced注解作用?(描述RestTemplate对象,让系统底层为RestTemplate对象赋能,对请求过程进行拦截)
Ribbon是什么,基于Ribbon可以解决什么问题?(一个负载均衡组件,这个组件中提供一套负载均衡算法)
为什么要负载均衡?(网络中有一组可以提供相同服务的计算机~类似银行的各个营业点)
你了解哪些负载均衡策略?(基于IRule接口去查看,快捷键ctrl+h)
我们如何修改负载均衡策略?(配置文件->例如application.yml,配置类->例如启功类)
为什么使用Feign方式的服务调用?(声明式远程调用,优化结构,简化服务调用过程代码的编写)
如何基于feign方式实现远程服务调用?(依赖-openfeign,配置,feign接口定义)
@EnableFeignCleints 注解的作用是什么?(描述配置类,例如启动类,告诉底层启动feign starter组件)
@FeignClient注解的作用是什么?(告诉Feign Starter,在项目启动时,为此注解描述的接口创建实现类-代理类)
如何理解基于Feign方式的远程服务调用?(声明式远程服务调用,底层封装了服务调用过程。)
Feign方式如何实现负载均衡?(底层基于ribbon组件实现)
Feign接口指向的对象是谁?(代理对象-feign接口的实现类对象)
 



 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值