微服务 12: 各微服务之间的相互调用 Feign + Nacos(文末有项目连接)(重要 重要 重要)

 文章知识来源主要来源于:赵俊夫先生的博客  以下为原文链接
https://blog.csdn.net/u011177064/category_9572944.html
1:服务间的调用
外部请求 通过服务网关来调用注册中心的 微服务,
那么这个时候 外部请求 实际上已经经过层层校验了 
后续也不需要网关进行校验了 

那么各微服务之间怎样优雅简洁的直接相互调用呢?

这个时候我们可以添加给微服务比如 service-provider-demo 新增一个服务
service-provider-dem-feign 服务作为入口

1:外面的其他服务直接调用 service-provider-dem-feign 服务
2:service-provider-dem-feign 服务(作为入口) 调用 service-provider-demo服务
1:Feign是什么
(使用上注解是@Feign)
Feign是一个声明式Web Service客户端。
使用Feign能让编写Web Service客户端更加简单, 它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。
Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。

Feign可以与和Ribbon组合使用以支持负载均衡。
2:OpenFeign又是什么?
使用上注解是@FeignClient
OpenFeign是Spring Cloud 在Feign的基础上支持了Spring MVC的注解,如@RequesMapping等等。
OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,
并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。
3:流程总览(重要 重要 重要)
 一共有4个服务
 service-provider-consumer      (9991  服务名称 nacos-consumer)
service-provider-demo-feign    (9994  服务名称 nacos-provider-feign)
service-provider-demo             (9992  服务名称 nacos-provider)
service-provider-demo-other     (9993  服务名称 nacos-provider)

1:外部  或者    网关(网关的负载均衡)调用service-provider-consumer 接口

2:service-provider-consumer 服务的启动类使用了@EnableFeignClients注解 可以引用Feign包
    service-provider-consumer  在maven使用jar包的方式引用 service-provider-demo-feign 的jar包
    
3:service-provider-consumer 接口 里面 调用了 service-provider-demo-feign 的  provider-feign类的方法

4:service-provider-demo-feign 服务的  provider-feign类的方法 作为  provider服务的入口

5:provider-feign类的方法  调用 服务名称为    nacos-provider服务 的相同路径的接口

6:service-provider-demo-feign 在调用的时候 自带负载均衡策略 
    而nacos-provider服务 有可能是 service-provider-demo 或者  service-provider-demo-other
    则在调用的时候  按照service-provider-demo-feign的负载均衡策略  来调用nacos-provider服务
    
特别注意:
    这里并没有用到网关服务   就是为了特别强调  GateWay+Nacos 具有负载均衡功能
    而 Feign+Nacos  同样也具有负载均衡功能
4:新增模块 service-provider-demo-feign
复制service-provider-demo的  
pom配置  service-provider-demo-feign 新增 OpenFeign Maven包

yml配置   service-provider-demo-feign  修改服务名称为 nacos-provider-feign 
                                                    修改端口号
<!--        引入OpenFeign-->
<dependency>    
    <groupId>org.springframework.cloud</groupId>    
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
新增接口
@FeignClient(name = "nacos-provider" )
public interface ProviderFeignClientService {

    /**
     * 入口 调用 provider的/loadBalance/print 方法
     * @return
     */
    @GetMapping(value = "/loadBalance/print")
    String print();
}
5: service-provider-consumer 改动
 service-provider-consumer服务 启动类 新增注解
 @EnableFeignClients
  表示该类可以引用 Feign包

service-provider-consumer服务 新增接口
可以使用postman直接调用该接口
@RestController
@RequestMapping(value = "/providerDemoFeignClient")
@Slf4j
public class ProviderDemoFeignClient {

    @Autowired
    ProviderFeignClientService providerFeignClientService;

    @GetMapping(value = "/test")
    public void providerDemoFeignClientTest(){
        log.info("请求/providerDemoFeignClient/test");

        //1:外部请求网关服务 经过校验
        //2:网关服务请求consumer 服务
        //3:consumer服务 请求 providerFeignClient服务
        //4:providerFeignClient服务 请求 provider服务
        String resp;
        for (int i = 0; i < 30; i++) {
            resp =  providerFeignClientService.print();
            log.info("请求结果:{}",resp);
        }
    }
}
6:service-provider-demo 服务修改(原本就有的)
@RestController
@Slf4j
public class NacosRobin {

    @GetMapping(value = "/loadBalance/print")
    public String print() {
        log.info(new Date() + "调用:我是服务 service-provider-demo");
        return "我是服务 service-provider-demo";
    }

}
7:service-provider-demo-other 服务修改(原本就有的)
@RestController
@Slf4j
public class NacosRobin {

    @GetMapping(value = "/loadBalance/print")
    public String print() {
        log.info(new Date() + "调用:我是服务 service-provider-demo-other");
        return "我是服务 service-provider-demo";
    }

}
8:调用测试
Feign 服务自定义负载均衡策略
@SpringBootApplication
public class ServiceProviderDemoFeignApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServiceProviderDemoFeignApplication.class, args);
    }

//    /**
//     * 轮训策略
//     * @return
//     */
//    @Bean
//    @Scope(value="prototype")
//    public IRule loadRoundBalanceRule(){
//        return new RoundRobinRule();
//    }

//    /**
//     * 权重策略
//     * @return
//     */
//    @Bean
//    @Scope(value="prototype")
//    public IRule loadNacosBalanceRule(){
//        return new NacosRule();
//    }
}
对Feign进行30次请求

默认策略:
按时间片随机
一个16次   一个14次
轮训策略:
    按服务调用次数
    两种都是15次
权重策略: 
    按权重 权重越大 调用占比越高
    ServiceDemoProvider         9992     权重为2  对应20次请求
    ServiceDemoProvideOther  9993      权重为1  对应10次请求
9:以网关作为入口进行调用
//网关跳转请求到nacos-consumer服务
http://127.0.0.1:9000/nacos-consumer/providerDemoFeignClient/test
10:SpringBoot的RunDashboard如何显示出来
1:在服务设置的地方 点击复制生成另一个服务 

2:然后在右下角会有一个 设置RunDashboard的提示
    点击Show run configurations in Run Dashoard即可

项目连接

请配合项目代码食用效果更佳:
项目地址:
https://github.com/hesuijin/spring-cloud-alibaba-project
Git下载地址:
https://github.com.cnpmjs.org/hesuijin/spring-cloud-alibaba-project.git

在service-provider-demo-feign模块下
在service-consumer-demo 模块下

在service-provider-demo 模块下   (没有修改) 
在service-provider-demo-other 模块下(没有修改)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容