Nacos和OpenFeign入门应用
Posted biubiubiu0706
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nacos和OpenFeign入门应用相关的知识,希望对你有一定的参考价值。
第一篇CSDN文章,甚至连如何发布CSDN都是百度的.
18年开始编程,毕业于杭州达内西湖中心(不是打广告,在那学的,纪念母校)纯小白开始.而且学的时候年龄已经算大了.一直觉得技术上,甚至不觉得自己有啥技术与计算机本专业的至少5年差距,但无论你在学习java或者其他语言的哪个阶段,都首先不要怀疑自己也同时做好被人白眼打击的准备,今天的菜鸟他日也可以展翅高飞.在怀疑自己的时候你倒不如埋头苦读,别把时间浪费在是不是自己太笨,别人是不是真的很聪明这种问题上.先会用,有时间再去深入看原理.
看过某个技术视频,教程后,可能20天不用,慢慢就遗忘了,这也是普通人的记忆曲线,或者说我比较笨,我可能10来天比较忙的话,就忘记了.所以记下来的目的一个是为了更好的巩固,写的过程也是自己记忆的过程,二是练习写文档。都只是个人理解,文章很浅,有写错的,说错的,觉得写的很差劲,太浅的,误人子弟的望指正,批评,教导。如有版权问题可联系删除.
为什么学习Nacos?------>微服务(是什么百度)
和Nacos有相同功能作用的其他应用:Zookeeper,Eureka,,Consul等
Nacos是什么?是一个应用于服务注册与发现、配置管理的平台.服务就是进程.常用于微服务架构设计中.解决项目中各服务之间相互调用的问题.官网文档:Nacos 快速开始
需要提前了解的:两者是相互的,即可以为生产者,也可以为消费者.只用于区别一下
生产者:项目中服务的提供方.
消费者:项目中服务的使用方(调用方)
为什么学习Openfeign?--->既然项目里有多个服务(进程),那么服务间如何调用呢.
直接开始应用:
首先下载解压Nacos且导入数据库文件和配置.下载地址:https://github.com/alibaba/nacos/releases
将nacos-mysql.sql导入数据库:
application.properties:配置要连接的数据库,连接数据库时使用的用户名和密码
启动Nacos:windows下进入Nocos对应的bin目录:startup.cmd -m standalone(standalone代表单机模式运行,集群模式自行百度我不会) 看到Completed initialization in X ms恭喜你.
初识Nacos:访问http://localhost:8848/nacos
做了这么多准备工作,是不是不敲代码手痒.开始代码吧.首先建个项目父工程,然后两个子服务对应的pom.xml文件配置如下,注意注释,便于理解:
父工程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>
<groupId>org.example</groupId>
<artifactId>NacosTest</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>provider</module>
<module>consumer</module>
</modules>
<packaging>pom</packaging>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<spring.cloud.version>Hoxton.SR8</spring.cloud.version>
<spring.cloud.alibaba.version>2.2.5.RELEASE</spring.cloud.alibaba.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.5.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>$spring.cloud.version</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--Spring cloud alibaba-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>$spring.cloud.alibaba.version</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
服务生产者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">
<parent>
<artifactId>NacosTest</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>provider</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--spring cloud alibba的nacos服务注册和发现功能 注册到nacos上的依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
</project>
消费者(调用者)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">
<parent>
<artifactId>NacosTest</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>consumer</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!--
在消费者加Openfeign依赖
OpenFeign使用:
1.消费方添加openfeign依赖
2.启动类添加@EnableFeignClients注解
3.定义请求API,基于此API借助Openfeign访问远端服务
-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--spring cloud alibba的nacos服务注册和发现功能 注册到nacos上的依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
</project>
服务生产者Application.yml文件配置:
#生产者配置文件
server:
port: 8081
#在nacos进行注册
spring:
application:
name: provider #服务名
cloud:
nacos:
server-addr: localhost:8848 #默认(服务和nacos在同一台电脑上时可以省略)
消费者application.yml
#消费者配置文件
server:
port: 8090
#在nacos进行注册
spring:
application:
name: consumer #Nacos上的服务名
cloud:
nacos:
server-addr: localhost:8848 #默认(服务和nacos在同一台电脑上时可以省略)
我们给生产者和消费者加上启动类,观察Nacos页面变化.
项目的大致结构:
注意消费者的启动类添加
@EnableFeignClients注解
消费者定义请求API,基于此API借助Openfeign访问生产者API且生产者有该接口
消费者添加接口供访问.
直接调用吧:
专注的自己又重温了一下Nacos服务间用OpenFeign调用,但是脖子歪了.
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
以上是关于Nacos和OpenFeign入门应用的主要内容,如果未能解决你的问题,请参考以下文章