Spring Cloud:Nacos注册中心
Nacos注册中心
什么是注册中心
注册中心是微服务架构中的纽带,记录了服务和服务地址的映射关系。
在分布式架构中,为什么需要注册中心。
因为在没有注册中心时候,服务间调用需要知道被调方的地址,当服务更换部署地址,就不得不修改地址配置。而有了注册中心之后,当服务启动时,服务会把地址注册到服务注册中心,当服务调用方调用某个服务的时候,可以通过服务名字去服务注册中心获取可用的服务,服务注册中心会从服务列表获取所有可用的服务,然后根据负载均衡规则选择一个服务将服务的真实地址(ip:port)返回给调用方,当需要变更部署地址时,只需要自动上报最新的地址到服务注册中心,下次服务调用将自动获取最新真实地址。
整合Nacos Spring Cloud
首先下载并启动Nacos,详情参考:
然后通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现,关于 Nacos Spring Cloud 的详细文档请参看:。
- 添加依赖:
<!-- springcloud ailibaba nacos discovery --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>${latest.version}</version> </dependency>
- 添加Nacos配置(yml文件)
# Spring spring: application: # 应用名称 name: spring2go-upms cloud: nacos: discovery: # 服务注册地址 server-addr: 127.0.0.1:8848
- 通过Spring Cloud原生注解@EnableDiscoveryClient开启服务发现功能,或者直接使用@SpringCloudApplication注解
@SpringBootApplication @EnableDiscoveryClient public class Spring2goUpmsApplication { public static void main(String[] args) { SpringApplication.run(Spring2goUpmsApplication.class, args); System.out.println("(♥◠‿◠)ノ゙ UPMS 启动成功 ლ(´ڡ`ლ)゙ "); } }
- 启动Nacos,查看控制台服务列表
测试
package com.spring2go.upms.biz.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; /** * @Description: Nacos示例代码 * @author: xiaobin */ @RestController public class TestController { @Autowired private RestTemplate restTemplate; // 新增restTemplate对象注入方法,注意,此处LoadBalanced注解一定要加上,否则无法远程调用 @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } @GetMapping("/nacos") public String get() { return restTemplate.getForObject("http://spring2go-upms/hello/" + "world", String.class); } @GetMapping(value = "/hello/{name}") public String echo(@PathVariable String name) { return "Hello Nacos Discovery " + name; } }
启动程序,访问http://localhost:4000/nacos(端口请根据实际调整),返回"Hello Nacos Discovery world"表示测试通过。