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: 80spring: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 {@Resourceprivate 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 {@Overridepublic String paymentInfoOk(Integer id) {return "全局解耦降级处理PaymentFallback->paymentInfoOk!";}@Overridepublic 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.hqwc.cn/news/20511.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓JNI从0到1入门教程(二)

经过上一篇《安卓JNI从0到1入门教程&#xff08;一&#xff09;》介绍&#xff0c;我们对JNI有了初步认识&#xff0c;接下来我会从ndk-build方式和cmake方式分别来介绍怎么构建native库&#xff1a; 一、ndk-build ndk-build依赖配置文件Android.mk&#xff0c;存放代码的位…

感受C++模版的所带来的魅力

一、泛型编程思想 首先我们来看一下下面这三个函数&#xff0c;如果学习过了 C函数重载 和 C引用 的话&#xff0c;就可以知道下面这三个函数是可以共存的&#xff0c;而且传值会很方便 void Swap(int& left, int& right) {int temp left;left right;right temp; }…

HarmonyOS/OpenHarmony应用开发-Stage模型UIAbility组件使用(四)

UIAbility组件与UI的数据同步 基于HarmonyOS的应用模型&#xff0c;可以通过以下两种方式来实现UIAbility组件与UI之间的数据同步。 1.EventHub&#xff1a;基于发布订阅模式来实现&#xff0c;事件需要先订阅后发布&#xff0c;订阅者收到消息后进行处理。 2.globalThis&…

macOS Sonoma 14beta 3 (23A5286i)第二个更新「附黑/白苹果镜像下载」

系统镜像下载&#xff1a; 系统介绍 黑果魏叔 7 月12 日消息&#xff0c;苹果今天发布 macOS Sonoma 14.0 Beta 3&#xff08;内部版本号&#xff1a;23A5286i&#xff09;第二个更新。 目前尚不清楚苹果为什么要发布 macOS Sonoma Beta 3 的第二个版本&#xff0c;但它可能…

MQ的优劣势及RabbitMQ相关概念

一&#xff0c;MQ 1&#xff0c;MQ 的概念 MQ 全称 Message Queue&#xff08;消息队列&#xff09;&#xff0c;是用来存储消息数据的容器&#xff08;是一个中间件&#xff09;&#xff0c;一般用于分布式系统间的通信&#xff1b;MQ主要介于生产者和消费者之间&#xff0c…

微服务系列文章之 Redisson实现分布式锁

一、高效分布式锁 当我们在设计分布式锁的时候&#xff0c;我们应该考虑分布式锁至少要满足的一些条件&#xff0c;同时考虑如何高效的设计分布式锁&#xff0c;这里我认为以下几点是必须要考虑的。 1、互斥 在分布式高并发的条件下&#xff0c;我们最需要保证&#xff0c;同…

Redis_设置密码

目录 一、临时设置密码 二、永久设置密码 源码等资料获取方法 一、临时设置密码 # 获取密码 config get requirepass # 设置密码为123456 config set requirepass 123456 # 验证密码。当设置密码后&#xff0c;进入redis就要验证 auth 密码 # 取消密码 config set requirep…

vscode插件开发之终端那些事儿

在开发vscode插件的时候&#xff0c;好几个设计都需要集成终端。 查资料后发现vsocd为开发者提供了丰富的终端API。 结合我自己的需求来展开终端的那些事儿吧&#xff1a; 从treeview中点击触发打开一个终端 无关的代码省略&#xff1a; vscode.window.createTerminal({name…

【JavaEE进阶】使用注解存储对象

使用注解存储对象 之前我们存储Bean时&#xff0c;需要在spring-config 中添加一行 bean注册内容才行&#xff0c;如下图所示&#xff1a; 问题引入&#xff1a;如果想在Spring 中能够更简单的进行对象的存储和读取&#xff0c;该怎么办呢&#xff1f; 问题解答&#xff1a;实…

Tomcat工作原理

一、Tomcat架构 ### 说明&#xff1a; Server&#xff1a;表示整个 Tomcat Catalina servlet 容器&#xff0c;Server 中可以有多个 Service。&#xff08;可以通过telenet 8005后连接后输入“SHUTDOWN” 注意这里是大写&#xff0c;来关闭服务&#xff09;Service&#xff1…

JavaScript中的 map, forEach 无法跳出循环, return和 break不起作用,可以使用every 和 some方法

在我们平时使用习惯中&#xff0c;for循环里要跳出整个循环是使用break&#xff0c;但在数组中用forEach循环或者map如要退出整个循环使用break会报错&#xff0c;使用return也不能跳出循环&#xff0c;以下我们就来探索一下正确的跳出循环方案 一、先看一下案例 1、forEach函…

通信算法之176: 基于Matlab的OFDM通信系统关键基带算法设计6-流程

一. 接收算法流程 粗同步&#xff08;分组检测&#xff09; 载波同步&#xff08;精细频偏估计&#xff09; 精同步&#xff08;OFDM起始&#xff0c;符号同步&#xff09; 1.4 信道估计&#xff08;长序列&#xff09; 1.5 信道均衡&#xff08;所有数据OFDM符号&#xff…