Nacos注册中心
什么是注册中心
注册中心是微服务架构中的纽带,记录了服务和服务地址的映射关系。
在分布式架构中,为什么需要注册中心。
因为在没有注册中心时候,服务间调用需要知道被调方的地址,当服务更换部署地址,就不得不修改地址配置。而有了注册中心之后,当服务启动时,服务会把地址注册到服务注册中心,当服务调用方调用某个服务的时候,可以通过服务名字去服务注册中心获取可用的服务,服务注册中心会从服务列表获取所有可用的服务,然后根据负载均衡规则选择一个服务将服务的真实地址(ip:port)返回给调用方,当需要变更部署地址时,只需要自动上报最新的地址到服务注册中心,下次服务调用将自动获取最新真实地址。
整合Nacos Spring Cloud
首先下载并启动Nacos,详情参考:Nacos入门
然后通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现,关于 Nacos Spring Cloud 的详细文档请参看:Nacos Discovery。
- 添加依赖:
<!-- 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 启动成功 ლ(´ڡ`ლ)゙ \n");
}
}
- 启动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"表示测试通过。
参考资料
- 官网
- Github