首页 > 其他分享 >SpringBoot+Nacos+OpenFeign实现服务的注册、发现、远程调用

SpringBoot+Nacos+OpenFeign实现服务的注册、发现、远程调用

时间:2023-09-04 16:46:11浏览次数:40  
标签:服务 SpringBoot OpenFeign spring boot nacos Nacos org cloud

一、概述

  微服务的开发必定会用到SpringBoot、Nacos(服务发现、注册、配置中心)、OpenFeign(服务远程调用,也就是通过注解调用其他服务的接口)。今天写这篇是想把这三个功能集成在一起。

  让他们一起参与微服务的开发工作。

  要实现的目标:nacos要能够注册及发现服务,openfeign要能够调用远程服务的接口并返回数据。

  步骤:

    1.安装nacos,打开nacos服务,并登录nacos管理后台(账号密码都是:nacos)

    2.创建一个消费者SpringBoot工程,用于注册与发现服务,并进行远程服务调用

    3.创建一个生产者SpringBoot工程,用于注册服务,其提供的服务供消费者工程调用

二、实现步骤

  1.安装nacos(windows版),安装过程比较简单,参考博客

    安装好之后找到bin目录双击打开startup.cmd

   打开后的画面

  2.创建一个SpringBoot生产者工程

    a.配置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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.yw.admin.server</groupId>
    <artifactId>SpringBootAdminServer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>SpringBootAdminServer</name>
    <description>SpringBootAdminServer</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.67_noneautotype2</version>
        </dependency>

        <!-- 注册中心 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.9.RELEASE</version>
        </dependency>
        <!-- 配置中心 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.2.9.RELEASE</version>
        </dependency>
        <!--        服务间远程调用-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.9.RELEASE</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

  b.配置resources/application.yml和bootstrap.yml

server:
  port: 8001

spring:
  application:
    name: tony-provider

  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 #nacos的ip和端口
        group: tony-group #服务分组,这个需要注意下,消费者和生产者的group要一致
spring:
  application:
    name: tony-provider
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848 #nacos的端口

  c.配置工程入口

@EnableFeignClients //启用远程服务调用注解
@SpringBootApplication //SpringBoot工程入口注解
@EnableDiscoveryClient //启用服务发现注解
public class MainProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(MainProviderApplication.class, args);
    }
}

  d.写一个UserController用于供消费者工程远程调用

@RestController
@RequestMapping("/user")
public class UserController {
    @GetMapping
    public UserBean getUser() {
        return new UserBean("德玛西亚", 32, "男");
    }
}

  好了,到这里生产者工程,也就是提供服务的工程已经算是好了。下面贴一下消费者工程的代码。

  

 3.消费者工程

  1.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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.yw.admin.server</groupId>
    <artifactId>SpringBootAdminServer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>SpringBootAdminServer</name>
    <description>SpringBootAdminServer</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.67_noneautotype2</version>
        </dependency>

        <!-- 注册中心 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.9.RELEASE</version>
        </dependency>
        <!-- 配置中心 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.2.9.RELEASE</version>
        </dependency>
        <!--        服务间远程调用-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.9.RELEASE</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

  b.resources/application.xml和bootstrap.xml

server:
  port: 8002

spring:
  application:
    name: tony-consumer

  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 #这里是nacos也就是注册中心的ip和端口。代表我这个工程要向注册中心注册
        group: tony-group
spring:
  application:
    name: tony-consumer
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848 #这里是nacos也就是注册中心的ip和端口。代表我这个工程要向注册中心注册


  c.工程入口添加注解

@EnableFeignClients//开启远程过程调用
@SpringBootApplication
@EnableDiscoveryClient//开启服务注册与发现
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}

  d.写一个DiscoverController用于浏览器或者postman测试使用

@Slf4j
@RestController
@RequestMapping
public class DiscoverController {
  //此处就是基于Feign的注解,其就是一个接口,之后贴代码。宝子们只需要知道用这个接口就可以调用远程服务就行了
    @Autowired
    UserFeignClient userFeignClient;


    @GetMapping("/getUser")//这是本地服务调用,不要和远程的弄混淆了
    public UserBean getUser(){
        return userFeignClient.getUser();//执行远程服务调用
    }
}

  e.看看具体的远程Feign接口是怎么写的

@FeignClient("tony-provider")//这里加上远程服务调用的注解,其中“tony-provider”你你要调用远程服务的名字。
public interface UserFeignClient {

    @GetMapping("/user")//远程服务的路径,这里就要和生产者工程中的UserController中的getUser相对应了
    public UserBean getUser();
}

  测试的时候测试消费者工程。路径为:http://localhost:8002/getUser然后就可以拿到内容提供者工程返回的一个值,如下:

  我把服务注册后nacos中的服务列表也贴出来把。

 

  好了,到这里正式结束。

 

标签:服务,SpringBoot,OpenFeign,spring,boot,nacos,Nacos,org,cloud
From: https://www.cnblogs.com/tony-yang-flutter/p/17677487.html

相关文章

  • SpringBoot 读取配置文件
    在resources文件下创建新的配置文件,如test.yml:es:name:elasticsearch准备使用@PropertySource注解来读取test.yml内容,但@PropertySource本身不支持yml文件,所以创建以下类:publicclassPropertySourceConfigextendsDefaultPropertySourceFactory{@Override......
  • SpringBoot 下使用Swagger3.0
    swagger3.0和2.x的版本有一些配置是不一样的,故记录下。pom.xml依赖<dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version></dependency>Config.java内容@Configura......
  • SpringBoot--实用开发
    SpringBoot实用开发热部署热部署是指在你修改项目BUG的时候对JSP或JAVA类进行了修改在不重启WEB服务器前提下能让修改生效。但是对配置文件的修改除外!导入springboot开发者工具坐标:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boo......
  • SpringBoot--运维实用
    SpringBoot运维实用篇打包与运行windows打包在maven中双击package打包另外如果打包报utf-8的错,在pom中添加<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>2.6</version>&l......
  • SpringBoot--基础
    SpringBoot--基础SpringBoot的设计目的是用来简化Spring应用的初始搭建以及开发过程idea创建springboot入门步骤(需要idea联网)创建一个空项目之后再项目构建中添加springboot相关配置本处的springboot版本为2.7.14,如果maven报错可以自己修改一下版本,最新的3.0版本......
  • 基于springboot的个人云盘管理系统的设计与实现
    传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装个人云盘管理系统软件来发挥其高效地信息处理的作用,可以规范信息管理流程,让管理工作可以系统化和程序化,同时,个人云盘管理系统的有效运用......
  • 基于springboot流浪动物管理系统
    在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对流浪动物信息管理的提升,也为了对流浪动物信息进行更好的维护,流浪动物管理系统的出现就变得水到渠成不可缺少。通过对流浪......
  • Nacos 注册中心的设计原理:让你的应用轻松实现高效注册与发现!
    当应用开始脱离单机运行和访问时,服务发现就诞生了。目前的网络架构是每个主机都有⼀个独立的IP地址,服务发现基本都是通过某种方式获取到服务所部署的IP地址。DNS协议是最早将⼀个网络名称翻译为网络IP的协议,在最初的架构选型中,DNS+LVS+Nginx基本满足所有RESTful服务的发......
  • HttpClient在SpringBoot中的使用
    一、简介HttpClient是ApacheJakartaCommon下的子项目,可以用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包。HttpClient是一个HTTP通信库、一个工具包,它只提供一个通用浏览器应用程序所期望的功能子集,与浏览器相比是没有界面的。二、引入依赖<!--httpcli......
  • java语言B/S医院HIS系统【springboot】
     医院云HIS全称为基于云计算的医疗卫生信息系统(Cloud-BasedHealthcareInformationSystem),是运用云计算、大数据、物联网等新兴信息技术,按照现代医疗卫生管理要求,在一定区域范围内以数字化形式提供医疗卫生行业数据收集、存储、传递、处理的业务和技术平台,实现区域内医疗卫生......