Nacos 注册中心和配置中心搭建,以及使用OpenFeign调用

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

官网:https://nacos.io

项目:https://github.com/alibaba/nacos

单机方式安装:

下载地址:https://github.com/alibaba/nacos/releases/tag/1.3.0

下载完,解压:

进入到bin目录,然后运行startup.cmd (windows) ,可以正常启动的画面:

访问:http://localhost:8848/nacos/

说明成功。

这是使用了Nacos自带的derby数据库,下边改为使用mysql数据库,mysql版本要求:5.6.5以上。

先到数据库中建一个库:nacos_config(数据库名随便起也可以)

打开conf目录,找到一个 nacos-mysql.sql 的SQL文件,到新建的数据库里运行,建好表。

然后编辑conf目录中的配置文件:application.properties

#*************** Config Module Related Configurations ***************#
### If user MySQL as datasource:
spring.datasource.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=

重启:关掉之前运行的Nacos,重新执行bin目录中的startup.cmd

新建个命名空间:

新建一个配置项:在dev的命名空间中新建配置项:alibaba-nacos

数据库里保存好了,注册中心和配置中心搭建成功。

在springboot项目中使用

新建项目:https://start.spring.io/

编辑配置文件:bootstrap.yml

配置中心和注册中心一起配置了

server:
  port: 8301
  tomcat:
    uri-encoding: utf-8
spring:
    application:
        name: alibaba-nacos # 对应于配置项的Data ID

    cloud:
        #Nacos 的配置
        nacos:
            # 配置中心的配置
            config:
                # 配置中心的服务地址
                server-addr: 127.0.0.1:8848
                
                # 配置项的命名空间,如果不指定将会在public命名空间下查找配置项
                namespace: 83162804-51ff-489b-90ef-fb85cd99b407
                
                # 配置所属的分组,如果组名为:DEFAULT_GROUP,则可以省略此项的配置(namespace如果是按环境分[dev,prod],那group则可以是按项目名来定)
                group: DEFAULT_GROUP
                #group: goods # 假设本项目是一个商品服务,使用goods做为组名,可以切换下分组名测试看下效果
                
                # 文件格式
                file-extension: yaml
                
            # 注册中心的配置
            discovery:
                # 注册中心的服务地址,因为与配置中心的相同所以使用变量引用配置中心的设置
                server-addr: ${spring.cloud.nacos.config.server-addr}
                
                # 指定服务要注册到哪个命名空间中去,不设置本项会注册到public中,多环境或版本时要注意这一项的设置
                # 为了让配置,服务注册两者的命名空间相同这里用了一个变量,引用了配置的命名空间
                namespace: ${spring.cloud.nacos.config.namespace}
                
                # 指定服务要注册到哪个组中去,不设置本项会注册到默认的DEFAULT_GROUP,多项目时可以按项目名来定
                # 为了让配置,服务注册两者的分组相同,这里用了一个变量,引用了配置的分组
                group: ${spring.cloud.nacos.config.group}

配置的对应关系

新建一个控制器测试下配置:

package com.example.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope
public class IndexController {

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

    @Value("${test:aa}")
    private String test;

    @RequestMapping("/test")
    public String test() {
        return "微服务端口 " + port + " : " + test; // 加下端口以示区分
    }
}

启动,并访问:http://localhost:8301/test

输出的是“a”而不是默认的“aa”,说明配置生效。

改下Nacos中的配置并发布:

 刷新 可以看到输出的改变。

看下服务列表,刚启动的服务也注册进来了:

改下分组名,重新启动下:

看下服务列表:

分组也换了。

改下端口再启动一个服务:

查看下详情:两个端口都在

使用OpenFeign调用

服务注册好了,就要有客户端来调用

新建客户端项目:(增加了OpenFeign的项)

配置: bootstrap.yml

server:
  port: 8311
  tomcat:
    uri-encoding: utf-8
spring:
    application:
        name: alibaba-nacos-client # 对应于配置项的Data ID

    cloud:
        #Nacos 的配置要与服务提供者保持一致
        nacos:
            # 配置中心的配置
            config:

                server-addr: 127.0.0.1:8848
                namespace: 83162804-51ff-489b-90ef-fb85cd99b407
                group: goods 
                file-extension: yaml
                
            # 注册中心的配置
            discovery:
                server-addr: ${spring.cloud.nacos.config.server-addr}
                namespace: ${spring.cloud.nacos.config.namespace}
                group: ${spring.cloud.nacos.config.group}

新建用于调用服务的接口,NacosService.java

package com.example.service;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

@FeignClient(value = "alibaba-nacos")
public interface NacosService {
    @GetMapping("/test")
    String index();
}

新建controller:

package com.example.controller;

import com.example.service.NacosService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class IndexController {
    
    @Autowired
    NacosService nacosService;
    
    @GetMapping("/index")
    public String index(){
        String result = nacosService.index();
        return result;
    }
}

启动两个服务端,再启动客户端。

访问下客户端:http://localhost:8311/index

微服务端口交替更换,说明注册中心的两个服务都可以使用。.

改下配置并发布:

服务端的配置也产生了相应的变化:

完毕。

Nacos如何搭建高可用集群?

  1. 复制conf目录下的cluster.conf.example 为 cluster.conf。
  2. 修改cluster.conf文件,将搭建集群的机器的IP和端口号写入这个文件。
  3. 将nacos复制到各机器,注意保持application.properties中数据库的配置必须是相同的。
  4. 分别启动各机器上的nacos。
  5. 将各机器使用负载开放出去,例如使用 nginx,阿里云的SLB。

参考:https://www.cnblogs.com/FlyAway2013/p/11201250.html(版本不同,将就看下)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值