微服务--nacos+feign

        微服务使用到了我们的多模块开发,父级工程可以在modules管理子模块

        子模块中也会定义父模块

1. Nacos注册中心

        Nacos已成为Java微服务生态的事实标准组件,在2023年中国Java开发者调研中占比达62%。其优势在于将服务发现与配置管理统一,显著降低运维复杂度。建议新项目直接采用Nacos 2.0+版本(性能提升50%),对于历史Eureka系统可参考阿里云提供的迁移工具

双重角色

  • 服务注册中心(替代Eureka)

  • 动态配置中心(替代Spring Cloud Config)

  • 阿里巴巴开源,支持K8s原生服务发现

1.1 启动nacos

        打开nacos文件路径下bin目录,cmd命令(startup.cmd -m standalone)运行nacos

        启动之后通过服务网址(http://localhost:8848/nacos/index.html)进行访问

1.2 将项目注册到Nacos

  • 父工程导入依赖

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2023.0.1.2</version><type>pom</type><scope>import</scope>
</dependency>
  • 在子模块添加nacos依赖

<!--        nacos核心依赖       --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
  • 修改子模块的application.yml配置

server:port: 8080
spring:cloud:nacos:server-addr: localhost:8848 # Nacos服务地址(包括IP和端口)discovery:# Nacos认证信息,用于注册与发现服务username: nacospassword: nacosapplication:name: orderservice # 当前应用的服务名称,在Nacos中注册使用datasource:url: jdbc:mysql://localhost:3306/cloud-order?useSSL=false&allowPublicKeyRetrieval=true # 数据库连接URL配置username: root # 数据库登录用户名password: 1234 # 数据库登录密码driver-class-name: com.mysql.cj.jdbc.Driver # JDBC驱动类名mybatis:type-aliases-package: com.itgaohe.user.pojoconfiguration:map-underscore-to-camel-case: true
logging:level:com.itgaohe: debugpattern:dateformat: MM-dd HH:mm:ss:SSS

        重启服务,查看nacos服务官网,就会有服务

2. feign 远程调用

        声明式HTTP客户端,将REST调用抽象为Java接口调用,实现远程调用本地化
(属于Spring Cloud Netflix组件,现为OpenFeign)

集成点实现方式示例配置
负载均衡自动装配Ribbon/LoadBalancer@LoadBalanced
服务发现对接Nacos/Eurekaspring.cloud.nacos.discovery
熔断降级支持Hystrix/Sentinelfeign.circuitbreaker.enabled=true

 

        这里有一个服务提供者和服务消费者模块,想要实现服务生产者调用服务消费者

        我们使用多模块开发来实现Feign远程调用案例,步骤如下:

2.1 创建feign-api,导入Feign依赖

<?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>cloud-demo</artifactId><groupId>com.itgaohe</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>feign-api</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties><dependencies><!--nacos配置管理依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!--bootstrap依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId><version>3.0.3</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies></project>

2.2 feign-api模块

        在feign-api下将服务提供者orderserver下的相关包复制到feign-api项目中

  •  feign启动类
package com.itgaohe.feign;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class FeignApplication {public static void main(String[] args) {SpringApplication.run(FeignApplication.class, args);}
}
  • FeignClients 

        接口层,定义接口

package com.itgaohe.feign.clients;import com.itgaohe.feign.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;/*** Feign客户端接口,用于调用用户服务*/
@FeignClient(name = "userservice") // 指定要调用的服务名称
public interface UserClients {/*** 根据用户ID查询用户信息* @param id 用户ID* @return 返回对应的用户对象*/@GetMapping("/{id}") // 定义GET请求映射路径public User queryById(@PathVariable("id") Long id); // 通过路径变量传递用户ID}

         @FeignClient注解name跟的一定是要调用的服务名称

2.3 在服务提供者pom文件中引入feign-api依赖

<?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>cloud-demo</artifactId><groupId>com.itgaohe</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>order-service</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties><dependencies><dependency><groupId>com.itgaohe</groupId><artifactId>feign-api</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--nacos配置管理依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!--bootstrap依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId><version>3.0.3</version></dependency><!--nacos配置管理依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!--bootstrap依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId><version>3.0.3</version></dependency><!-- nacos客户端依赖 --><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><dependency><groupId>com.itgaohe</groupId><artifactId>user-service</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.1.4.RELEASE</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies>
</project>

2.4 在服务消费者启动类添加注解,启动Feign服务

         这样就可以进行调用了~

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

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

相关文章

基于Python的二手房源信息爬取与分析的设计和实现,7000字论文编写

摘要 本文设计并实现了一个基于 Python 的二手房源信息爬取与分析系统。该系统通过网络爬虫技术自动从房地产网站获取二手房源信息&#xff0c;经过数据清洗、存储后进行多维度分析&#xff0c;并通过可视化界面展示分析结果。系统采用模块化设计&#xff0c;包括爬虫模块、数…

力扣HOT100之栈:739. 每日温度

这道题是单调栈的一个经典应用&#xff0c;这里我们使用单调递减的栈&#xff08;从栈底到栈顶单调递减&#xff09;来实现&#xff0c;首先我们创建一个与temperatures大小一致的全0数组result&#xff0c;然后我们通过一个for循环&#xff0c;通过下标访问的方式遍历所有元素…

vue3 报错Missing semicolon

快速定位问题&#xff1a; 一、在git中对比改动&#xff0c;实在不行重置。 二、找分号或逗号 三、误碰键盘&#xff0c;多了空格or一些字母&#xff0c;删除即可。如下

在pyCharm中创建新的conda环境

在conda中创建pychars环境 打开 CMD 或 PowerShell 或 Anaconda Prompt 输入以下命令&#xff1a; conda create -n pychars python3.10你可以把 3.10 换成你需要的 Python 版本&#xff0c;如 3.9、3.11 等。 创建完成后激活环境&#xff1a; conda activate pychars在 Py…

如何确定某个路由器的路由表?(计算机网络)

以下题为例 题目说要路由表关键是目的网络地址和下一跳地址 那么我们第一步先确定目的网络地址。 一共有四个网络&#xff0c;即有四个目的网络地址&#xff1a;15.0.0.0 20.0.0.0 30.0.0.0 40.0.0.0 下一跳地址就是去往目地网络的下一个ip地址 。 我们这里是要的…

ubuntu 系统 多条命令通过 bash 脚本执行

ubuntu 系统 多条命令通过 bash 脚本执行。 1、新建sh脚本。 vim run.sh 2、示例命令&#xff0c;写入run.sh文件内&#xff0c;具体命令如下: #!/bin/bash# 切换到指定目录 cd /work_space/build/bin# 执行程序 ./demo 3、给sh脚本权限。 chmod x run.sh 4、执行sh脚本…

《拆解问题的技术》笔记

思维导图 拆解问题的技术 拆解职场难题 拆解项目难题 拆解简报企划难题 拆解学习难题 拆解人生难题

langChain构建ChatRobot(1)—基础对话

摘要&#xff1a;本文介绍利用langChain核心组件Models里的Chat Models构建基本的Chatbot&#xff0c;能实现简单的问答。 文章目录 概述Chat Model1. message对象1.1 消息类型介绍&#xff1a;1.2 使用场景&#xff1a; 2. 利用ChatModel构建简单的 Chatbot2.1 实现基本的问答…

行为模式-迭代器模式

定义&#xff1a; Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.&#xff08;它提供一种方法访问一个容器对象中各个元素&#xff0c;而又不需暴露该 对象的内部细节。&#xff09; 迭代器模式通…

图像处理算法的学习笔记

一、常见噪声简介 1. 高斯噪声 最普遍&#xff0c;最难用肉眼精确判断。图像整体看起来"颗粒感"很强&#xff0c;像蒙了一层半透明的"薄纱"或"雪花点"&#xff08;就像老式电视的雪花屏&#xff09;&#xff0c;覆盖整个画面。噪声点是细小的、…

《Java开发工具全解析:从基础到前沿》

一、引言 在当今数字化时代&#xff0c;软件开发犹如一座庞大而复杂的大厦&#xff0c;支撑着我们生活中方方面面的应用。而 Java&#xff0c;作为软件开发领域中极为重要的一门编程语言&#xff0c;宛如大厦的基石&#xff0c;发挥着不可替代的关键作用。 自 1995 年正式诞生…

[11-4]SPI通信外设 江协科技学习笔记(5个知识点)

1 2 3 TDR、TXE、RDR、RXNE 这些术语通常与串行通信接口有关&#xff0c;特别是在使用 UART&#xff08;通用异步收发传输器&#xff09;或 USART&#xff08;通用同步/异步收发传输器&#xff09;时。下面是每个术语的含义和用途&#xff1a; • TDR(Transmit Data Register)&…

NB/T 32004-2018测试是什么,光伏并网逆变器NB/T 32004测试项目

NB/T 32004-2018测试是什么&#xff0c;光伏并网逆变器NB/T 32004测试项目 根据NB/T 32004-2018《光伏并网逆变器技术规范》&#xff0c;光伏并网逆变器的测试项目涵盖电气性能、安全保护、环境适应性、电磁兼容性及并网性能五大类&#xff0c;共42项核心测试内容。以下是关键测…

数据可视化——一图胜千言

第04篇&#xff1a;数据可视化——一图胜千言 写在前面&#xff1a;大家好&#xff0c;我是蓝皮怪&#xff01;前面几篇我们聊了统计学的基本概念、数据类型和描述性统计&#xff0c;这一篇我们要聊聊数据分析中最直观、最有趣的部分——数据可视化。你有没有发现&#xff0c;很…

日常运维问题汇总_41

121.MIGO工单投料时&#xff0c;尽管MMBE显示库存地点1002/1003有库存&#xff0c;但系统还是提示报错&#xff1a;工厂2233未发现存储地点1002的命中数&#xff0c;消息编号MIGO010&#xff0c;如下图所示&#xff1a; 解决方法&#xff1a; T-CODE:OX09,增加工厂2233下的库存…

Monte Carlo衍生品定价(金融工程)

Monte Carlo衍生品定价&#xff08;金融工程&#xff09; 基于Monte Carlo模拟方法的衍生品定价综合MATLAB实现。本项目为金融工程应用提供完整框架&#xff0c;具有专业级代码、真实市场数据集成和详细文档。 &#x1f4cb; 目录 项目概述功能特性项目结构安装说明使用方法…

Kubernetes服务部署——RabbitMQ(集群版)

1、简介 RabbitMQ 是一个广泛使用的开源消息队列系统&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;&#xff0c;并且支持多种消息传递机制。它作为一个中间件&#xff0c;负责解耦不同应用程序或服务之间的通信&#xff0c;通过高效的消息传递和排队机制…

从离散控制到集成管理:Modbus TCP转CANopen网关重构烟丝膨胀生产线

在工业自动化和控制系统中&#xff0c;ModbusTCP和CANopen是两种广泛应用的通信协议。它们各自具有独特的优势&#xff0c;但在实际应用中往往需要将两者结合起来&#xff0c;以满足特定的需求。本文将探讨如何实现小疆智控ModbusTCP转CANopen网关GW-CANZ-TCPC&#xff0c;并阐…

使用离线依赖解决Android Studio编译报错(下载不了jar)——笔记

报错如图 What went wrong: Execution failed for task ‘:app:lintVitalAnalyzeRelease’. Could not resolve all files for configuration ‘:app:detachedConfiguration1’. Could not download groovy-3.0.22.jar (org.codehaus.groovy:groovy:3.0.22) Could not get reso…

终端警告“加载用户设置时遇到错误找到一个带有无效“icon“的配置文件。将该配置文件默认为无图标。确保设置“icon“时,该值是图像的有效文件路径“

终端警告“加载用户设置时遇到错误找到一个带有无效“icon“的配置文件。将该配置文件默认为无图标。确保设置“icon“时&#xff0c;该值是图像的有效文件路径“ 问题如下 在 CMD 命令窗口选择 设置 ​ 看一下这里的几个终端是否有图像&#xff0c;如果存在没有图像的终端&am…