Nacos做注册中心使用

上一篇了解了 Nacos并安装了 nacos-server服务。接下来简单搭建一个微服务项目,使用 Nacos做注册中心。

一、项目搭建

Spring Cloud Alibaba环境版本选型说明:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

这里选择版本如下:

在这里插入图片描述

1、创建父模块

创建一个 maven项目(pom),在 pom.xml中管理版本。

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>14</maven.compiler.source>
    <maven.compiler.target>14</maven.compiler.target>
    <spring-cloud.version>Hoxton.SR12</spring-cloud.version>
    <spring-cloud-alibaba.version>2.2.8.RELEASE</spring-cloud-alibaba.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <dependencyManagement>
    <dependencies>
      <!-- spring-cloud -->
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>${spring-cloud.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <!-- spring-cloud-alibaba-dependencies -->
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>${spring-cloud-alibaba.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

    </dependencies>
  </dependencyManagement>

2、创建order服务

创建 app-order服务,服务提供者可以通过 Nacos 的服务注册发现功能将其服务注册到 Nacos Server 上。

2.1 引入依赖

当前项目pom中引入服务发现 nacos-discovery依赖:

        <!-- nacos服务注册与发现 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

2.2 配置文件

配置nacos注册中心

server:
  port: 18082
  servlet:
    context-path: /

spring:
  application:
    name: app-order  #应用名称 (nacos会将该名称当做服务名称)

    #nacos注册中心地址
  cloud:
    nacos:
      server-addr: 192.168.xxx.xxx:8848
      discovery:
        username: nacos
        password: nacos

关于 Nacos Starter 更多的配置项信息:https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-discovery

在这里插入图片描述

2.3 启动order服务

启动服务,在 nacos管理端界面可查看是否成功注册。

@SpringBootApplication
//@EnableDiscoveryClient   # nacos新版本不需要再加 @EnableDiscoveryClient注解了
public class AppOrderApplication {

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

	@Bean
	@LoadBalanced  // Nacos注册中心,默认使用 Ribbon 负载均衡
	public RestTemplate restTemplate(RestTemplateBuilder builder){
		RestTemplate restTemplate = builder.build();
		return restTemplate;
	}
}

3、创建user服务

创建 app-user服务,服务消费者可以通过 Nacos 的服务注册发现功能,从 Nacos server 上获取到它要调用的服务。同 app-order服务同理。同 order服务同理。

3.1 引入依赖

当前项目pom中引入服务发现 nacos-discovery依赖:

        <!-- nacos服务注册与发现 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

3.2 配置文件

配置nacos注册中心

server:
  port: 18081
  servlet:
    context-path: /app-user

spring:
  application:
    name: app-user  #微服务名称

  #配置nacos注册中心地址
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.xxx.xxx:8848

4、测试

4.1 开启负载均衡

开启 @LoadBalanced 与 Ribbon 的集成。使用 RestTemplate进行服务调用。

    // @Bean
    // @LoadBalanced
    // public RestTemplate restTemplate() {
    //     return new RestTemplate();
    // }
 
	// 推荐builder模式创建 RestTemplate
	@Bean
	@LoadBalanced  // Nacos注册中心,默认使用 Ribbon 负载均衡
	public RestTemplate restTemplate(RestTemplateBuilder builder){
		RestTemplate restTemplate = builder.build();
		return restTemplate;
	}

4.2 使用 RestTemplate进行服务调用

写一个 controller调用。

	@RequestMapping(value = "/findOrderByUserId/{id}")
	public R findOrderByUserId(@PathVariable("id") Integer id) {
		log.info("根据userId=" + id + "查询订单信息");

		// restTemplate调用, url写死
		//String url = "http://localhost:18082/order/findOrderByUserId/" + id;

		/**
		 * Nacos注册中心,默认使用 Ribbon 负载均衡,restTemplate需要添加@LoadBalanced注解。
		 * 使用微服务名:ip:port替换为app-order
		 */
		String url = "http://app-order/order/findOrderByUserId/" + id;

		R result = restTemplate.getForObject(url, R.class);
		return result;
	}

浏览器访问测试ok:http://localhost:18081/app-user/user/findOrderByUserId/1,返回数据:

在这里插入图片描述
到此,Nacos做注册中心使用就OK了。

二、服务隔离配置

Namespace 和 Group配置项使用场景也是蛮多的。

1、Namespace 隔离

Namespace:命名空间,默认是空串,即公共命名空间(public)用于进行租户(用户)粒度的隔离。对相同特征的服务进行归类分组管理。需要创建 Namespace,指定其id。

Namespace 的常用场景之一是不同环境的隔离,例如:项目/开发/测试/生产环境的资源(如配置、服务)隔离等。

在这里插入图片描述
修改app-user服务的yml配置:通过spring.cloud.nacos.discovery.namespace参数配置

  #nacos注册中心地址
  cloud:
    nacos:
      server-addr: 192.168.xxx.xxx:8848
      discovery:
        username: nacos
        password: nacos
        namespace: b4d0832b-a7b0-44c2-8ce5-1abe676a4736 # 必须使用命名空间id

启动app-user,进入nacos控制台可以看到appl-user注册成功,所属 namespace是appl-service。

在这里插入图片描述
访问测试:http://localhost:8040/user/findOrderByUserId/1,报错:找不到 app-order实例服务。

原因:app-order和app-user使用了不同的 namespace,导致服务隔离。

我们把app-orser配置 namespace也指定为appl-service时,访问就ok了。

2、group服务分组

不同的服务可以归类到同一个namespace时,还可以使用 group继续更细粒度的归类管理。也可以进一步起到服务隔离的作用。不需要创建group,直接指定即可。

修改app-user服务的yml配置:通过spring.cloud.nacos.discovery.group参数配置

  #nacos注册中心地址
  cloud:
    nacos:
      server-addr: 192.168.xxx.xxx:8848
      discovery:
        username: nacos
        password: nacos
        namespace: b4d0832b-a7b0-44c2-8ce5-1abe676a4736 # 必须使用命名空间id
        group: prod

启动app-user,进入nacos控制台可以看到appl-user注册成功,所属 namespace是appl-service,group是prod。

在这里插入图片描述
访问测试:http://localhost:8040/user/findOrderByUserId/1,报错:找不到 app-order实例服务。

原因:app-order和app-user使用了相同的 namespace,但是groupb不同,导致服务隔离。

我们把app-orser配置 group也指定为prod时,访问就ok了。

– 求知若饥,虚心若愚。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值