nacos+Spring boot+dubbo用nacos做为注册中心和配置中心

什么是nacos:

acos 支持基于 DNS 和基于 RPC 的服务发现(可以作为springcloud的注册中心)、
动态配置服务(可以做配置中心)、动态 DNS 服务。

官方介绍是这样的:

Nacos 致力于帮助您发现、配置和管理微服务。
Nacos 提供了一组简单易用的特性集,帮助您实现动态服务发现、服务配置管理、服务及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。
Nacos 是构建以“服务”为中心的现代应用架构(例如微服务范式、云原生范式)的服务基础设施

官方网址:http://nacos.io

nacos作为dubbo注册中心:

nacos的安装个使用这里忽略

案例采用Spring-boot2.2.1 和最新版dubbo2.7.7,以及nacos2.2.1
为什么使用Spring-boot-2.2.1
  因为目前为止nacos的版本最高为2.2.1为了jar不冲突和统一管理,所以全部统一采用2.2.1版本为主
为什么使用dubbo-2.7.7
  dubbo-2.7.7是比较了2.6.X和最新版dubbo-2.8.x之后选择的中间板,dubbo-2.5.x不能满足一些注解的要求,案例中将传统的配置文件xml全部替换成注解和nacos统一配置中心的模式。

项目结构:

在这里插入图片描述
depend-nacos-api-project         --》api
depend-nacos-consumer-project     --》消费者
depend-nacos-project           --》提供者

在这里插入图片描述
创建depend-nacos-api-project

创建接口INacosService-test

public interface INacosService {

	String test();
}

创建提供者:depend-nacos-project
在这里插入图片描述

提供者pom.xml文件

    <!--boot版本-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
     
         <!--boot依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            </exclusions>
        </dependency>
        <!--nacos 配置中心-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
        <!--nacos 注册中心-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.1.RELEASE</version>
            <exclusions>
                <exclusion>
                    <artifactId>httpclient</artifactId>
                    <groupId>org.apache.httpcomponents</groupId>
                </exclusion>
            </exclusions>
        </dependency>
       <!--dubbo-spring-boot依赖-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.7</version>
            <exclusions>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-context</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
        </dependency>
     <!-- dubbo-nacos注册中心 -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
            <version>2.7.7</version>
            <exclusions>
                <exclusion>
                    <artifactId>nacos-client</artifactId>
                    <groupId>com.alibaba.nacos</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

在Spring-boot中加载文件的优先级别大家都知晓,这里不做说明。

创建项目bootstrap.yml

server:
  port: 8300
nacos:
  port: 8848
  service-address: 127.0.0.1
  namespace: 06bba7ee-604e-4eb9-baf0-0c71ef4a08d7  # 命名空间ID 不是命名空间名称
spring:
  application:
    name: depend-nacos-project
  cloud:
    nacos:
      discovery:
        server-addr: ${nacos.service-address}:${nacos.port} #nacos注册地址
        namespace: ${nacos.namespace}
      config:
        server-addr: ${nacos.service-address}:${nacos.port} # 主配置服务器地址
        group: DEV_GROUP #指定GroupId 默认可以不用填写
        namespace: ${nacos.namespace} # 根据自己nacos server生成的命名空间ID进行修改
        file-extension: yaml  # 主配置 配置文件类型
        extension-configs:
          - data-id: common-dubbo.yaml
            group: COMMON_GROUP
            refresh: true  # 是否动态刷新,默认为false
  ###
  #配置的优先级:
  # Spring Cloud Alibaba Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置。
  # A: 通过 spring.cloud.nacos.config.shared-configs[n].data-id 支持多个共享 Data Id 的配置
  # B: 通过 spring.cloud.nacos.config.extension-configs[n].data-id 的方式支持多个扩展 Data Id 的配置
  # C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置
  # 当三种方式共同使用时,他们的一个优先级关系是:A < B < C
###

#dubbo:
#  service:
#    version: 1.0.0  #加入隔离版本号
#  application:
#    name: depend-nacos-project
#  registry:
#    address: nacos://127.0.0.1:8848?namespace=9c14c74f-eb62-4287-9c11-763fc098394e
#  protocol:
#    name: dubbo
#  scan:
#    base-packages: com.cailu.nacos.service.impl

创建serviceimpl实现类

NacosServiceImpl

@DubboService(version = "${dubbo.service.version}")
public class NacosServiceImpl implements INacosService {

	@Autowired
	private NacosConfig nacosConfig;

	@Override
	public String test() {
		String str = nacosConfig.getServerName();
		return str;
	}
}

注意:这里使用的是@DubboService注解,在dubbo2.6之后,注解改名为@DubboService

创建公共配置文件:NacosConfig

@Configuration
@RefreshScope //Nacos 动态刷新配置
@Getter
public class NacosConfig {

	@Value("${school.location}")
	private String serverName;



}

注意:这里的@Value("${school.location}")细心的朋友会发现,在bootstrap.yml文件中,
没有这个属性,这个属性会在统一配置中心nacos中配置,后面会说到

创建启动类MyNacosApplication

@EnableDiscoveryClient  //启用nacosz注册客户端
@SpringBootApplication
public class MyNacosApplication implements CommandLineRunner {

	/**
	 * 日志
	 */
	private Logger logger = (Logger) LoggerFactory.getLogger(this.getClass());

	/**
	 * 功能描述  启动项
	 * @param args args
	 * @author cailu
	 * @date 2020/3/27 0:31
	 */
	public static void main(String[] args) {
		SpringApplication.run(MyNacosApplication.class, args);
	}

	@Override
	public void run(String... args) throws Exception {
		logger.info("== depend-nacos-project 服务启动成功!==");
	}

下面就来说说nacos和bootstrap.yml文件中的配置信息的关联关系

spring.cloud.nacos.discovery.server-addr 是nacos注册地址
spring.cloud.nacos.discovery.namespace 是nacos配置管理中的KEY

spring.cloud.nacos.config.server-addr 是配置文件地址,和spring.cloud.nacos.discovery.server-addr一样
spring.cloud.nacos.config.group 是nacos中的组名称,可以自定义,也可以默认
spring.cloud.nacos.config.extension-configs 和spring.cloud.nacos.config.shared-configs以及本身的bootstrap.yml的关系是
       
  ###
  #配置的优先级:
  # Spring Cloud Alibaba Nacos Config 目前提供了三种配置能力从 Nacos 拉取相关的配置。
  # A: 通过 spring.cloud.nacos.config.shared-configs[n].data-id 支持多个共享 Data Id 的配置
  # B: 通过 spring.cloud.nacos.config.extension-configs[n].data-id 的方式支持多个扩展 Data Id 的配置
  # C: 通过内部相关规则(应用名、应用名+ Profile )自动生成相关的 Data Id 配置
  # 当三种方式共同使用时,他们的一个优先级关系是:A < B < C
###

接下来就在nacos中创建配置文件:
在这里插入图片描述文件名字为你bootstrap.yml中:spring.application.name属性, 格式yaml
组别为你bootstrap.yml中spring.cloud.nacos.config.group的名字,一定要对应
注意这里只添加了dubbo的扫描类,其他dubbo信息在公共配置文件中,为什么要配置公共dubbo呢
为什么要配置公共dubbo呢?
因为在消费者中也需要用到dubbo的配置信息,为了方便管理和维护,配置文件统一为一个

公共dubbo配置文件
在这里插入图片描述

文件名字为你bootstrap.yml中spring.cloud.nacos.config.extension-configs中的各个属性
我这里在bootstrap.yml保留了dubbo的配置信息,注销掉的dubbo部分就是为nacos上的配置信息

到这里 提供端的配置就完成了

接下来配置消费端

消费端的bootstrap.yml配置文件

bootstrap.yml:

server:
  port: 8301
nacos:
  port: 8848
  service-address: 127.0.0.1
  namespace: 06bba7ee-604e-4eb9-baf0-0c71ef4a08d7  # 命名空间ID 不是命名空间名称
spring:
  application:
    name: depend-nacos-consumer-project
  cloud:
    nacos:
      discovery:
        server-addr: ${nacos.service-address}:${nacos.port} #nacos注册地址
        namespace: ${nacos.namespace}
      config:
        server-addr: ${nacos.service-address}:${nacos.port} # 主配置服务器地址
        group: DEV_GROUP #指定GroupId 默认可以不用填写
        namespace: ${nacos.namespace}
        extension-configs:
          - data-id: common-dubbo.yaml
            group: COMMON_GROUP
            refresh: true  # 是否动态刷新,默认为false

注意看消费端的dubbo配置信息 在extension-configs:中 只需要直接引入nacos中的公共配置common-dubbo.yaml配置文件,就什么都不需要了,这样既方便有省事,还降低了维护成本,这就是上面所说的公共配置

消费端的代码就不写了,直接调用就OK了,但是要注意的是在消费端的service中用的注解需要注意
消费端的service:
NacosConsumerServiceImpl:

@Service
public class NacosConsumerServiceImpl implements INacosConsumerService {

	@DubboReference(version = "${dubbo.service.version}", check = false)
	private INacosService nacosService;

	@Override
	public String test() {
		return nacosService.test();
	}
}

消费端使用的是@DubboReference,为了启动不报错,设置 check = false

完整的dubbo用nacos做为注册中心和配置中心就建立完毕了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值