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

启动测试

  1. 启动Nacos-server
  2. 启动项目nacos-provide
  3. 启动项目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入门应用的主要内容,如果未能解决你的问题,请参考以下文章

Nacos使用,集成OpenFeign远程下载文件

Nacos使用,集成OpenFeign远程下载文件

Nacos使用,集成OpenFeign远程下载文件

Nacos:Nacos与OpenFeign的对接使用

Spring Cloud Alibaba Nacos 入门

Spring Cloud Alibaba入门七:openFeign日志配置