nacos 部署 配置

news2024/11/17 14:51:05

文章目录

    • 一、Nacos简介
      • 1、为什么叫Nacos
      • 2、Nacos是什么
      • 3、能干嘛
      • 4、去哪下
    • 二、安装并运行Nacos
      • 2.1 基础环境及配置:
    • 三、Nacos作为服务注册中心演示
      • 3.1 基于Nacos的服务提供者
        • 2、POM文件
        • 3、YML文件
        • 4、主启动
        • 5、业务类
        • 6、测试
        • 7、nacos控制台
    • 3.2 基于Nacos的服务消费者
        • 1、新建Module(cloudalibaba-consumer-nacos-order83)
        • 2、POM文件
        • 3、YML文件
        • 4、主启动
        • 5、业务类
        • 6、测试
        • 7. Nacos支持AP和CP模式的切换
    • 四、Nacos作为服务配置中心演示
      • Nacos作为配置中心-基础配置
        • 1、新建Module(cloudalibaba-config-nacos-client3377)
        • 2、POM文件
        • 3、YML
        • 4、主启动
        • 5、业务类
        • 6、在Nacos中添加配置信息
        • 7、Nacos中的匹配规则
        • 运行后找不到配置文件 :这里有大坑
    • 五、Nacos作为配置中心-分类配置
      • 1、问题:多环境多项目管理
    • 六、centos7安装nacos
        • 问题1运行出错:
        • 问题2:虚拟机内部可以访问 nacos 在windows中无法访问
      • application.properties配置
      • 配置集群
        • centos7配置
          • 问题:运行后虚拟机卡死
        • windows版本配置(数据库配置参考上边)
      • 安装nginx
      • 测试服务注册

一、Nacos简介

1、为什么叫Nacos

前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service

2、Nacos是什么

一个更易于构建云原生应用的动态服务发现,配置管理和服务管理中心;
Nacos:Dynamic Naming and Configuration Service;
Nacos就是注册中心+配置中心的组合:Nacos = Eureka+Config+Bus

3、能干嘛

替代Eureka做服务注册中心;替代Config做服务配置中心。

4、去哪下

https://github.com/alibaba/Nacos

官网文档:

nacos官网
springcloud 中nacos介绍

各种注册中心比较:

二、安装并运行Nacos

2.1 基础环境及配置:

1)本地Java8+Maven环境已经OK
2)先从官网下载Nacos: https://github.com/alibaba/nacos/releases/tag/1.1.4
3)解压安装包,直接运行bin目录下的startup.cmd
4)命令运行成功后直接访问http://localhost:8848/nacos
默认账号密码都是nacos

三、Nacos作为服务注册中心演示

3.1 基于Nacos的服务提供者

2、POM文件

父POM文件增加:

<!--spring cloud alibaba 2.1.0.RELEASE-->
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  <version>2.1.0.RELEASE</version>
  <type>pom</type>
  <scope>import</scope>
</dependency>

最终文件:

  <!-- 统一管理jar包版本 -->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <junit.version>4.12</junit.version>
    <log4j.version>1.2.17</log4j.version>
    <lombok.version>1.16.18</lombok.version>
    <mysql.version>5.1.47</mysql.version>
    <druid.version>1.1.16</druid.version>
    <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
  </properties>

  <!-- 子模块继承之后,提供作用:锁定版本+子modlue不用写groupId和version  -->
  <dependencyManagement>
    <dependencies>

      <dependency>
        <groupId>com.atguigu.springcloud</groupId>
        <artifactId>cloud-api-commons</artifactId>
        <version>${project.version}</version>
      </dependency>

      <!--spring cloud alibaba 2.1.0.RELEASE-->
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2.1.0.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <!--spring boot 2.2.2-->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.2.2.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <!--spring cloud Hoxton.SR1-->
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>Hoxton.SR1</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <!--spring cloud alibaba 2.1.0.RELEASE-->
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2.1.0.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql.version}</version>
      </dependency>
      <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>${druid.version}</version>
      </dependency>
      <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>${mybatis.spring.boot.version}</version>
      </dependency>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
      </dependency>
      <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>${log4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${lombok.version}</version>
        <optional>true</optional>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <fork>true</fork>
          <addResources>true</addResources>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

3、YML文件

server:
  port: 9001

spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置Nacos地址

management:
  endpoints:
    web:
      exposure:
        include: '*'

4、主启动

@EnableDiscoveryClient  #开启客户端服务注册发现
@SpringBootApplication
public class PaymentMain9001 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain9001.class,args);
    }
}

5、业务类

@RestController
public class PaymentController
{
    @Value("${server.port}")
    private String serverPort;

    @GetMapping(value = "/payment/nacos/{id}")
    public String getPayment(@PathVariable("id") Integer id)
    {
        return "nacos registry, serverPort: "+ serverPort+"\t id"+id;
    }
}

6、测试

测试网址:

http://lcoalhost:9001/payment/nacos/1

或者

http://127.0.0.1:9001/payment/nacos/1

7、nacos控制台

查看nacos服务注册中心+服务提供者9001都ok了?

如果没有问题 为了下一章节演示nacos的负载均衡,参照9001新建9002;

3.2 基于Nacos的服务消费者

1、新建Module(cloudalibaba-consumer-nacos-order83)

2、POM文件

    <dependencies>
        <!--SpringCloud ailibaba nacos -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency> 
    </dependencies>

3、YML文件

server:
  port: 83

spring:
  application:
    name: nacos-order-consumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

service-url:
  nacos-user-service: http://nacos-payment-provider

4、主启动

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

5、业务类

ApplicationContextBean类:

@Configuration
public class ApplicationContextConfig
{
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate()
    {
        return new RestTemplate();
    }
}

OrderNacosController类:

@RestController
@Slf4j
public class OrderNacosController
{
    @Resource
    private RestTemplate restTemplate;

    @Value("${service-url.nacos-user-service}")
    private String serverURL;

    @GetMapping(value = "/consumer/payment/nacos/{id}")
    public String paymentInfo(@PathVariable("id") Long id)
    {
        return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);
    }
}

6、测试

nacos控制台:

测试网址: 查看83访问9001/9002,轮询负载OK?
http://localhost:83/consumer/payment/nacos/13

3、服务注册中心对比
Nacos全景图所示:

Nacos和CAP关系

7. Nacos支持AP和CP模式的切换

四、Nacos作为服务配置中心演示

Nacos作为配置中心-基础配置

1、新建Module(cloudalibaba-config-nacos-client3377)

2、POM文件

        <!--nacos-config-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--nacos-discovery-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--web + actuator-->
        <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>
     

3、YML

application.yml配置信息

spring:
  profiles:
    active: dev

bootstrap.yml配置信息

server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #服务注册中心地址
      config:
        server-addr: localhost:8848 #配置中心地址
        file-extension: yaml #指定yaml格式的配置

4、主启动

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

5、业务类

@RestController
@RefreshScope
public class ConfigClientController
{
    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}

注意:
@RefreshScope

6、在Nacos中添加配置信息

Nacos界面配置对应


配置完成

7、Nacos中的匹配规则

Nacos中的匹配规则,Nacos中的dataid的组成格式与SpringBoot配置文件中的匹配规则


运行后找不到配置文件 :这里有大坑

五、Nacos作为配置中心-分类配置

1、问题:多环境多项目管理

2、Nacos的图形化管理界面

配置管理:

命名空间:

3、Namespace+Group+Data ID三者关系?为什么这么设计?

4、举例子: Case

也可以直接指定需要加载的配置

spring.application.name=gulimall-product
#
spring.cloud.nacos.config.server-addr=121.89.172.98:8848 #nacos服务地址
spring.cloud.nacos.config.namespace=aa1cc650-df22-4230-951f-ab259c8d1847 命名空间id
spring.cloud.nacos.config.group=dev	#分组id
##
spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml
spring.cloud.nacos.config.ext-config[0].group=dev
spring.cloud.nacos.config.ext-config[0].refresh=true
##
spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yml
spring.cloud.nacos.config.ext-config[1].group=dev
spring.cloud.nacos.config.ext-config[1].refresh=true
##
spring.cloud.nacos.config.ext-config[2].data-id=other.yml
spring.cloud.nacos.config.ext-config[2].group=dev
spring.cloud.nacos.config.ext-config[2].refresh=true
#

六、centos7安装nacos

下载地址:nacos

解压运行
官方安装运行步骤

https://nacos.io/zh-cn/docs/quick-start.html 单机版运行
运行日志:在nacos/logs/下查看运行日志

问题1运行出错:

readlink: 缺少操作数
Try 'readlink --help' for more information.
dirname: 缺少操作数
Try 'dirname --help' for more information.
ERROR: Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better! !!

解决方案:
参考地址:Nacos启动报错解决:which: no javac in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)

  1. 没有配置java的环境变量

  2. java环境变量的配置方法不是安装JAVA_HOME的方式

  3. nacos这边是java_home下的bin目录,当时安装jdk使用的yum命令安装的,自动没带上jre目录。所以修改了java_home的路径到jre即可。

最终的配置文件

运行成功:

问题2:虚拟机内部可以访问 nacos 在windows中无法访问

解决方案
关闭防火墙

CentOS 7.0默认使用的是firewall作为防火墙
查看防火墙状态

firewall-cmd --state

停止firewall

systemctl stop firewalld.service

禁止firewall开机启动

systemctl disable firewalld.service 

application.properties配置

把样例配置复制出来一份 注意后缀 应该为 .properties

配置mysql

mysql 授权远程访问
GRANT ALL PRIVILEGES ON . TO ‘root’@’%’ IDENTIFIED BY ‘123456’ WITH GRANT OPTION;
flush privileges;
如果不是本地的还要注意远程的端口是否开放

配置集群

centos7配置

复制出集群配置文件(注意后缀.conf)并编辑

192.168.88.3:3333
192.168.88.3:4444
192.168.88.3:5555

把nacos项目复制3份 份别修改各自端口号
最终失败!!!

问题:运行后虚拟机卡死

解决办法
修改nacos\bin\startup.sh文件调整java虚拟机启动内存

默认为2G 修改为128M即可

转换采用windows版本的

windows版本配置(数据库配置参考上边)

启动方式:

startup -m cluster 以集群方式启动

1.把项目复制三份(避免复制这里采用虚拟机运行参数设置把一个项目启动三次)
2. 配置nacos\conf\cluster.conf 注意 是.conf 最终加载的是,conf文件 不加载.example(示例文件)

格式为 ip地址:端口号

  1. 修改nacos\bin下的startup.cmd

修改启动的端口号 把startup.cmd复制三份 分别修改端口为3333 4444 5555

  1. 最终启动这三个cmd 注意加参数 -m cluster 为集群启动 windwos下默认为单击模式
  2. 进入http://127.0.0.1:4444/nacos/查看

安装nginx

参考地址CentOS 7 下 yum 安装和配置 Nginx (亲测无坑)

修改\nginx-1.18.0\conf\nginx.conf


运行

./nginx -c /tool/nginx/nginx.conf

查看是否运行成功

ps -ef|grep nginx


由于nacos在centos7下集群启动失败
所以nginx也采用windows配置 (和centos7配置相同)

http://127.0.0.1:1111/nacos/ 查看
成功

测试服务注册

yml中注册中心地址修改为nginx 利用nginx负载均衡到nacos

最后发现 三个nacos中都存在该服务了

用消费端远程调用服务提供者 也是好用的

现在关闭nginx 发现三个nacos中的服务都没了 但是 不影响 消费端调用服务提供者不知道为什么

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

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

相关文章

[POJ - 1080 ]Palindrome(区间DP)

[POJ - 1080 ]Palindrome&#xff08; 区间DP&#xff09; 1、问题2、分析状态表示状态转移空间优化 3、代码 1、问题 给定一个字符串&#xff0c;通过添加最少的字符&#xff0c;使得这个字符串成为一个回文字符串。 2、分析 状态表示 f [ i ] [ j ] f[i][j] f[i][j]表示将…

2023年产品经理需要考的证书,NPDP含金量真高

产品经理国际资格认证NPDP是新产品开发方面的认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年&#xff0c;是…

盖子的c++小课堂——第十七讲:递归

前言 通知一下&#xff0c;以后每周不定期更新&#xff0c;有可能是周六更新&#xff0c;也可能是周日吧&#xff0c;反正会更新的~~还有我新出的专栏《跟着盖子读论语》&#xff0c;记得订阅一下啊跟着盖子学《论语》_我叫盖子的盖鸭的博客-CSDN博客 三元表达式 三元表达式…

单链表中二级指针的使用以及单链表的增删查改操作

前言&#xff1a;在链表的构建中,链表的初始化和销毁为何需要使用一个二级指针,而不是只需要传递一个指针就可以了,其问题的关键就在于c语言的参数传递的方式是值传递 那么,这篇文章就来聊一聊在链表的初始化中一级指针的传递和二级指针的区别&#xff0c;并总结给出单链表的C语…

AutoCAD使用技巧

AutoCAD使用技巧 环境说明AutoCAD 导入EXCELAutoCAD移动对象到原点 环境说明 本文基于AutoCAD 2021版本。 AutoCAD 导入EXCEL 如果菜单栏隐藏点击显示菜单栏&#xff1a; 在excel中选中copy内容赋值&#xff0c;AutoCAD中选择&#xff1a;编辑-选择性粘贴-作为AutoCAD图元…

必用WhatsApp营销的4个理由

WhatsApp是世界上最受欢迎的消息传递应用程序。每天有1万新用户加入WhatsApp。各种规模的公司都利用该平台与世界各地的客户进行有效的沟通&#xff0c;这要归功于其广泛的覆盖范围、用户友好的设计和安全的端到端加密。因此&#xff0c;WhatsApp聊天机器人迅速普及。 1.为您的…

Kotlin的出现无疑是为了超越Java而存在

Kotlin的出现无疑是为了超越Java而存在。在Google I/O 2017中&#xff0c;Google 宣布 Kotlin 成为 Android 官方开发语言&#xff0c;背景就是Oracle告Google侵权使用java。众所周知&#xff0c;Java的跨平台的开发语言&#xff0c;得益于虚拟机。我比较关注Kotlin用于Android…

Python 使用pipreqs命令生成 `requirements.txt`报错

Python 使用pipreqs命令生成 requirements.txt报错&#xff1a;Fatal error in launcher: Unable to create process using ‘“E:\Anaconda\python.exe” “D:\Anaconda\Scripts\pipreqs.exe” ./ --encodingutf-8’: ??? 问题描述—Python 使用pipreqs命令生成 requireme…

47.对齐网格项目和轨道

首先我们先将模块1关闭&#xff0c;模块2使用CSS网格 display: none;.container--2 {/* STARTER */font-family: sans-serif;background-color: black;font-size: 40px;margin: 100px;width: 1000px;height: 600px;/* CSS GRID */display: grid;}然后我们常间一个三列两行的网…

STM32开发(十六)STM32F103 片内资源 —— 实时时钟RTC 详解

文章目录 一、基础知识点二、开发环境三、STM32CubeMX相关配置四、Vscode代码讲解五、结果演示串口显示乱码解决方案 一、基础知识点 本实验通过stm32片内资源RTC实现实时时钟&#xff0c;通过数码管显示时间。设定闹钟&#xff0c;实现准点报时。 数码管相关知识点&#xff1…

maven总结

maven maven1.构建依赖2.依赖冲突的规则3.可选依赖和排除依赖可选依赖排除依赖 4.依赖范围5.项目构建生命周期6.插件7.模块聚合8.模块继承9.属性&#xff08;类似常量&#xff09;&#xff08;1&#xff09; 自定义属性&#xff08;2&#xff09;直接调用内置属性 10.多个环境配…

PingPingPing

拿到题的时候我是没有丝毫的思路&#xff0c;可能是没有做过太多命令注入的题目&#xff0c;所以反应不过来 还是查看的别人的wp&#xff0c;得知这是一道有关命令注入的题目 通过页面提示传入ip并且利用管道符查看所有文件 但是当我们查看flag.php的时候发现页面过滤掉了空格 …

诊断DTC故障码两种形式的转换:符号转数字

诊断DTC code数据由3个字节组成:HighByte + MiddleByte + LowByte。有两种表现形式: 数字:三个字节值用16进制表示,比如0xC07304符号:这种形式更直观地用字符描述该DTC故障所属的系统,故障类型等信息我们重点讲一下符号的形式: 字符形式的DTC故障码,由7个字符组成,代…

Chatbox - 一款适用于 GPT-4 / GPT-3.5 (OpenAI API) 的桌面应用程序

简介 给大家推荐一款适用于 GPT-4 / GPT-3.5 (OpenAI API) 的桌面应用程 ChatBox&#xff0c;开源的 ChatGPT API (OpenAI API) 跨平台桌面客户端&#xff0c;Prompt 的调试与管理工具&#xff0c;也可以用作 ChatGPT Plus 平替。 下载 ► chatBox 下载安装 ⇲ 为什么不直接…

3D目标检测--PointPillars论文和OpenPCDet代码解读

文章目录 1. 论文动机2. PointPillars概述3. PointPillars模型3.1 Pillar Feature Net3.1.1 Pillar Feature Net模块理论解析3.1.2 Pillar Feature Net模块代码解析 3.2 Backbone&#xff08;2D CNN&#xff09;3.2.1 Backbone&#xff08;2D CNN&#xff09;模块理论解析3.2.2…

LeetCode 312. Burst Balloons【区间DP】困难

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

校验规则引擎

目录 一 架构设计图 二 表设计及数据展示 三 顶层接口 四 压测结果 五 其他规则引擎比较 适用场景&#xff1a;校验场景以及使用该思想进行可视化配置化开发&#xff08;可大幅提高开发效率&#xff0c;长期维护简单&#xff09; 例如&#xff1a;履约系统下单中的校验&…

C++(初识结束)

目录 4缺省参数 4.1缺省参数的概念 4.2缺省参数分类 4.3缺省参数的应用 5.函数重载 5.1函数重载概念 5.2c支持函数重载的原理-名字修饰&#xff08;name Mangling&#xff09; 6.引用 6.1引用概念 6.2引用特性 6.3常引用 6.4使用场景 6.4.1做参数 6.4.2做返…

2023年4月-近期看书

复习书记 用于读书 文章目录 复习书记一、(2001)控制工程基础二、(3001)交通管理与控制三、(1001)英语 一、(2001)控制工程基础 学习这本书的前6章节。 参看视频链接&#xff1a; https://www.bilibili.com/video/BV1Sb411q7jU?p8&spm_id_frompageDriver&vd_source…

构建完善的帮助中心:降低企业客户服务成本,提高客户满意度

客户服务是企业成功的关键之一&#xff0c;一家公司的成功不仅仅取决于产品或服务的质量&#xff0c;还在于能否为客户提供优质的客户服务。随着现代科技的发展&#xff0c;企业需要面对越来越多的客户服务需求&#xff0c;不良的客户服务将对企业的声誉和业务产生严重的影响。…