不惑之年的硬件牛人转到软件自学之spring cloud:(七)实现Feign功能及自带ribbon负载均衡

前言:笔者曾经有18年的硬件研发经验,从(1)51单片机到(2)FPGA到(3)嵌入式ARM(ARM9到CORTEX A9)全都研发设计过,产品从(1)B超的整机研发到(2)智能家居系统到(3)无线电监测机到(4)平板电脑研发到(5)路灯智能控制到(5)工业电脑均有涉及,从(1)普通的电子技术工程师到(2)副总工程师到(3)副总经理到(4)事业部总经理。。。目前已经步入不惑之年的我对于物联网技术的热衷,决定从硬件开始全面转到物联技术框架之一的spring cloud技术,把我的整个学习经历和大家一起分享,也期待在之后有更多机会和大家一起合作,探讨。

         今天是:2018年4月19日    研究主题:实现Feign功能及自带ribbon负载均衡

         一、什么是Feign

         我们在调用服务时一般都会使用spring自带的RestTemplate,同样我们在Spring Cloud的时候,如果要调用服务之间的接口,我们就会使用Spring Cloud提供的更加简洁的Feign功能来做。

        二、将第六节中的工程直接先复制过来,并更改名字(我一直认为软件就是复制-粘贴-修改的过程,比起之前做硬件要轻松很多大笑,当然我说的轻松是指不用示波器、万用表或洛铁调试硬件哈偷笑

          更改名字如下:

             1、“cjb-ribbon-eureka”改为“cjb-feign-eureka”;

             2、   "cjb-ribbon-server”改为“cjb-feign-server”;

             3、 cjb-ribbon-client”改为 “cjb-feign-client”;

        三、先将注册中心“cjb-feign-eureka”跑起来哈,该改名字的自己晓得噻,就不用像教小朋友一样教了哈,并在端口8888中运行,打开网页:http://localhost:8888/

         

       三、跑两个端口的服务,分别在8080和8081上面,和前一节讲的一样哈,不懂的去前一节看看就清楚了,这里我们还是粘贴偷笑,服务名为“cjb-feign-server”

      1、运行“Cjb1Application”在端口8080上面:

      

     2、运行“CjbApplication”在端口8081上面:

     

    3、去注册中心看一下这两个服务跑起来并注册没有:

    

    四、以下就是慢慢改造feign的客户端了,我们分两步来验证,一步是先看一下通过简单feign的标注是否可以实现服务接口调用和之前spring中的Rest效果一样,第二步我们看一下这个feign功能是否自带负载均衡功能,用这个就不用ribbon了

      1、在“pom.xml”中增加一个feign的依赖,很简单,就是在 starter后面增加feign这个单词就可以了,完整代码如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.example.demo</groupId>
   <artifactId>cjb-ribbon-client</artifactId>
   <version>0.0.1-SNAPSHOT</version>

   <dependencyManagement>
      <dependencies>
         <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Dalston.SR1</version>
            <type>pom</type>
            <scope>import</scope>
         </dependency>
      </dependencies>
   </dependencyManagement>

   <dependencies>
      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-config</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-eureka</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-ribbon</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-feign</artifactId>
      </dependency>
   </dependencies>

</project>

      2、在主程序“CjbClient"中增加@EnableFeignClients的注解就可,完整代码如下:

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class CjbClient {

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

 3、在“Cjbcontroller”中增加两个路径,一个是“/cjbhello”


表示可以访问到personClient里面的hello()函数,在“PersonClient”里面的代码如下,里面有个前提是必须访问到之前在注册中心的注册服务名“cjb-feign-server”:,找到里面的路径为“/hello”的部分一定要对应一样:


“cjb-feign-server”:,找到里面的路径为“/hello”的代码如下:


看到没有抓狂以上两个图就是核心,这两个路径也就是服务和客户端都要一样,否则访问不了,这样可以运行“CjbClient”程序,在网页中输入:http://localhost:8100/cjbhello,以下就是见证奇迹的时候了:已经能访问到服务端的路径下面的内容了:


4、同理,完成以上内容后我们再参照之前的第六节负载均衡内容,看一下这个是否自带负载均衡,在“Cjbcontroller”中增加另一个路径是“/cjbribbon”


表示可以访问到personClient里面的getPerson()函数,在“PersonClient”里面的代码如下,里面有个前提是必须访问到之前在注册中心的注册服务名“cjb-feign-server”:,找到里面的路径为“/person/{personId}”的部分一定要对应一样:


“cjb-feign-server”:,找到里面的路径为“/person/{personId}”的代码如下:


看到没有抓狂以上两个图就是核心,这两个路径也就是服务和客户端都要一样,否则访问不了,这样可以运行“CjbClient”程序,在网页中输入:http://localhost:8100/cjbribbon,以下就是见证奇迹的时候了:已经能访问到服务端的路径下面的内容了:

点击一下:


点击第二下:


依次点击会分别依次访问不同端口,实现负载均衡功能!大工告成!

五、如果需要完整代码的朋友,可以加入作者QQ群:智物联的spring cloud,入群说明:spring cloud代码需求


     


猜你喜欢

转载自blog.csdn.net/weixin_38638578/article/details/80001699