微服务现在越来火,有基于 Spring Cloud Netflix 体系的,也有基于 Spring Cloud Alibaba 为体系的。从以前的 Eureka 注册中心、Spring Cloud Config 配置中心、Spring Cloud Bus消息总线 到完全可以替代他们的 Nacos 出现,微服务技术体系的未来发展方向愈加清晰。所以,学会并了解如何使用 Nacos 是十分重要的。
Nacos 不仅仅可以作为配置中心使用,还可以作为注册中心使用,其有很多十分优秀的特性,部署起来也十分方便。
主要目的:
- 熟练使用 Nacos;
- 基于 Spring Cloud Alibaba 体系进行项目基础 Demo 搭建,便于后续源码分析;
- 整合 dubbo,便于后续源码分析;
准备工作
部署
单机版本
# 拉取镜像 docker pull nacos/nacos-server # 运行 docker run --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server
访问 http://127.0.0.1:8848/nacos/#/login
密码和账号默认都是 nacos
Spring Boot 集成
配置说明
配置命名空间
Spring Cloud + Nacos
依赖配置
compile libs["spring-cloud-starter-alibaba-nacos-config"] compile libs["spring-cloud-starter-alibaba-nacos-discovery"]
resources 下新建文件 bootstrap.yaml
# nacos 配置 (nacos config必须配置在bootstrap) spring: cloud: nacos: discovery: server-addr: ${NACOS_SERVER_ADDR:127.0.0.1:8848} namespace: ${NACOS_NAMESPACE:dsb-cloud} Metadata: {"checkSum": "${random.value}-${random.uuid}"} config: server-addr: ${NACOS_SERVER_ADDR:127.0.0.1:8848} namespace: ${NACOS_NAMESPACE:dsb-cloud} file-extension: yaml
服务注册中心
// 启动类开启注解 @EnablediscoveryClient
作为 Spring Boot 项目启动后,可以看到成功注册到 Nacos 上了。
点击详情后可以看到对应的服务信息
dubbo + Nacos
公共 API 包
服务提供者
pom
dependencies { compile libs["spring-boot-starter-actuator"] //nacos compile(libs["nacos-discovery-spring-boot-starter"]) { exclude group: 'com.alibaba.spring', module: 'spring-context-support' } compile 'com.alibaba.spring:spring-context-support:1.0.3' compile project(':spring-cloud-examples:dubbo-examples:spring-cloud-dubbo-api') compile libs['dubbo-spring-boot-starter'] testCompile "org.springframework.boot:spring-boot-starter-test" }
application.yaml
spring: application: name: spring-boot-dubbo-provider dubbo: application: name: spring-boot-dubbo-provider registry: nacos://127.0.0.1:8848 protocol: name: dubbo port: 20880
bootstrap.yaml
# nacos 配置 (nacos config必须配置在bootstrap) spring: cloud: nacos: discovery: server-addr: ${NACOS_SERVER_ADDR:127.0.0.1:8848} namespace: ${NACOS_NAMESPACE:dsb-cloud} Metadata: {"checkSum": "${random.value}-${random.uuid}"} config: server-addr: ${NACOS_SERVER_ADDR:127.0.0.1:8848} namespace: ${NACOS_NAMESPACE:dsb-cloud} file-extension: yaml
核心类
// 启动类 @SpringBootApplication @dubboComponentScan public class SpringBootdubboProviderApplication { public static void main(String[] args) { SpringApplication.run(SpringBootdubboProviderApplication.class, args); } } //服务实现类 package pub.dsb.api.service.impl; import org.apache.dubbo.config.annotation.Service; import pub.dsb.api.service.IHelloService; @Service public class HelloServiceImpl implements IHelloService { @Override public String hi(String name) { return "spring-cloud-dubbo-example:" + name; } }
启动服务提供者
服务消费者
- pom (和服务提供者一样)
dependencies { compile libs["spring-boot-starter-web"] compile libs["spring-boot-starter-actuator"] //nacos compile(libs["nacos-discovery-spring-boot-starter"]) { exclude group: 'com.alibaba.spring', module: 'spring-context-support' } compile 'com.alibaba.spring:spring-context-support:1.0.3' compile project(':spring-cloud-examples:dubbo-examples:spring-dubbo-api') compile libs['dubbo-spring-boot-starter'] testCompile "org.springframework.boot:spring-boot-starter-test" }
- yaml
spring: application: name: spring-boot-dubbo-consumer dubbo: registry: address: nacos://127.0.0.1:8848
- 核心类
@RestController public class dubboRefController { @Reference(check = false) private IHelloService helloService; @GetMapping("/hi") public String hi(){ return helloService.hi(System.currentTimeMillis() + ""); } } //启动类 @SpringBootApplication public class SpringBootdubboConsumerApplication { public static void main(String[] args) { SpringApplication.run(SpringBootdubboConsumerApplication.class, args); } }
- 接口测试 服务提供者 8080, 服务消费者 8081
GET http://127.0.0.1:8081/hi HTTP/1.1 200 Content-Type: text/plain;charset=UTF-8 Content-Length: 40 Date: Tue, 01 Sep 2020 16:55:53 GMT spring-cloud-dubbo-example:1598979353325
- 注册信息
问题
ClassNotFoundException: com.alibaba.spring.util.BeanRegistrar
引用新包,剔除有问题的包 spring-context-support。
No provider available for the service
@Reference(check = false)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。