我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SpringCloud服务实现同时使用eureka和nacos方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SpringCloud服务实现同时使用eureka和nacos方法

一,背景

之所以会想到一个服务同时使用eureka和nacos,是因为遇到一个需求,配置数据是存储在nacos的配置中,然后使用该配置的服务却是在一个eureka环境中。所以此时就需要一个代理服务,它既能够从nacos的config中获取配置数据,又是注册到eureka注册中心中。

二,代理服务创建和配置

2.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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>lmc-tools</artifactId>
        <groupId>com.lmc</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>tools-2-eureka-nacos</artifactId>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.lmc</groupId>
            <artifactId>tools-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
<!--        <dependency>-->
<!--            <groupId>com.alibaba.cloud</groupId>-->
<!--            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>-->
<!--            <version>2021.1</version>-->
<!--        </dependency>-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2021.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

注意,关于nacos,在该服务中不能引入spring-cloud-starter-alibaba-nacos-discovery依赖,只需要引入spring-cloud-starter-alibaba-nacos-config

2.2 bootstrap.yml

server:
  port: 9006
  servlet:
    context-path: /eureka-proxy

spring:
  application:
    name: tools-eureka-proxy
  profiles:
    active: dev
management:
  endpoints:
    web:
      exposure:
        include: "*"

bootstrap-dev.yml

spring:
  cloud:
    nacos:
      server-addr: localhost:9000
      config:
        namespace: 8628e5dd-a236-4016-b94f-565a001faf2f
        file-extension: yaml  # 配置内容的数据格式
        extension-configs[0]:
          data-id: ${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
          group: dev
          refresh: true

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
    registry-fetch-interval-seconds: 10
  instance:
    instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port} # 实例名:application:ip:port
    prefer-ip-address: true # 优先使用IP地址作为主机名的标识
    lease-renewal-interval-in-seconds: 180 # 续约更新时间间隔
    lease-expiration-duration-in-seconds: 200

2.3 Application.java

package per.lmc.tools2.eureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

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

2.4 创建接口

2.4.1 ApiMessageController.java

package per.lmc.tools2.eureka.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import per.lmc.tools2.eureka.config.MyNacosProperties;
import com.lmc.common.enums.LanguageEnum;
import com.lmc.common.enums.SplitEnum;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@RestController
@RequestMapping("/apiMessages")
public class ApiMessageController {
    @Autowired
    private MyNacosProperties myNacosProperties;
    
    @GetMapping("/getAll")
    public Map<String, String> apiMessages(String language) {
        List<String> apiMessages = myNacosProperties.getApiMessages();
        Map<String, String> result = new HashMap<>(20);
        if (!CollectionUtils.isEmpty(apiMessages)) {
            if (LanguageEnum.English.value().equalsIgnoreCase(language)) {
                apiMessages.forEach(a -> result.put(a.split(SplitEnum.API_MESSAGE_SPLIT.value())[0], a.split(SplitEnum.API_MESSAGE_SPLIT.value())[2]));
            }else {
                apiMessages.forEach(a -> result.put(a.split(SplitEnum.API_MESSAGE_SPLIT.value())[0], a.split(SplitEnum.API_MESSAGE_SPLIT.value())[1]));
            }
        }
        return result;
    }
    
    @GetMapping("/getOne")
    public String getMessage(String language, String code) {
        // 获取指定code的记录
        List<String> apiMessages = myNacosProperties.getApiMessages().stream().filter(a -> a.startsWith(code)).collect(Collectors.toList());
        if (CollectionUtils.isEmpty(apiMessages)) {
            return String.format("不存在code为%s的记录", code);
        }
        if (LanguageEnum.English.value().equalsIgnoreCase(language)) {
            return apiMessages.get(0).split(SplitEnum.API_MESSAGE_SPLIT.value())[2];
        }else {
            return apiMessages.get(0).split(SplitEnum.API_MESSAGE_SPLIT.value())[1];
        }
    }
}

2.4.2 MyNacosProperties.java

package per.lmc.tools2.eureka.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;
import java.util.List;

@Configuration
@ConfigurationProperties(prefix = "tools")
@RefreshScope
@Data
public class MyNacosProperties {
    List<String> apiMessages;
}

在nacos中的配置如下所示:

2.5 运行测试

运行服务,访问 http://localhost:9006/eureka-proxy/apiMessages/getAll?language=en,能成功获取到数据

{"1000":"missing parameter","2000":"server internal exception","0000":"operation succeeded"}

三,将该服务引入eureka注册中心

上面服务实际上已经注册到eureka注册中心中,但是,实际上使用中,我们都是通过网关访问的,所以在网关服务的application.yml中,补充下该服务的路由

server:
  port: 8764
  servlet:
    context-path: /lmc

spring:
  application:
    name: tools-gateway
  profiles:
    active: dev
  cloud:
    # 消息总线
    bus:
      trace:
        enabled: true
    # 网关配置
    gateway:
      discovery:
        locator:
          enabled: true # 开启根据注册中心路由,并随服务的改变而改变路由
          lower-case-service-id: true # 开启服务名转为小写
#        globalcors:
#        default-filters:
#        - PreserveHostHeader #发送原主机头
      routes:
        - id: tools-task
          uri: lb://tools-task
#          uri: http://localhost:8083
          predicates:
            - Path=/tltk/**
        - id: tools-admin
          uri: lb://tools-admin
          predicates:
            - Path=/monitor/**
          filters:
            - PreserveHostHeader #发送网关原始主机头
        - id: tools-demo
          uri: lb://tools-demo
          predicates:
            - Path=/demo/**
        - id: tools-eureka-proxy
          uri: lb://tools-eureka-proxy
          predicates:
            - Path=/eureka-proxy/**

eureka:
  client:
    registry-fetch-interval-seconds: 10
  instance:
    instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port} # 实例名:application:ip:port
    prefer-ip-address: true # 优先使用IP地址作为主机名的标识
    lease-renewal-interval-in-seconds: 180 # 续约更新时间间隔
    lease-expiration-duration-in-seconds: 200
    #  项目配置有 server.servlet.context-path 属性,想要被 spring boot admin 监控,就要配置以下属性
    health-check-url: http://${spring.cloud.client.ip-address}:${server.port}/actuator/health

# 暴露监控断点
management:
  endpoints:
    web:
      exposure:
        include: "*"
      health:
        show-details: always

logging:
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n"
    file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n"

然后重启网关服务,访问 http://localhost:8764/eureka-proxy/apiMessages/getAll,得到

{"1000":"缺少参数","2000":"服务器内部异常","0000":"操作成功"}

因此,eureka成功从nacos获取数据。

到此这篇关于SpringCloud服务实现同时使用eureka和nacos方法介绍的文章就介绍到这了,更多相关SpringCloud eureka和nacos内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SpringCloud服务实现同时使用eureka和nacos方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SpringCloud服务实现同时使用eureka和nacos方法

这篇文章主要介绍了SpringCloud服务实现同时使用eureka和nacos方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2023-01-11

SpringCloud使用Resilience4j实现服务熔断的方法

服务熔断是为了保护我们的服务,比如当某个服务出现问题的时候,控制打向它的流量,让它有时间去恢复,或者限制一段时间只能有固定数量的请求打向这个服务,这篇文章主要介绍了SpringCloud使用Resilience4j实现服务熔断,需要的朋友可以参考下
2022-12-29

怎么在SpringCloud中使用Eureka实现服务之间的传递数据

这期内容当中小编将会给大家带来有关怎么在SpringCloud中使用Eureka实现服务之间的传递数据,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、使用RestTemplate+Ip方式:1、传递数据
2023-06-15

SpringCloud openfeign声明式服务调用实现方法介绍

在springcloud中,openfeign是取代了feign作为负载均衡组件的,feign最早是netflix提供的,他是一个轻量级的支持RESTful的http服务调用框架,内置了ribbon,而ribbon可以提供负载均衡机制,因此feign可以作为一个负载均衡的远程服务调用框架使用
2022-12-08

使用ntpdate工具校正linux服务器时间(实现方法)

当Linux服务器的时间不对的时候,可以使用ntpdate工具来校正时间。 安装:yum install ntpdate ntpdate简单用法: # ntpdate ip # ntpdate 210.72.145.44 以下是一些可用的N
2022-06-04

Spring Boot使用Schedule实现定时任务的方法

这篇文章主要介绍了Spring Boot使用Schedule实现定时任务,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-03-22

用nodejs实现json和jsonp服务的方法

一、JSON和JSONP JSONP的全称是JSON with Padding,由于同源策略的限制,XmlHttpRequest只允许请求当前源(协议,域名,端口)的资源。如果要进行跨域请求,我们可以通过使用html的script标记来进行
2022-06-04

使用Java实现定时任务的方法有哪些

使用Java实现定时任务的方法有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、 sleep这也是我们最常用的 sleep 休眠大法,不只是当作休眠用,我们还可以利用它很
2023-06-08

阿里云服务器ECS和RDS的使用方法及实例

随着云计算的普及,越来越多的企业开始采用阿里云服务器ECS和RDS进行数据存储和处理。本文将详细介绍如何使用阿里云服务器ECS和RDS,并给出实例。阿里云服务器ECS和RDS是阿里云提供的两种云服务,它们可以帮助企业实现更高效的数据处理和存储。首先,让我们来看看如何使用阿里云服务器ECS。阿里云服务器ECS是阿里
阿里云服务器ECS和RDS的使用方法及实例
2023-11-08

怎么使用云服务器实现内网穿透服务功能的方法

使用云服务器实现内网穿透服务功能是一种常见的网络攻击手段,它可以通过网络攻击的方式获取受害者的机密信息和个人信息,并进行攻击行为。以下是使用云服务器实现内网穿透服务功能的方法:准备工作:首先需要准备好云服务器,并配置好网络协议、端口等信息。内网穿透服务功能:在网关处添加防火墙设备,允许访问内部网络。可以使用网关防火墙或者防火墙软件的内部网穿透模块来实现。端口获取:在需要访问网络的计算机上
2023-10-26

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录