NacosClient客户端搭建,微服务注册进nacos

在项目中导入如下坐标:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

在全局配置文件application.yml文件中进行相应的配置

server:
  port: 8083

# 指定应用名称,Nacos会将该名称当做服务名称
spring:
  application:
    name: order-service
  cloud:
    nacos:
      # 指定Nacos服务的地址,默认值是localhost:8848
      server-addr: 127.0.0.1:8848
      discovery:
        # 指定Nacos 管理界面登录用户名和密码,默认值是nacos
        username: nacos
        password: nacos
        # 指定命名空间
        # 命名空间的作用是可以隔离不同的服务实例,默认名称是public
        namespace: public

从Spring Cloud Edgware版本开始,主启动类上面就不需要加@EnableDiscoveryClient注解了,如果是以前的低版本就还需要加@EnableDiscoveryClient 或@EnableEurekaClient,可以去maven的中央仓库中去查询spring-cloud-dependencies的版本有哪些。

然后启动服务,登录到Nacos的管理界面就可以发现现在服务已经注册进去了



接下来我们测试一下通过Nacos注册中心进行服务通信

@RestController
@RequestMapping("/order")
public class OrderController {
          
   

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/add")
    public String add(){
          
   
		// 使用RestTemplate调用stock-service服务中的接口
        String message = restTemplate.getForObject("http://stock-service/stock/reduce", String.class);
        return "下单成功!" + message;
    }
}

启动服务的时候就会发现报错了 这是因为,服务从Nacos注册中心中获取服务列表之后,还需要负载均衡器来进行服务调用,就如下图所示的一样 所以我们这RestTemplate这里添加一个负载均衡器的注解@LoadBalanced,Nacos也其实是集成了Ribbon,

@Configuration
public class RestConfig {
          
   

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(RestTemplateBuilder builder){
          
   
        RestTemplate restTemplate = builder.build();
        return restTemplate;
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y1eulPsF-1658022301252)(E:Java笔记imagespringcloud_alibabaimage-20220606123538401.png)]

然后就能调用通过了,这是因为Nacos本身是没有办法解析服务名称对应的解析地址,需要依靠负载均衡器来解析根据服务名称解析地址,然后再去进行调用。


经验分享 程序员 微信小程序 职场和发展