您当前的位置: 首页 >  Charge8

Nacos做注册中心使用

Charge8 发布时间:2022-07-24 20:20:16 ,浏览量:4

上一篇了解了 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中管理版本。

  
    UTF-8
    14
    14
    Hoxton.SR12
    2.2.8.RELEASE
  

  
    
      org.springframework.boot
      spring-boot-starter
    

    
      org.springframework.boot
      spring-boot-starter-test
      test
    
  

  
    
      
      
        org.springframework.cloud
        spring-cloud-dependencies
        ${spring-cloud.version}
        pom
        import
      
      
      
        com.alibaba.cloud
        spring-cloud-alibaba-dependencies
        ${spring-cloud-alibaba.version}
        pom
        import
      

    
  
2、创建order服务

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

2.1 引入依赖

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

        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
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依赖:

        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
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了。

– 求知若饥,虚心若愚。

关注
打赏
1688896170
查看更多评论

Charge8

暂无认证

  • 4浏览

    0关注

    235博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0495s