Nacos = (Dynamic) Naming and Configuration Service 注册中心+配置中心,也就是代替Eureka做为服务注册中心,替代Config做为配置中心,替代Bus做为消息总线。java
官方网站: http://nacos.iogit
Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。github
服务是Nacos中的头等公民。Nacos支持几乎全部类型的服务,入:Dubbo/gRPC,Spring Cloud RESTFUL服务或Kubernetes服务。web
Nacos使服务易于注册本身并经过DNS或HTTP接口发现其余服务。 Nacos还提供服务的实时运行情况检查,以防止向不正常的主机或服务实例发送请求。spring
动态配置服务使您能够在全部环境中以集中和动态的方式管理全部服务的配置。 Nacos消除了在更新配置时从新部署应用程序和服务的需求,这使配置更改更加有效和敏捷。windows
Nacos支持加权路由,使您能够更轻松地在数据中心内的生产环境中实施中间层负载平衡,灵活的路由策略,流控制和简单的DNS解析服务。它能够帮助您轻松实现基于DNS的服务发现,并防止应用程序耦合到特定于供应商的服务发现API。app
Nacos提供了易于使用的服务仪表板,可帮助您管理服务元数据,配置,kubernetes DNS,服务运行情况和指标统计信息。负载均衡
推荐下载稳定版本:Nacos1.3.1ide
下载地址:https://github.com/alibaba/nacos/releases/tag/1.3.1微服务
下载以后,进入bin目录,cmd startup.cmd -m standalone
启动单机模式。
接着访问:http://localhost:8848/nacos/,帐号密码都是nacos
。
新建模块:cloudalibaba-provider-payment9001
,引入依赖:
<!--SpringCloud ailibaba nacos --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
server: port: 9001 spring: application: name: nacos-payment-provider cloud: nacos: discovery: server-addr: localhost:8848 #配置Nacos地址 management: endpoints: web: exposure: include: '*'
@EnableDiscoveryClient @SpringBootApplication public class PaymentMain9001 { public static void main(String[] args) { SpringApplication.run(PaymentMain9001.class, args); } }
@RestController public class PaymentController { @Value("${server.port}") private String serverPort; @GetMapping(value = "/payment/nacos/{id}") public String getPayment(@PathVariable("id") Integer id) { return "nacos registry, serverPort: " + serverPort + "\t id" + id; } }
启动nacos,启动9001服务,访问localhost:8848/nacos
。
服务已经成功注册进nacos注册中心。
仿照9001模块再建一个9002模块,具体步骤就省略了,端口号改一改就能够。接着依次启动nacos,9001,9002,观察nacos服务注册中心的状况:
nacos-payment-provider
服务下包含了两个实例。
新建cloudalibaba-consumer-nacos-order83
,依旧引入依赖:
<!--SpringCloud ailibaba nacos --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
nacos默认支持负载均衡:是由于该依赖已经集成ribbon,故自然支持。
server: port: 83 spring: application: name: nacos-order-consumer cloud: nacos: discovery: server-addr: localhost:8848 #消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者) service-url: nacos-user-service: http://nacos-payment-provider
@EnableDiscoveryClient @SpringBootApplication public class OrderNacosMain83 { public static void main(String[] args) { SpringApplication.run(OrderNacosMain83.class, args); } }
@RestController @Slf4j public class OrderNacosController { @Resource private RestTemplate restTemplate; @Value("${service-url.nacos-user-service}") private String serverURL; @GetMapping(value = "/consumer/payment/nacos/{id}") public String paymentInfo(@PathVariable("id") Long id) { return restTemplate.getForObject(serverURL + "/payment/nacos/" + id, String.class); } }
@Configuration public class ApplicationContextConfig { @Bean @LoadBalanced public RestTemplate getRestTemplate() { return new RestTemplate(); } }
启动nacos,80消费者,9001,9002服务提供模块。
访问:http://localhost:83/consumer/payment/nacos/1
,将会轮询访问服务接口。
本系列文章为《尚硅谷SpringCloud教程》的学习笔记【版本稍微有些不一样,后续遇到bug再作相关说明】,主要作一个长期的记录,为之后学习的同窗提供示例,代码同步更新到Gitee:https://gitee.com/tqbx/spring-cloud-learning,而且以标签的形式详细区分每一个步骤,这个系列文章也会同步更新。