1.基本介绍
Nacos(Dynamic Naming and Configuration Service)是服务中心的另外一种实现。从注册中心的功能实现角度,与Eureka等价,只是实现方式有所差异。与Eureka不同的是,Nacos注册中心类似于Tomcat,是独立启动的服务器。因此在我们的代码中,无需在专门创建一个工程用于启动注册中心。
一句话:Nacos就是代理已经过时的注册中心Eureka + 配置中心config
首先,下载好Nacos安装包(.zip压缩包),解压后,如下图
进入bin目录,打开命令行,输入如下命令
windows: startup.cmd -m standalone
linux: startup.sh -m standalone
出现类似redis大佛一样的玩意就是启动好了
访问地址:localhost:8848/nacos
2. 使用Nacos服务注册中心
下面我们使用Nacos作为服务注册中心,实现服务的注册与自动发现。
首先,在父工程中,导入如下依赖
<dependencyManagement>
<dependencies>
<!--SpringCloudAlibaba-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--springCloud的依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--SpringBoot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
2.1创建Nacos提供者集群 8001,8002
在nacos-provider-8002服务提供者工程中,添加如下依赖
<dependencies>
<!--SpringCloud ailibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
在nacos-provider2模块中,添加如下配置
server:
port: 8002
spring:
application:
name: nacos-provider
cloud:
nacos:
discovery:
# nacos服务器地址
server-addr: localhost:8848
nacos-provider-8002模块代码中,代码如下
@RestController
@RequestMapping("/nacos")
public class RegistryProviderController {
@GetMapping("/registry/hello")
public String hello(String name) {
return "hello, " + name;
}
}
在启动类上加注解@EnableDiscoveryClient
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProvider8002Application {
public static void main(String[] args) {
SpringApplication.run(NacosProvider8002Application.class, args);
}
}
启动两个服务,然后我们打开nacos官网
点击详情,可以看到我们编写的服务提供者
2.2创建Nacos消费者集群 8887
接着是nacos-consumer-9001模块,依赖,配置同nacos-provider-8002,就是server.port端口改为8887,这里不再赘述。代码如下
@Configuration
public class ClientConfig {
@Bean
public RestTemplate template() {
return new RestTemplate();
}
}
@RestController
@RequestMapping("/call")
public class RegistryConsumerController {
@Autowired
DiscoveryClient discoveryClient;
@Autowired
RestTemplate template;
@GetMapping("/nacos")
public String consumeNacos() {
// 服务发现,获取nacos-provider-8002服务的服务注册信息(即服务注册表)
List<ServiceInstance> instances = discoveryClient.getInstances("nacos-provider-8002");
//随机发起调用在8001和8002之间
Random random = new Random();
int m = random.nextInt(2);
ServiceInstance serviceInstance = instanceList.get(m);
String uri = serviceInstance.getUri().toString();
String url = uri + "/registry/hello?name={1}";
ResponseEntity<String> response = template.getForEntity(url, String.class, "ikun");
String result = response.getBody();
return result;
}
}
这时候我们启动消费者,发现多了一个集群
点击详情,可以看到我们编写的消费提供者
我们现在访问消费者
也是我们自己实现的随机选择8001和8002服务