1.Nacos简介
1.1 为什么叫Nacos
前四个字母为Nameing和Configuration的前两个字母,最后的s为Service
1.2是什么
1.3能干嘛
在这里我们先介绍nacos作为服务注册中心的使用
1.4各种注册中心对比
其实Nacos可以切换为CP,在这里就不讲述了。
2.下载安装
运行环境
点击版本说明,点击Tags, 在这里我们用的是1.1.4的windows版本
下载完成之后直接解压,找到bin目录,点击startup.cmd
运行
出现以下界面
访问 http://localhost:8848/nacos/
出现上图表示我们的nacos启动成功
此外,默认的用户名密码都是nacos
登录后会看到我们的nacos控制面板
3.案例
在这里我们将注册进三个服务: 一个订单微服务,两个支付微服务,并且订单微服务通过ribbon调用支付微服务实现负载均衡
3.1创建支付微服务9001
3.1.1搭建香项目基础
pom
在这里springcloud-alibaba
使用的是2.1.0.RELEASE
版本,spring-boot
使用的是2.2.2.RELEASE
版本
nacos中的服务注册和服务配置 依赖是分开的,在这里我们只引入了服务注册依赖
<dependencies>
<!--SpringCloud ailibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- SpringBoot整合Web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--日常通用jar包配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
yml
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos地址
主启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* @author Xkuna
* @date 2020/8/14 12:57.
*/
@SpringBootApplication
@EnableDiscoveryClient//开启服务注册
public class PaymentMain9001 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain9001.class, args) ;
}
3.1.2创建controller
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author Xkuna
* @date 2020/8/14 12:58.
*/
@RestController
public class PaymentController {
@Value("${server.port}")
private String port ;
@GetMapping("/payment/port")
public String getPort(){
return port ;
}
}
3.2创建支付微服务9002
copy支付微服务9001 修改端口为9002 主启动类可以改下名,便于区分
3.3 创建订单微服务83
3.3.1搭建项目基础
pom
<dependencies>
<!--SpringCloud ailibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- SpringBoot整合Web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--日常通用jar包配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
yml
server:
port: 83
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848
主启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* @author Xkuna
* @date 2020/8/14 13:12.
*/
@SpringBootApplication
@EnableDiscoveryClient
public class OrderNacosMain83 {
public static void main(String[] args) {
SpringApplication.run(OrderNacosMain83. class, args) ;
}
}
3.3.2创建restTempalte配置类
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
* @auther zzyy
* @create 2020-02-23 14:45
*/
@Configuration
public class ApplicationContextConfig
{
@Bean
@LoadBalanced
public RestTemplate getRestTemplate()
{
return new RestTemplate();
}
}
3.3.3 创建controller
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
/**
* @auther zzyy
* @create 2020-02-23 15:01
*/
@RestController
@Slf4j
public class OrderNacosController
{
@Resource
private RestTemplate restTemplate;
private static final String serverURL = "http://nacos-payment-provider" ;
@GetMapping(value = "/consumer/payment/port")
public String paymentInfo()
{
return restTemplate.getForObject(serverURL+"/payment/port",String.class);
}
}
3.4测试
首先我们启动三个微服务
然后我们访问 http://localhost:8848/nacos/ 并登录
点击左侧的服务列表 就可以看到我们启动了两个不同服务, 而 支付服务存在两个实例
如此我们的所有服务注册进 nacos成功了
我们测试下服务调用
访问 http://localhost:83/consumer/payment/port
多刷新几次,发现订单微服务成功调用支付微服务并且实现了负载均衡
4.结束语
这就是Alibaba的Nacos中的服务注册。是不是比Eureka zookeeper consul 更直观,更容易上手呢? 😄
但是,Nacos远远不止这些~~
因为它还有另一强大的应用------Nacos服务配置
Nacos集群搭建和服务配置中心的使用👉:戳我