一、先说个事儿
零基础全栈开发Java微服务版本实战-后端-前端-运维-实战企业级三个实战项目
资源获取:关注公众号: 小坏说Java ,获取本文所有示例代码、配置模板及导出工具。
昨天俺说用Eureka,是SpringCloud老版本用的。现在人家都升级了,用Nacos了!Nacos是阿里巴巴弄的,比Eureka还得劲!为啥?
- 功能多:不光是物业中心,还是配置中心(一中心两用,省钱!)
- 中文:中国人弄的,文档看着不费劲
- 活跃:更新快,用的人多
就跟咱郑州的社区服务中心一样,又能办户口(服务注册),又能办社保(配置管理)!
二、Nacos是弄啥嘞?
1. 服务注册与发现(办户口)
- 微服务启动:“领导,我是user-service,来报个到!”
- Nacos:“中,登记上了,给你个户口本!”
- 其他服务找user-service:“领导,user-service住哪?”
- Nacos:“8081号楼,去吧!”
2. 配置管理(发通知)
- 改个配置,不用每个服务都重启
- 在Nacos上改一下,所有服务都生效
- 就跟村里大喇叭喊一嗓子,全村都知道了
三、先把Nacos装起来
零基础全栈开发Java微服务版本实战-后端-前端-运维-实战企业级三个实战项目
资源获取:关注公众号: 小坏说Java ,获取本文所有示例代码、配置模板及导出工具。
步骤1:下载Nacos
- 去官网:github.com/alibaba/nac…
- 下载最新版(建议2.x版本)
- 解压到不带中文的路径!比如:
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
- 启动成功后,浏览器打开:
http://localhost:8848/nacos - 用户名:
nacos - 密码:
nacos - 看到这个页面就中了:
欢迎使用 Nacos!
服务管理 | 配置管理 | 命名空间 | ...
四、把user-service登记到Nacos
零基础全栈开发Java微服务版本实战-后端-前端-运维-实战企业级三个实战项目
资源获取:关注公众号: 小坏说Java ,获取本文所有示例代码、配置模板及导出工具。
步骤1:改pom.xml(加依赖)
在user-service的pom.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:启动并检查
- 启动
user-service - 等10秒钟(别急,得给人家登记的时间)
- 打开Nacos页面(
http://localhost:8848/nacos) - 点左边菜单服务管理 -> 服务列表
- 看到
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:启动查看
- 启动
order-service - 刷新Nacos服务列表
- 看到两个服务,得劲!
六、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)
- 相当于单元:一单元、二单元
- 同一个服务可以部署多个实例,形成集群
八、今儿个任务总结
要做的事:
- ✅ 下载并启动Nacos
- ✅ 登录Nacos控制台(8848端口)
- ✅ 把user-service注册到Nacos
- ✅ 新建order-service也注册上去
- ✅ 在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得劲多了:
- 下载简单,启动方便
- 界面友好,全中文
- 功能强大,注册配置二合一
- 国产的,文档看着不费劲
记住:Nacos就是咱微服务的社区服务中心,啥事都管!
明儿个咱学咋让这两个服务说话(互相调用),可带劲!🚀