springboot集成nacos+gateway+feign

news2024/11/16 12:33:00

一、创建项目

1.创建一个maven项目

在这里插入图片描述

2.添加对应的pom参数

2.1添加工程对应的jar包

  <!-- 父工程 -->
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.6.7</version>
  </parent>

  <dependencies>
    <!-- lombok -->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
    </dependency>


  </dependencies>

  <dependencyManagement>
    <dependencies>
      <!-- springcloud的资源 -->
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>2021.0.5</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <!-- springcloudalibaba的资源 -->
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2.2.5.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

    </dependencies>
  </dependencyManagement>

3.查看项目整体结构

在这里插入图片描述

二、安装配置nacos

1.下载nacos

下载地址:https://nacos.io/download/nacos-server/
在这里插入图片描述

2.windows安装nacos

2.1解压文件

解压对应文件

2.2执行nacos

注意: 保证你的8848端口没有被占用;默认启动为集群服务,单个启动;

#到对应的bin目录下执行命令,单个启动nacos
startup.cmd -m standalone

在这里插入图片描述

3.创建nacos模块,发现服务列表

3.1服务结构

在这里插入图片描述

3.2发现服务代码

3.2.1返回实体类
@Data
public class NacosServiceInfo {
    //服务名称
    private String serviceName;
    //服务IP
    private String serviceIp;
    //服务端口
    private Integer servicePort;
    //所属集群
    private String clusterName;
    //服务权重
    private Double serviceWeight;
}

3.2.1代码实现

@RestController
@RequestMapping("nacos")
public class NacosServiceController {

    //Nacos的ip地址
    @Value("${spring.cloud.nacos.server-addr}")
    private String serverAddr;

    @GetMapping("getService")
    public ResultJson getService() {
        try {
            List<NacosServiceInfo> nacosServiceInfoList = new ArrayList<>();
            // Nacos 配置
            Properties properties = new Properties();
            properties.put("serverAddr", serverAddr);

            // 创建 NamingService 实例
            NamingService namingService = NacosFactory.createNamingService(properties);

            // 分页获取服务名称
            int pageNo = 1;
            int pageSize = 1000;
            boolean hasMore = true;

            while (hasMore) {
                // 获取服务名称列表
                List<String> serviceNames = namingService.getServicesOfServer(pageNo, pageSize).getData();
                hasMore = serviceNames.size() == pageSize;  // 如果返回的数据大小等于 pageSize,说明还有更多数据
                for (String serviceName : serviceNames) {
                    // 获取每个服务的所有实例
                    List<Instance> instances = namingService.getAllInstances(serviceName);
                    for (Instance instance : instances) {
                        NacosServiceInfo nacosServiceInfo = new NacosServiceInfo();
                        nacosServiceInfo.setServiceName(serviceName);
                        nacosServiceInfo.setServiceIp(instance.getIp());
                        nacosServiceInfo.setServicePort(instance.getPort());
                        nacosServiceInfo.setClusterName(instance.getClusterName());
                        nacosServiceInfo.setServiceWeight(instance.getWeight());
                        nacosServiceInfoList.add(nacosServiceInfo);
                    }
                }

                pageNo++;
            }
            return new ResultJson(nacosServiceInfoList);
        } catch (Exception e) {
            throw new ServiceException(e.getMessage());
        }
    }
}

三、集成gateway

1.创建getaway模块

在这里插入图片描述

2.pom文件编写

<!-- springcloud里面的gateway集成 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- nacos服务发现 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 负载均衡loadbalancer -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

3.配置路由分发

在yml中配置

spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848 #nacos注册地址
    gateway:
      routes:
        - id: nacos-service #服务名称不可重复
          uri: lb://nacos #路由地址
          predicates: #路径匹配
            - Path=/nacos/**
          filters: #过滤器
            - AddRequestHeader= titleColor, blue

4.跨域访问

4.1yml配置文件

spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848 #nacos注册地址
    gateway:
      globalcors:
        corsConfigurations:
          '[/**]':
            allowedOrigins:
              - "*"
            allowedMethods:
              - GET
              - POST
              - PUT
              - DELETE
              - OPTIONS
            allowedHeaders:
              - "*"
            allowCredentials: true

4.2config配置

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**") // 允许所有路径
                .allowedOrigins("http://example.com") // 允许的源地址
                .allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的方法
                .allowedHeaders("*") // 允许的请求头
                .allowCredentials(true); // 是否允许携带凭证
    }
}

注意: 这个需要spring-boot-starter-web这个jar包,但是与gateway不兼容,我们在子项目中加入这个配置来处理跨域,而不是在gateway来添加跨域;

四、集成feign

1.创建feign项目

在这里插入图片描述

2.引入对应pom配置

<!-- feign客户端依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- 引入httpClient依赖 -->
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-httpclient</artifactId>
</dependency>

3.编写对应api

@FeignClient(value = "nacos",contextId = "nacos",configuration = FeignConfig.class)
public interface NacosApi {
    @GetMapping("/nacos/getService")
    String getService();
}

4.对应启动类添加注解

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class NacosApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosApplication.class, args);
    }

}

5.feign调用

@RestController
@RequestMapping("admin")
public class TestController {

    @Resource
    private NacosApi nacosApi;

    @GetMapping("getService")
    public ResultJson getService(){
        System.out.println("----------------");
        ThreadLocalFeign.set("aaaaaaaaaaaaa");
        String nacosApiService = nacosApi.getService();
        return new ResultJson(JSONObject.parseObject(nacosApiService, ResultJson.class));
    }
}

注意: 调用会出现NacosApi 找不到,解决方案有两种
1.在启动类·添加注解,扫描包

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.mbb.feign.api")
public class AdminApplication {
    public static void main(String[] args) {
        SpringApplication.run(AdminApplication.class, args);
    }

}

2.在注解添加类扫描

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(clients = {NacosApi.class})
public class AdminApplication {
    public static void main(String[] args) {
        SpringApplication.run(AdminApplication.class, args);
    }

}

后面整合springsecurity和oauth2,上面不足之处望海涵,希望博友多多指教!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何有效评估与最大化利用专利价值?

专利价值评估是确定专利经济价值的关键环节。对于企业而言&#xff0c;准确评估专利价值可以帮助其做出明智的决策&#xff0c;如是否进行专利的投资、许可、转让等。同时&#xff0c;专利价值评估也为金融机构提供了重要的参考依据&#xff0c;有助于推动专利质押融资、证券化…

GetThreadSelectorEntry teb peb 段选择子 LDT_ENTRY _LDT_ENTRY

GetThreadSelectorEntry 函数原型 BOOL GetThreadSelectorEntry([in] HANDLE hThread,[in] DWORD dwSelector,[out] LPLDT_ENTRY lpSelectorEntry ); typedef struct _LDT_ENTRY {WORD LimitLow;WORD BaseLow;union {struct {BYTE BaseMid;BYTE Flags1;BYTE Fla…

Chroma 向量数据入门

Chroma 是 AI 原生的开源矢量数据库。Chroma 使知识、事实和技能可插入 LLM&#xff0c;从而可以轻松构建 LLM 应用程序。Chroma 是 AI 原生的开源矢量数据库。Chroma 使知识、事实和技能可插入 LLM&#xff0c;从而可以轻松构建 LLM 应用程序。 &#x1f31f;Chroma是一个文档…

WIN2008 iis安装与ASP设置

win2008 IIS安装在 Windows Server 2008 系统中安装IIS - morgan363 - 博客园 如何在 Windows Server 2008 系统中安装 IIS 呢&#xff1f;且看如下分解&#xff1a; 1、鼠标右键 “计算机”&#xff0c;选择“管理”&#xff0c;打开“服务器管理器”。 2、在“服务器管理器”…

【永磁同步电机(PMSM)】 3. 基于Matlab 的仿真与控制

【永磁同步电机&#xff08;PMSM&#xff09;】 3. 基于Matlab 的仿真与控制 1. 电机的仿真与控制2. BLDC 电机与 PMSM 电机3. BLDC 的方波控制4. 磁场定向控制&#xff08;FOC&#xff09;5. 空间矢量调制 (SVM)6. PMSM 模型的频率响应估计 电机仿真和控制是能源生产、汽车、航…

C语言贪吃蛇小游戏演示和说明

C语言贪吃蛇小游戏演示和说明 设计贪吃蛇游戏的主要目的是让大家夯实C语言基础&#xff0c;训练编程思维&#xff0c;培养解决问题的思路&#xff0c;领略多姿多彩的C语言。 游戏开始后&#xff0c;会在中间位置出现一条只有三个节点的贪吃蛇&#xff0c;并随机出现一个食物&am…

cpu路、核、线程、主频、缓存

路&#xff1a;主板插口实际插入的 CPU 个数&#xff0c;也可以理解为主板上支持的CPU的数量。每个CPU插槽可以插入一个物理处理器芯片。例如&#xff0c;一台服务器可能有2路或4路插槽&#xff0c;这意味着它最多可以安装2个或4个物理处理器。 核&#xff1a;单块 CPU 上面能…

代码随想录算法训练营第十四天|递归 226.翻转二叉树 101. 对称二叉树 104.二叉树的最大深度 111.二叉树的最小深度

226.翻转二叉树 翻转一棵二叉树。 思路&#xff1a; 在这里需要注意的是&#xff0c;在递归的时候唯独中序遍历是不可用的&#xff0c;这是因为先对左子树进行了反转&#xff0c;又对自身进行了反转&#xff0c;对自身反转后原本的左子树变成了右子树&#xff0c;如果此时又轮…

npm依赖安装的时候vue版本号报错处理

以下报错显示vue版本不对&#xff0c;需要改成这个版本"vue": "2.6.14"对应的版本 先看一下package.json中vue版本是多少 解决&#xff1a; npm install vue2.6.14

【重要提示】由于找不到msvcr110.dll 无法继续执行的解决途径全面解析

在使用Windows操作系统时&#xff0c;您可能会遇到这样的问题&#xff1a;某些应用程序在启动时提示“由于找不到 msvcr110.dll&#xff0c;无法继续执行代码。重新安装程序可能会解决此问题。” 这种错误通常会导致应用程序无法正常运行&#xff0c;影响用户体验。本文将全面介…

django开发流程1

一、官方网站&#xff1a; Django documentation | Django documentation | Djangohttps://docs.djangoproject.com/en/5.1/ 1.安装 django : pip install django 2. django项目的配置文件 (settings.py) BASE_DIR 项目根路径 DEBUG 调试模式 INSTALLE…

如何在算家云搭建CodeFormer(照片修复)

一、CodeFormer简介 CodeFormer 是一款强大的人工智能工具&#xff0c;专为处理低质量、损坏或模糊的面部图像而设计&#xff0c;主要用于图像和视频的修复和增强。它基于深度学习技术&#xff0c;通过先进的生成对抗网络&#xff08;GAN&#xff09;和自监督学习技术&#xf…

【LeetCode热题100】模拟

这篇博客记录了模拟相关的题目&#xff0c;也就是按照题目的描述写代码&#xff0c;很锻炼代码实现能力&#xff0c;包括了替换所有的问号、Z字形变换、外观数列、数青蛙4道题。 class Solution { public:string modifyString(string s) {int n s.size();for(int i 0 ; i <…

《数据结构与算法之美》学习笔记五之队列

前情提要&#xff1a;上一章学习了栈相关的知识&#xff0c;主要有下面的内容&#xff1a; 栈操作的时间复杂度&#xff0c;对于顺序栈&#xff0c;入栈时如果栈的空间不够涉及到数据搬移&#xff0c;此时使用摊还分析法&#xff0c;将数据搬移的耗时均摊到不需要搬移数据的入…

DeFi强势回归:新一轮DeFi牛市即将到来?

自2020年夏天的“DeFi之夏”以来&#xff0c;去中心化金融&#xff08;DeFi&#xff09;一直是加密行业的关键组成部分。“DeFi之夏”不仅将去中心化金融概念带入了实践&#xff0c;而且极大地推动了DeFi协议和应用的爆发式增长。尽管之后的市场经历了周期性的调整&#xff0c;…

【C++类的设计】题目(二):设计圆柱Column类

题目&#xff1a;设一个用于处理圆柱体的类Column&#xff0c;要求如下 (1)类中包含成员有&#xff1a;表示圆柱体底面半径的私有数据成员r&#xff0c;表示圆柱体高的私有数据成员h&#xff1b;构造对象时为私有数据成员赋值的构造函数&#xff0c;用于计算圆柱体表面积的函数…

OpenFeign使用详解

什么是OpenFeign&#xff1f; OpenFeign 是一个声明式的 HTTP 客户端&#xff0c;旨在简化微服务架构中不同服务之间的 HTTP 调用。它通过集成 Ribbon 实现了客户端负载均衡&#xff0c;并且能够与 Eureka、Consul 等服务发现组件无缝对接。使用 OpenFeign&#xff0c;开发者只…

如何使用ssm实现基于java web的防疫工作志愿者服务平台的设计与实现

TOC ssm693基于java web的防疫工作志愿者服务平台的设计与实现jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进…

Focalboard开源项目管理系统本地Windows部署与远程访问协同办公

文章目录 前言1. 使用Docker本地部署Focalboard1.1 在Windows中安装 Docker1.2 使用Docker部署Focalboard 2. 安装Cpolar内网穿透工具3. 实现公网访问Focalboard4. 固定Focalboard公网地址 &#x1f4a1; 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&am…