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笔记\image\springcloud_alibaba\image-20220606123538401.png)]
然后就能调用通过了,这是因为Nacos本身是没有办法解析服务名称对应的解析地址,需要依靠负载均衡器来解析根据服务名称解析地址,然后再去进行调用。
下一篇:Nacos管理界面详细介绍
更多推荐
所有评论(0)