Nacos(服务注册与发现)+SpringBoot+openFeign项目集成

📝 学技术、更要掌握学习的方法,一起学习,让进步发生
👩🏻 作者:一只IT攻城狮 ,关注我,不迷路 。
💐学习建议:1、养成习惯,学习java的任何一个技术,都可以先去官网先看看,更准确、更专业。
💐学习建议:2、然后记住每个技术最关键的特性(通常一句话或者几个字),从主线入手,由浅入深学习。
❤️ 《SpringCloud入门实战系列》解锁SpringCloud主流组件入门应用及关键特性。带你了解SpringCloud主流组件,是如何一战解决微服务诸多难题的。

文章目录

  • 一、项目准备(Nacos+SpringBoot+OpenFeign)
  • 二、构建Nacos之服务提供者
    • 1、pom中引入依赖
    • 2、yml文件增加配置
    • 3、启动类
    • 4、测试
  • 三、构建Nacos之服务消费者
    • 1、pom中引入依赖
    • 2、yml文件配置
    • 3、启动类
    • 4、测试

❤️Nacos简介、安装、运行参看: SpringCloud入门实战(十三)Nacos服务注册与发现+配置管理详解
❤️Nacos(服务注册与发现)项目集成: Nacos(服务注册与发现)+SpringBoot+openFeign项目集成

一、项目准备(Nacos+SpringBoot+OpenFeign)

SpringCloud是分布式微服务架构的一站式解决方案,是多种微服务架构落地技术的集合体。而SpringCloud Alibaba是SpringCloud中一个重要项目,Nacos作为SpringCloud Alibaba项目中的一项重要组件,我们需要重点去了解和学习。

我们知道使用 Nacos 是简化服务发现、配置管理、服务治理及管理的解决方案,让微服务的发现、管理、共享、组合更加容易。Nacos = Eureka + Config + bus可以替代Eureka做服务注册中心,可以替代Config做服务配置中心。

那我们结合项目具体来学习一下优秀的Nacos作为注册中心是如何使用的。

二、构建Nacos之服务提供者

可以先准备好nacos环境:进入的nacos的bin目录,启动服务器 : sh startup.sh -m standalone
访问http://localhost:8848/nacos看到界面即成功启动。接下来搭建项目。

1、pom中引入依赖

新建父工程cloud-nacos。

1)父pom中引入spring-cloud-alibaba-dependencies依赖,注意SpringBoot、SpringCloud、Spring Cloud Alibaba及组件间版本问题。可参看SpringBoot、SpringCloud、Spring Cloud Alibaba版本对照表(详细准确)。我的版本如下:

 <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>2021.0.4</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2021.0.4.0</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.7.1</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

提示:搭建好项目,如果后续启动测试时也会报错:
Could not initialize class com.alibaba.nacos.common.remote.client.grpc.GrpcSdkClient
那也是因为引用的spring cloud 版本,alibaba cloud版本,nacos的版本不一致导致的。

2)新建子module,cloud-payment工程作为服务提供者,pom引入spring-cloud-starter-alibaba-nacos-discovery依赖:

	<dependency>
	<groupId>com.alibaba.cloud</groupId>
	  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
	</dependency>
	<dependency>
	  <groupId>org.springframework.cloud</groupId>
	  <artifactId>spring-cloud-starter-loadbalancer</artifactId>
	</dependency>

提示:由于Netflix Ribbon 进入停更维护阶段,因此SpringCloud 2020.0.1 版本之后,删除了eureka中的ribbon, 替代ribbon的是spring cloud自带的LoadBalancer,默认使用的是轮询的方式,新版本的 Nacos discovery 都已经移除了 Ribbon ,因此我们使用Nacos时也需要引入loadbalancer 才能调起服务。

2、yml文件增加配置

cloud:
  nacos:
    discovery:
      # 配置 nacos 的服务地址
      server-addr: localhost:8848
management:
endpoints:
  web:
    exposure:
      include: '*'

3、启动类

启动类增加注解:@EnableDiscoveryClient

4、测试

编写简单的查询业务类,并启动服务,可以看到nacos上实例数变成2

在这里插入图片描述
在这里插入图片描述

三、构建Nacos之服务消费者

1、pom中引入依赖

新建module:cloud-order。这里我引入了spring-cloud-starter-openfeign通过openfeign代替Ribbon+RestTemplate方式调用服务提供者。

提示:openfeign知识传送门:SpringCloud入门实战(六)-OpenFeign服务调用

附上完整pom:

<?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>springcloud-nacos</artifactId>
        <groupId>org.test</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-order</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.test</groupId>
            <artifactId>cloud-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> 
        </dependency>
        <!--使用Spring Cloud LoadBalancer 进行客户端负载均衡-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>3.1.3</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <!-- log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </dependency>
        <!-- devtools热部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
    </dependencies>

</project>

2、yml文件配置

server:
  port: 80

spring:
    application:
      name: cloud-order #微服务应用的名字
    cloud:
      nacos:
        discovery:
          server-addr: localhost:8848
## 消费者将要去访问的微服务名称( 注册成功进 nacos 的微服务提供者)
service-url:
  nacos-user-service: http://cloud-payment

3、启动类

启动类增加注解:@EnableDiscoveryClient 以及开启feign的调用@EnableFeignClients

/**
 * @author qy
 * @date 2022年07月13日 16:46
 */
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableDiscoveryClient
@EnableFeignClients
public class CloudOrder {
    public static void main(String[] args) {
        SpringApplication.run(CloudOrder.class, args);
    }
}

4、测试

编写简单的查询业务类,并启动服务,可以看到nacos上实例数变成3

重点代码:

/**
 * 
 * OrderController.java
 */
@RestController
@RequestMapping("/order")
@Slf4j
public class OrderController {
    @Resource
    private PaymentService paymentService;

    @GetMapping(value = "/ok/{id}")
    public String paymentInfoOk(@PathVariable("id") Integer id) {
        String result = paymentService.paymentInfoOk(id);
        log.info("========result:{}========", result);
        return result;
    }


    @GetMapping(value = "/timeout/{id}")
    public String paymentInfoTimeOut(@PathVariable("id") Integer id) {
        String result = paymentService.paymentInfoTimeOut(id);
        log.info("========result:{}========", result);
        return result;
    }
}


/**
 * 
 * Feign接口类 PaymentService.java
 */
@Component
@FeignClient(value = "cloud-payment",fallback = PaymentFallbackService.class)
public interface PaymentService {

    @GetMapping(value = "/payment/ok/{id}")
    String paymentInfoOk(@PathVariable("id") Integer id);

    @GetMapping(value = "/payment/timeout/{id}")
    String paymentInfoTimeOut(@PathVariable("id") Integer id);
}



@Component
public class PaymentFallbackService implements PaymentService {
    @Override
    public String paymentInfoOk(Integer id) {
        return "全局解耦降级处理PaymentFallback->paymentInfoOk!";
    }

    @Override
    public String paymentInfoTimeOut(Integer id) {
        return "全局解耦降级处理PaymentFallback->paymentInfoTimeOut!";
    }
}


访问http://localhost/order/ok/1测试,多次调用,轮询访问。

在这里插入图片描述

如果你的应用测试报错:Load balancer does not contain an instance for the service ..,参看:解决办法。

Nacos作为服务注册与发现的项目实战就到这里了。下一节,我们再详细介绍Nacos服务配置中心、Nacos集群和持久化配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/42188.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基础语言模型LLaMA

LLaMA包含从7B到65B参数的基础语言模型集合。Meta在数万亿个tokens上训练了模型&#xff0c;LLaMA-13B在大多数基准测试中优于GPT-3&#xff08;175B&#xff09;。 来自&#xff1a;LLaMA: Open and Efficient Foundation Language Models 目录 背景概述方法预训练数据架构Op…

openGauss学习笔记-09 openGauss 简单数据管理-创建数据库

文章目录 openGauss学习笔记-09 openGauss 简单数据管理-创建数据库9.1 语法格式9.2 参数说明9.3 示例 openGauss学习笔记-09 openGauss 简单数据管理-创建数据库 数据库安装完成后&#xff0c;默认生成名称为postgres的数据库。您需要自己创建一个新的数据库。 9.1 语法格式…

Appium+python自动化(十一)- 元素定位- 下卷超详解)

1、 List定位 List故名思义就是一个列表&#xff0c;在python里面也有list这一个说法&#xff0c;如果你不是很理解什么是list&#xff0c;这里暂且理解为一个数组或者说一个集合。首先一个list是一个集合&#xff0c;那么他的个数也就成了不确定性&#xff0c;所以这里需要用复…

C\C++ 使用exception类,抛出自定义异常并捕获

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan 简介&#xff1a; 抛出异常&#xff0c;并捕获 exception 效果&#xff1a; 代码&#xff1a; #include <iostream> #include <exception> #include <stdexcept&g…

C# OpenCvSharp+DlibDotNet 人脸替换 换脸

效果 Demo下载 项目 VS2022.net4.8OpenCvSharp4DlibDotNet 相关介绍参考 代码 using DlibDotNet; using OpenCvSharp.Extensions; using OpenCvSharp; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Dra…

和为 K 的子数组——前缀和+哈希

题目链接&#xff1a;力扣 注意&#xff1a;此题不能使用滑动窗口&#xff0c;因为数组中可能会出现负数。也就是说右指针向后移1位不能保证区间会增大&#xff0c;左指针向后移1位也不能保证区间和会减小。给定左右指针的位置没有二段性 已知sum[i]是从nums[0~i]的和&#x…

实现小程序商城首页【源码公开】

效果图 页面源码 <view class"index-container"><view class"header"><!--搜索框【仅样式&#xff0c;不做处理】 start--><van-search bindtap"clickSearch" disabled shape"round" background"#9c7bf0&q…

Pycharm安装dlib

目录 一、下载dilb 二、使用pip安装dlib库(亲测有效) 三、使用Pycharm安装(未使用) 一、下载dilb 官方网址:德利卜 皮皮 (pypi.org) 二、使用pip安装dlib库(亲测有效) 将下载好的whl文件放入工程文件中 接下来使用Python自带的pip进行安装 1.winR2.输入cmd&#xff0c;回车…

MySQL第六章、JDBC编程

目录 一、数据库编程的必备条件 二、Java的数据库编程&#xff1a;JDBC 三、JDBC工作原理 四、JDBC使用 4.1JDBC开发案例 一、数据库编程的必备条件 编程语言&#xff0c;如Java&#xff0c;C、C、Python等数据库&#xff0c;如Oracle&#xff0c;MySQL&#xff0c;SQL S…

十大网络安全上市公司分析,让我们重点聊聊F5

网络安全上市厂商业务广泛分布于网络安全硬件、软件&#xff0c;网络安全服务等板块&#xff0c;总体来看&#xff0c;十大网络安全上市公司的竞争可谓是如火如荼。今天让我们把目光集中在F5&#xff0c;这个能为我们所有人创造更安全的数字世界的企业&#xff0c;在应用及API交…

Linux下使用命令行和配置文件两种方式实现主从复制

一、什么是主从复制&#xff1f; Redis的主从复制&#xff08;Master-Slave Replication&#xff09;是一种数据复制机制&#xff0c;其中一个Redis实例充当主节点&#xff08;Master&#xff09;&#xff0c;而其他一个或多个Redis实例则充当从节点&#xff08;Slave&#xff…

基于GIS的生态敏感性评价与产业路径选择研究:以江西省吉安市为例

导读: 确立绿水青山就是金山银山的理念,建立生态经济体系,是新时代生态环境保护与经济发展的协调之道。对产业规划而言,与生态同行,构建绿色产业体系,是推动地区高质量发展的根本要求。鉴于此,文章从实证角度出发,以江西省吉安市为研究对象,采用生态敏感性评价方法,选…

【EXCEL】通过url获取网页表格数据

目录 0.环境 1.背景 2.具体操作 0.环境 windows excel2021 1.背景 之前我用python的flask框架的爬虫爬取过豆瓣网的电影信息&#xff0c;没想到excel可以直接通过url去获取网页表格内的信息&#xff0c;比如下图这是电影信息界面 即将上映电影 (douban.com) 通过excel操作&…

(栈队列堆) 剑指 Offer 31. 栈的压入、弹出序列 ——【Leetcode每日一题】

❓ 剑指 Offer 31. 栈的压入、弹出序列 难度&#xff1a;中等 输入两个整数序列&#xff0c;第一个序列表示栈的压入顺序&#xff0c;请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如&#xff0c;序列 {1,2,3,4,5} 是某栈的压栈序列&#xff0c;序…

【字符串编码解码问题】

字符串中编码解码问题 1.编码 byte[] getBytes()&#xff1a;使用平台的默认字符集将该String编码为一系列字节&#xff0c;将结果存储到新的字节数组中byte[] getBytes(String charsetName)&#xff1a;使用指定的字符集将该String编码为一系列字节&#xff0c;将结果存储到…

AHB协议理解

从小父亲就教育我&#xff0c;做一个对社会有用的人&#xff01; 目录 Chapter1 AHB Block Diagram Ginput signal lnput signals Output Signal Chapter3 Transfers AHB接口Overview Chapter6 Data Buses HWDATA HRDATA Chapter1 Introduction AHB: Advanced High-performanc…

ubuntu创建多用户并使用ssh链接

添加多个同时登录的用户 以下内容中的“username”根据自己需求自己定义 1.创建新用户 sudo useradd username2.给新用户添加管理权限 sudo vim /etc/sudoers打开的文件中添加如下内容 username ALL(ALL:ALL) ALL3.设置密码 输入&#xff1a; sudo passwd username打开的…

创建型模式 - 原型模式

概述 用一个已经创建的实例作为原型&#xff0c;通过复制该原型对象来创建一个和原型对象相同的新对象。 结构 原型模式包含如下角色&#xff1a; 抽象原型类&#xff1a;规定了具体原型对象必须实现的的 clone() 方法。 具体原型类&#xff1a;实现抽象原型类的 clone() 方…

2023年牛客暑假多校-1 - J.Roulette题解

传送门&#xff08;lduoj&#xff09; 题目描述 Walk Alone is playing roulette, a kind of gambling. For simplification, we assume its rules and steps as follows: The whole gambling process composes of many turns.In the i-th turn:Walk Alone can choose an i…

Apache Doris (二十八):Doris 数据导入(六)Spark Load 1- 原理及配置

目录 1. 基本原理 2. Spark集群搭建 2.1 Spark Standalone 集群搭建 2.2 Spark On Yarn 配置 3. Doris配置Spark与Yarn 3.1 Doris配置Spark 3.2 Doris配置Yarn 进入正文之前&#xff0c;欢迎订阅专题、对博文点赞、评论、收藏&#xff0c;关注IT贫道&#xff0c;获取高质…