zookeeper 注册中心升级 nacos-程序员宅基地

技术标签: java  zookeeper  spring cloud  

升级背景

因项目使用的框架比较老,而且zk作为注册中心其实是有问题的,因为zk不是高可用的(详情请自行百度zk leader选举机制),经内部决定,将升级成nacos为注册中心(配置中心功能暂时不需要)

升级过程

版本选择

Spring Cloud Alibaba Version Sentinel Version Nacos Version RocketMQ Version Dubbo Version Seata Version
2.2.7.RELEASE 1.8.1 2.0.3 4.6.1 2.7.13 1.3.0
2.2.6.RELEASE 1.8.1 1.4.2 4.4.0 2.7.8 1.3.0
2021.1 or 2.2.5.RELEASE or 2.1.4.RELEASE or 2.0.4.RELEASE 1.8.0 1.4.1 4.4.0 2.7.8 1.3.0
2.2.3.RELEASE or 2.1.3.RELEASE or 2.0.3.RELEASE 1.8.0 1.3.3 4.4.0 2.7.8 1.3.0
2.2.1.RELEASE or 2.1.2.RELEASE or 2.0.2.RELEASE 1.7.1 1.2.1 4.4.0 2.7.6 1.2.0
2.2.0.RELEASE 1.7.1 1.1.4 4.4.0 2.7.4.1 1.0.0
2.1.1.RELEASE or 2.0.1.RELEASE or 1.5.1.RELEASE 1.7.0 1.1.4 4.4.0 2.7.3 0.9.0
2.1.0.RELEASE or 2.0.0.RELEASE or 1.5.0.RELEASE 1.6.3 1.1.1 4.4.0 2.7.3 0.7.1
SCA版本说明:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
因项目springboot版本使用的是1.5.9.RELEASE,最终选择nacos版本1.4.1

将原本的zk注册中心的包注释掉

<!--        <dependency>-->
<!--            <groupId>org.springframework.cloud</groupId>-->
<!--            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>-->
<!--            <version>1.2.0.RELEASE</version>-->
<!--        </dependency>-->

引入nacos注册中心的包

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependencyManagement>
    <dependencies>
        <!--整合springCloud -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Edgware.SR4</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

        <!-- 整合springcloud-alibaba-nacos(服务管理中心) -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>1.5.1.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    <!-- 暂时不需要配置中心 -->
    <!--  <dependency>-->
    <!--      <groupId>com.alibaba.cloud</groupId>-->
    <!--      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>-->
    <!--      <version>1.5.1.RELEASE</version>-->
    <!--  </dependency>-->
    </dependencies>
</dependencyManagement>

最后修改项目的nacos配置

spring:
  cloud: 
    nacos: 
      discovery:
        server-addr: localhost:8848

后续问题跟进

1.项目部署到服务上 发现客户端没有注册功能并且没有注册日志打印,服务端服务列表没有显示改服务注册上来,后排查发现和部署方式有关,在打war包部署到外置tomcat的时候,nacos会获取不到外部tomcat端口,从而导致注册失败而且没注册日志打印,解决方法:

新增配置类

import com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.management.Query;
import java.lang.management.ManagementFactory;
import java.util.Set;

@Component
@Slf4j
public class NacosConfig implements ApplicationRunner {
    

    @Autowired(required = false)
    private NacosAutoServiceRegistration registration;

    @Value("${server.port}")
    Integer port;

    @Override
    public void run(ApplicationArguments args) {
    
        if (registration != null && port != null) {
    
            Integer tomcatPort = port;
            try {
    
                tomcatPort = new Integer(getTomcatPort());
            } catch (Exception e) {
    
                e.printStackTrace();
            }

            registration.setPort(tomcatPort);
            registration.start();
        }
    }

    /**
     * 获取外部tomcat端口
     */
    public String getTomcatPort() throws Exception {
    
        MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer();
        Set<ObjectName> objectNames = beanServer.queryNames(new ObjectName("*:type=Connector,*"), Query.match(Query.attr("protocol"), Query.value("HTTP/1.1")));
        String port = objectNames.iterator().next().getKeyProperty("port");
        log.info("获取外部tomcat端口=={}", port);
        return port;
    }
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014596024/article/details/122000019

智能推荐

华为ensp40报错的个人解决方法_enso ar 40-程序员宅基地

文章浏览阅读3.7k次,点赞6次,收藏21次。华为ensp启动AR设备时40报错的解决近期因学习要求,需要使用华为的ensp模拟器,在安装并使用的过程中呢,遇到了最常见的AR设备启动时40报错,防火墙也设置了关闭,hyper-V在系统中也设置了关闭,不断的卸载和安装了各种VM VirtuallBox和eNsp的各种版本,还是无效,在VM VirtualBox中的AR_Base也一直启动不了,对于一直接触思科的我来说实属心累,在连续俩天的摸索中发现自己忽略了最根本的问题,因此,写下这个过程并解决,希望对你们也有帮助。此方法不代表所有的40报错问..._enso ar 40

【Shi-Tomasi角点检测+SIFT特征匹配】OpenCV&C++实现_opencv 4.0 shi-tomas c++-程序员宅基地

文章浏览阅读2.2k次,点赞7次,收藏24次。在进行SIFT特征提取时,由于会提取数量较多的尺度空间特征点,会导致特征向量提取和特征点匹配环节的用时较长。在三维测量等应用条件下,角点是进行测量的关键点,因此采用Shi-Tomasi或Harris角点检测提取关键的特征点,可以减少冗余无效的特征点,提升运算的实时性。接下来介绍在编程时遇到的两个问题:1.如何用角点提取结果生成特征描述子Shi-Tomasi角点检测函数如下:goodFeatu..._opencv 4.0 shi-tomas c++

VMware vCenter任意文件读取漏洞_vmware directory service 漏洞-程序员宅基地

文章浏览阅读2.2k次。参考:https://twitter.com/ptswarm/status/1316016337550938122【安全风险通告】VMware vCenter任意文件读取漏洞安全风险通告安装:https://blog.csdn.net/shida_csdn/article/details/82863169https://www.miensi.com/352.html安装有点麻烦,算了。下载:https://my.vmware.com/en/web/vmware/downloads/det_vmware directory service 漏洞

Delphi 从内存中运行执行文件_delphi movememory(@pointer(baseaddress)[optionalhe-程序员宅基地

文章浏览阅读2.7k次。windows似乎只提供了一种启动进程的方法:即必须从一个可执行文件中加载并启动。 而下面这段代码就是提供一种可以直接从内存中启动一个exe的变通办法。 用途嘛, 也许可以用来保护你的exe,你可以对要保护的 exe 进行任意切分、加密、存储, 只要运行时能将exe的内容正确拼接到一块内存中,就可以直接从内存中启动,而不必不安全地去 _delphi movememory(@pointer(baseaddress)[optionalheadersizeoffset], @subsyste

markdown语法教程_markdown 颜色方块-程序员宅基地

文章浏览阅读105次。markdown语法教程1. 标题一级标题(#)二级标题(##)三级标题(###)四级标题(####)五级标题(#####)六级标题(######) 2. 段落格式换行(两个空格+回车)斜体(*文本*)粗体(**文本**)粗斜体(***文本***)分割线(---)删除线(~~文本~ ~)下划线(<u>文本</u>)脚注([^文本..._markdown 颜色方块

Linux进程状态解析 之 R、S、D、T、Z、X (主要有三个状态)_zl是什么进程-程序员宅基地

文章浏览阅读3.8k次,点赞3次,收藏9次。linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态。Linux进程状态:R (TASK_RUNNING),可执行状态。 只有在该状态的进程才可能在CPU上运行。而同一时刻可能有多个进程处于可执行状态,这些进程的task_struct结构(进程控制块)被放入对应CPU的可执行队列中(一个进程最多只能出现在一个CP..._zl是什么进程

随便推点

2024最新Android常用开源库总结,Android校招面试指南_android 飞书开源-程序员宅基地

文章浏览阅读397次,点赞5次,收藏3次。PS:之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。一共十个专题,包括了Android进阶所有学习资料,Android进阶视频,Flutter,java基础,kotlin,NDK模块,计算机网络,数据结构与算法,微信小程序,面试题解析,framework源码!1、Html5项目实战。

Mysql深度分页问题-程序员宅基地

文章浏览阅读31次。sql语句执行结果 从执行结果中可以看出,随着分页偏移量的增加,sql执行的时间会越来越长。这是为什么呢因为查询时 MySQL 并不是跳过 offset行,而是取 offset+N 行,然后放弃前 offset行,最后返回 N 行,当 offset特别大的时候,效率就非常的低下。拿 limit 10000, 10 这条语句来说明一下, MySQL在执行这条查询的时候,需要查询 10010 (10000 + 10) 条记录,然后只返回最后 10 条,并将前面的 10000 条记录抛弃,这样当翻页越靠

Security Considerations_security considerations d.13.1 reasoning-程序员宅基地

文章浏览阅读142次。The Apache Tomcat Servlet/JSP Container Apache Tomcat 7Version 7.0.103, Mar 16 2020 Apache LogoLinksDocs HomeFAQUser CommentsUser Guide1) Introduction2) Setup3) First webapp4) Deployer5)..._security considerations d.13.1 reasoning

【寒假每日一题】奖学金(个人练习)详细题解+推导证明(第十天)_某小学最近得到-程序员宅基地

文章浏览阅读1.2k次。文章目录前言题目详细题解写法1 O(nlogn)O(nlogn)O(nlogn)推导证明写法2 O(nlogn)O(nlogn)O(nlogn)推导证明写法3 O(nlogn)O(nlogn)O(nlogn)推导证明举一反三总结前言今天是一个简单题,就是复习一下比较函数的三种写法,分别是重载,自定义和lambda表达式。下面直接看题。题目某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果_某小学最近得到

Spring Boot 实战 MongoDB 实现批量写入_mongo 批量保存-程序员宅基地

文章浏览阅读1.1k次。使用 Spring Boot for MongoDB 实现批量写入_mongo 批量保存

如何使用siege对后端接口进行压力测试_siege测试参数关联的接口-程序员宅基地

文章浏览阅读264次。进入电脑终端后执行以下命令:siege -c 100 -r 5 -b'http://192.168.101.173:31003/demo/interface_name POST'没有安装siege的先安装,这里的“-c 100”指的是并发量是100,“-r 5”指的是发送请求的次数是5次,-b指的是请求等待时间默认为0,单引号中的内容便是接口的地址,尾部的POST表示请求方式,注意这里的引号是不能省略的,如果省略则默认的是GET请求了,测试返回的值会出错。..._siege测试参数关联的接口