java多线程    Java入门    vsftp    ftp    linux配置    centos    FRP教程    HBase    Html5缓存    webp    zabbix    分布式    neo4j图数据库    

Nacos服务注册中心配置

Nacos的作用

Nacos 是一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台,提供注册中心、配置中心和动态 DNS 服务三大功能。

说人话举例子:

Nacos为服务注册中心,服务分为消费者和生产者,生产者和消费者都在Nacos中心进行注册

就如一个超市,生产者农民把腊肠放到超市,消费者顾客去超市购买腊肠。Nacos就是那个超市

为什么微服务要整个这么个中心

为了解决农民太多的问题,也为了解决顾客太多的问题。一个公司的系统和接口变得多了,就开始了复杂的调用关系,Nacos进制大家直接调来调去,大家要调,生产者来我这里注册,消费者来我这里消费。

1.服务发现和服务健康监测

2.动态配置服务

3.动态DNS服务

4.服务及其元数据管理

问题:Nacos和eureka, zookeeper,dobble属于什么关系

dubbo和springcloud一个级别属于微服务框架

Nacos和Eureka,Zookeeper一个级别属于服务注册中心,还有一个不常见的Consul也属于服务注册中心

nacos支持a(高可用)p(分区容错)和c(一致性)p的切换默认为ap, eureka仅支持ap,zookeeper仅支持cp

看下定义

Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Eureka:Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。

ZooKeeper:是一个分布式的,开放源码的分布式应用程序协调服务,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

Nacos 配置步骤

官方文档 https://nacos.io/zh-cn/docs/quick-start-spring-boot.html

1.下载 Nacos

https://github.com/alibaba/nacos/releases

当前最新版本为2.1.1 发布日期2022.8.8

2.启动

单机启动模式

bin/startup.sh -m standalone

日志显示各种报错

JAVA_HOME配置的jdk安装目录,而不是jre安装目录

Caused by: java.lang.UnsatisfiedLinkError: /private/var/folders/dv/_mzlwcp92qsfhppjmr08l65c0000gn/T/librocksdbjni10938441626573915092.jnilib: dlopen(/private/var/folders/dv/_mzlwcp92qsfhppjmr08l65c0000gn/T/librocksdbjni10938441626573915092.jnilib, 0x0001): tried: '/private/var/folders/dv/_mzlwcp92qsfhppjmr08l65c0000gn/T/librocksdbjni10938441626573915092.jnilib' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e')), '/usr/local/lib/librocksdbjni10938441626573915092.jnilib' (no such file), '/usr/lib/librocksdbjni10938441626573915092.jnilib' (no such file)

查了一圈是因为mac的M1芯片不兼容。

方案1.用docker解决

https://www.icode9.com/content-4-1228803.html

方案2:修改jdk版本 按这个文档将JAVA_HOME改为1.8即可

https://java-er.com/blog/mac-java-where/

登录系统

http://localhost:8848/nacos/#/login

默认账户 nacos 密码 nacos

curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example&group=DEFAULT_GROUP&content=useLocalCache=true"

image-20220906172051507

Nacos配置列表多了一个配置

配置内容为 useLocalCache=true

新建一个springboot项目Nacos1

pom.xml文件加上nacos配置

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>nacos-config-spring-boot-starter</artifactId>
    <version>0.2.12</version>
</dependency>

<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>nacos-discovery-spring-boot-starter</artifactId>
    <version>0.2.7</version>
</dependency>

application.properties

# 应用名称
spring.application.name=nacos1

# 应用服务 WEB 访问端口
server.port=91

nacos.config.server-addr=127.0.0.1:8848
nacos.discovery.server-addr=127.0.0.1:8848

启动文件Nacos1Application

@SpringBootApplication
@NacosPropertySource(dataId = "example", autoRefreshed = true)
public class Nacos1Application {

    public static void main(String[] args) {
        SpringApplication.run(Nacos1Application.class, args);
    }

}

新建一个文件com.javaer.nacos1.controller.Config

@Controller
@RequestMapping("config")
public class Config {

    @NacosValue(value = "${useLocalCache:false}", autoRefreshed = true)
    private boolean useLocalCache;

    @RequestMapping(value = "/get", method = RequestMethod.GET)
    @ResponseBody
    public boolean get() {
        return useLocalCache;
    }
}

请求http://localhost:91/config/get 返回了true,说明被影响了

1.调用获取

新建一个文件com.javaer.nacos1.controller.DiscoveryController

//测试服务发现
@Controller
@RequestMapping("discovery")
public class DiscoveryController {

    @NacosInjected
    private NamingService namingService;

    @RequestMapping(value = "/get", method = RequestMethod.GET)
    @ResponseBody
    public List<Instance> get(@RequestParam String serviceName) throws NacosException {
        return namingService.getAllInstances(serviceName);
    }
}

1.读取服务

curl -X GET 'http://localhost:91/discovery/get?serviceName=example'

返回[]

2.通过调用 Nacos Open API 向 Nacos server 注册一个名称为 example 服务

curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=example&ip=127.0.0.1&port=91'

在服务这里多了个项目叫example image-20220907102726951

3.再次调用读取example服务

curl -X GET 'http://localhost:91/discovery/get?serviceName=example'

返回

[{"instanceId":"127.0.0.1#91#DEFAULT#DEFAULT_GROUP@@example","ip":"127.0.0.1","port":91,"weight":1.0,"healthy":true,"enabled":true,"ephemeral":true,"clusterName":"DEFAULT","serviceName":"DEFAULT_GROUP@@example","metadata":{},"ipDeleteTimeout":30000,"instanceIdGenerator":"simple","instanceHeartBeatTimeOut":15000,"instanceHeartBeatInterval":5000}]

Nacos1项目源代码

https://github.com/yuexiaosheng/javaer/tree/main/nacos1

参考资料

nacos动态DNS配置

https://www.jianshu.com/p/fa2ede64fd64?

动态DDN(DDS)就是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程序,服务器程序负责提供DNS服务并实现动态域名解析

https://hub.docker.com/search?q=

http://www.codebaoku.com/it-java/it-java-222621.html

https://blog.csdn.net/tsuiearl/article/details/116525963

https://developer.aliyun.com/ebook/ 阿里藏经阁

https://nacos.io/zh-cn/docs/what-is-nacos.html

http://c.biancheng.net/springcloud/nacos.html


This entry was posted in JAVA. Bookmark the permalink.
月小升QQ 2651044202, 技术交流QQ群 178491360
首发地址:月小升博客https://java-er.com/blog/nacos-server-config/
无特殊说明,文章均为月小升原创,欢迎转载,转载请注明本文地址,谢谢
您的评论是我写作的动力.

Leave a Reply