前言:笔者曾经有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代码需求