Nacos,咱河南的物业中心(得劲!)

18 阅读7分钟

一、先说个事儿

零基础全栈开发Java微服务版本实战-后端-前端-运维-实战企业级三个实战项目

资源获取:关注公众号: 小坏说Java ,获取本文所有示例代码、配置模板及导出工具。

昨天俺说用Eureka,是SpringCloud老版本用的。现在人家都升级了,用Nacos了!Nacos是阿里巴巴弄的,比Eureka还得劲!为啥?

  1. 功能多:不光是物业中心,还是配置中心(一中心两用,省钱!)
  2. 中文:中国人弄的,文档看着不费劲
  3. 活跃:更新快,用的人多

就跟咱郑州的社区服务中心一样,又能办户口(服务注册),又能办社保(配置管理)!

二、Nacos是弄啥嘞?

1. 服务注册与发现(办户口)

  • 微服务启动:“领导,我是user-service,来报个到!”
  • Nacos:“中,登记上了,给你个户口本!”
  • 其他服务找user-service:“领导,user-service住哪?”
  • Nacos:“8081号楼,去吧!”

2. 配置管理(发通知)

  • 改个配置,不用每个服务都重启
  • 在Nacos上改一下,所有服务都生效
  • 就跟村里大喇叭喊一嗓子,全村都知道了

三、先把Nacos装起来

零基础全栈开发Java微服务版本实战-后端-前端-运维-实战企业级三个实战项目

资源获取:关注公众号: 小坏说Java ,获取本文所有示例代码、配置模板及导出工具。

步骤1:下载Nacos

  1. 去官网:github.com/alibaba/nac…
  2. 下载最新版(建议2.x版本)
  3. 解压到不带中文的路径!比如:D:\nacos

步骤2:启动Nacos(两种方式)

方式一:单机模式(推荐新手用)

# 进入nacos的bin目录
cd D:\nacos\bin

# Windows
startup.cmd -m standalone  # standalone就是单机

# Linux/Mac
sh startup.sh -m standalone

方式二:用Docker(会Docker的用这个)

docker run --name nacos -e MODE=standalone -p 8848:8848 nacos/nacos-server

步骤3:登录Nacos

  1. 启动成功后,浏览器打开:http://localhost:8848/nacos
  2. 用户名:nacos
  3. 密码:nacos
  4. 看到这个页面就中了:
欢迎使用 Nacos!
服务管理 | 配置管理 | 命名空间 | ...

四、把user-service登记到Nacos

零基础全栈开发Java微服务版本实战-后端-前端-运维-实战企业级三个实战项目

资源获取:关注公众号: 小坏说Java ,获取本文所有示例代码、配置模板及导出工具。

步骤1:改pom.xml(加依赖)

user-servicepom.xml里加:

<!-- Nacos服务注册与发现 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2021.0.5.0</version>  <!-- 注意版本! -->
</dependency>

步骤2:改配置文件(application.yml)

server:
  port: 8081
  
spring:
  application:
    name: user-service  # 服务名,重要!
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848  # Nacos地址
        # 下面这几个参数可配可不配,先知道有这回事
        namespace: public  # 命名空间,默认public
        group: DEFAULT_GROUP  # 分组,默认DEFAULT_GROUP
        ephemeral: true  # 是否临时实例(临时实例挂了自动剔除)

步骤3:启动类加注解

零基础全栈开发Java微服务版本实战-后端-前端-运维-实战企业级三个实战项目

资源获取:关注公众号: 小坏说Java ,获取本文所有示例代码、配置模板及导出工具。

@SpringBootApplication
@EnableDiscoveryClient  // 这个注解是通用嘞,Nacos、Eureka都能用
public class UserServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }
}

步骤4:启动并检查

  1. 启动user-service
  2. 等10秒钟(别急,得给人家登记的时间)
  3. 打开Nacos页面(http://localhost:8848/nacos
  4. 点左边菜单服务管理 -> 服务列表
  5. 看到user-service就妥了:
服务名      健康实例数   触发保护阈值
user-service   1/1         false

五、再登记个order-service

零基础全栈开发Java微服务版本实战-后端-前端-运维-实战企业级三个实战项目

资源获取:关注公众号: 小坏说Java ,获取本文所有示例代码、配置模板及导出工具。

步骤1:新建项目

跟昨天一样,新建order-service

server:
  port: 8082
  
spring:
  application:
    name: order-service  # 名儿不一样!
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

步骤2:写个接口测试一下

@RestController
public class OrderController {
    
    @GetMapping("/order/info")
    public String orderInfo() {
        return "这是订单服务,端口:8082";
    }
    
    // 这个接口先放着,明天用
    @GetMapping("/order/user")
    public String getUserFromOrder() {
        return "明天学咋调user-service!";
    }
}

步骤3:启动查看

  1. 启动order-service
  2. 刷新Nacos服务列表
  3. 看到两个服务,得劲!

六、Nacos比Eureka得劲在哪?

1. 健康检查更细致

  • Eureka:只检查心跳(活着没)
  • Nacos:能检查服务健康状态(活的咋样)

2. 配置管理二合一

  • Eureka:只能管服务注册
  • Nacos:既能管服务,又能管配置
  • 省了一个组件,少了很多麻烦

3. 集群模式更简单

  • Eureka集群配置麻烦
  • Nacos集群一键启动
  • 跟搭积木一样简单

4. 有中文啊!

  • 控制台全中文
  • 文档全中文
  • 报错信息也清晰

七、Nacos核心概念(得知道)

1. 命名空间(Namespace)

  • 相当于小区分区:A区、B区、C区
  • 不同命名空间的服务互相看不见
  • 默认用public

2. 分组(Group)

  • 相当于楼栋:1号楼、2号楼
  • 同一命名空间下,用分组再分一下
  • 默认用DEFAULT_GROUP

3. 服务名(Service Name)

  • 相当于门牌号:101、102
  • 就是spring.application.name

4. 集群(Cluster)

  • 相当于单元:一单元、二单元
  • 同一个服务可以部署多个实例,形成集群

八、今儿个任务总结

要做的事:

  1. ✅ 下载并启动Nacos
  2. ✅ 登录Nacos控制台(8848端口)
  3. ✅ 把user-service注册到Nacos
  4. ✅ 新建order-service也注册上去
  5. ✅ 在Nacos上能看到两个服务

常见问题:

问题1:Nacos启动失败

# 如果端口8848被占用
# 1. 改Nacos端口
# 修改nacos/conf/application.properties
server.port=8849

# 2. 改服务配置文件
spring.cloud.nacos.discovery.server-addr=localhost:8849

问题2:服务注册不上

  • 检查Nacos启动了没(http://localhost:8848/nacos能打开不)
  • 检查配置文件里的server-addr写对没
  • 检查网络通不通
  • 看服务启动日志有没有报错

问题3:版本冲突

<!-- 在pom.xml里统一管理版本 -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2021.0.5.0</version>  <!-- 用这个版本! -->
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

九、手动模拟服务发现(先感受一下)

零基础全栈开发Java微服务版本实战-后端-前端-运维-实战企业级三个实战项目

资源获取:关注公众号: 小坏说Java ,获取本文所有示例代码、配置模板及导出工具。

order-service里写个测试:

@RestController
public class TestController {
    
    @Autowired
    private DiscoveryClient discoveryClient;  // 服务发现客户端
    
    @GetMapping("/services")
    public List<String> getServices() {
        // 获取所有注册的服务
        return discoveryClient.getServices();
    }
    
    @GetMapping("/service/instances/{serviceName}")
    public List<ServiceInstance> getInstances(@PathVariable String serviceName) {
        // 获取某个服务的所有实例
        return discoveryClient.getInstances(serviceName);
    }
}

访问http://localhost:8082/services,能看到:

["user-service", "order-service"]

十、明儿个学啥?

明天咱学服务调用

  • order-service咋调用user-service?
  • OpenFeign,可方便!
  • 不用记IP端口,直接用服务名调用
  • 跟微信找人一样,不用记手机号,搜名字就中了!

小总结

零基础全栈开发Java微服务版本实战-后端-前端-运维-实战企业级三个实战项目

资源获取:关注公众号: 小坏说Java ,获取本文所有示例代码、配置模板及导出工具。

今儿个咱用Nacos,比Eureka得劲多了

  1. 下载简单,启动方便
  2. 界面友好,全中文
  3. 功能强大,注册配置二合一
  4. 国产的,文档看着不费劲

记住:Nacos就是咱微服务的社区服务中心,啥事都管!

明儿个咱学咋让这两个服务说话(互相调用),可带劲!🚀