天天看点

Spring Cloud:Nacos注册中心Nacos注册中心参考资料

Nacos注册中心

什么是注册中心

注册中心是微服务架构中的纽带,记录了服务和服务地址的映射关系。

在分布式架构中,为什么需要注册中心。

因为在没有注册中心时候,服务间调用需要知道被调方的地址,当服务更换部署地址,就不得不修改地址配置。而有了注册中心之后,当服务启动时,服务会把地址注册到服务注册中心,当服务调用方调用某个服务的时候,可以通过服务名字去服务注册中心获取可用的服务,服务注册中心会从服务列表获取所有可用的服务,然后根据负载均衡规则选择一个服务将服务的真实地址(ip:port)返回给调用方,当需要变更部署地址时,只需要自动上报最新的地址到服务注册中心,下次服务调用将自动获取最新真实地址。

Spring Cloud:Nacos注册中心Nacos注册中心参考资料

整合Nacos Spring Cloud

首先下载并启动Nacos,详情参考:Nacos入门

然后通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现,关于 Nacos Spring Cloud 的详细文档请参看:Nacos Discovery。

  1. 添加依赖:
<!-- springcloud ailibaba nacos discovery -->
<dependency>
  	<groupId>com.alibaba.cloud</groupId>
  	<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  	<version>${latest.version}</version>
</dependency>
           
  1. 添加Nacos配置(yml文件)
# Spring
spring: 
  application:
    # 应用名称
    name: spring2go-upms 
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8848
           
  1. 通过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");
  }
}
           
  1. 启动Nacos,查看控制台服务列表
Spring Cloud:Nacos注册中心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

继续阅读