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本身是没有办法解析服务名称对应的解析地址,需要依靠负载均衡器来解析根据服务名称解析地址,然后再去进行调用。