Nacos(三):Nacos与OpenFeign的对接使用
前言
上篇文章中,简单介绍了如何在springcloud项目中接入nacos作为注册中心
,其中服务消费者是通过resttemplate+ribbon的方式来进行服务调用的。
实际上在日常项目中服务间调用大都用的是openfeign
, openfeign自身整合了ribbon和hystrix,为服务调用提供了更优雅的方式
那么接入了nacos之后,服务调用还能用这一套吗?
通过我在公司项目上的试水,这个大胆的设想是完全没问题的
本文在上一篇文章中的项目工程基础上,进行测试和演示,文章地址:在springcloud项目中接入nacos作为注册中心
创建项目
打开之前创建的工程nacos,目前已经有两个子工程:
- nacos-provide:服务提供者
- nacos-consumer:服务消费者(resttemplate+ribbon服务调用)
同样的操作,在nacos项目下继续创建一个springboot项目名为nacos-feign,创建时添加openfeign的依赖,如图:
nacos-fegin的pom.xml文件如下:
<?xml version="1.0" encoding="utf-8"?> <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> <parent> <artifactid>nacos</artifactid> <groupid>com.study.www</groupid> <version>0.0.1-snapshot</version> </parent> <groupid>com.larscheng.www</groupid> <artifactid>nacos-fegin</artifactid> <version>0.0.1-snapshot</version> <name>nacos-fegin</name> <description>demo project for spring boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-alibaba-nacos-discovery</artifactid> </dependency> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-openfeign</artifactid> </dependency> </dependencies> <build> <plugins> <plugin> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-maven-plugin</artifactid> </plugin> </plugins> </build> </project>
定义远程接口
创建remoteclient接口,来定义openfeign要调用的远程服务接口。
同时通过@feginclient注解指定被调用方的服务名,通过fallback属性指定remotehystrix类,来进行远程调用的熔断和降级处理。
remoteclient.java代码如下
@feignclient(name = "nacos-provide",fallback = remotehystrix.class) public interface remoteclient { @getmapping("/hellonacos") string hellonacos(); }
remotehystrix.java代码如下
@component public class remotehystrix implements remoteclient { @override public string hellonacos() { return "请求超时了"; } }
通过openfeign调用远程服务
在启动类nacosfeignapplication.java中添加注解@enablediscoveryclient开启服务注册、添加注解@enablefeignclients开启openfeign,启动类通过openfeign调用服务代码如下
@springbootapplication @restcontroller @enablediscoveryclient @enablefeignclients public class nacosfeignapplication { public static void main(string[] args) { springapplication.run(nacosfeginapplication.class, args); } @autowired private remoteclient remoteclient; @getmapping("/feign") public string test() { return remoteclient.hellonacos(); } }
添加项目配置文件
在resourse目录下,添加application.yml配置
server: port: 9529 spring: application: name: nacos-feign cloud: nacos: discovery: server-addr: 127.0.0.1:8848
启动测试
- 启动nacos-server
- 启动项目nacos-provide
- 启动项目nacos-feign
完成以上三步后,访问nacos控制台,检查服务注册情况,如果启动都成功,你看到的应该是如下图:
浏览器访问 http://127.0.0.1:9529/feign, 可以看到返回结果与resttemplate结果无异,但对于编码和操作方式都更加优雅。
访问nacos-feign的接口 http://127.0.0.1:9529/feign, 可以通过openfeign远程调用nacos-provide的接口,返回结果:
你好,nacos!
总结
openfegin整合ribbon和hystrix,为微服务中远程调用提供了一种更优雅的调用方式,它支持负载均衡和容错熔断机制。通过上面的例子,在springcloud中接入nacos做注册中心后,并不会影响我们继续使用其他springcloud组件。
本文源码:https://github.com/larscheng/larscheng-learning-demo/tree/master/nacos
上一篇: python依赖包整体迁移方法(pip)
下一篇: 前端清除浮动的几种方法