在项目中导入如下坐标:

<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笔记\image\springcloud_alibaba\image-20220606123538401.png)]

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


下一篇:Nacos管理界面详细介绍

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐