第一章 Java线程池技术应用
第二章 CountDownLatch和Semaphone的应用
第三章 Spring Cloud 简介
第四章 Spring Cloud Netflix 之 Eureka
第五章 Spring Cloud Netflix 之 Ribbon
第六章 Spring Cloud 之 OpenFeign
第七章 Spring Cloud 之 GateWay
第八章 Spring Cloud Netflix 之 Hystrix
第九章 代码管理gitlab 使用
第十章 SpringCloud Alibaba 之 Nacos discovery
Nacos 英文全称为 Dynamic Naming and Configuration Service,它是一个开源的、易于使用的、功能强大的配置和发现管理系统,由阿里巴巴团队使用 Java 语言开发的开源项目。Nacos 为微服务架构提供了一种简单、灵活、动态的配置管理方案,可以支持大规模的分布式系统和云原生应用。它旨在提供动态服务发现、配置管理和服务管理等功能,帮助开发者构建易于扩展、动态适应的分布式系统。
组成部分 | 全称 | 描述 |
---|---|---|
Na | naming/nameServer | 即服务注册中心,与 Spring Cloud Eureka 的功能类似。 |
co | configuration | 即配置中心,与 Spring Cloud Config+Spring Cloud Bus 的功能类似。 |
s | service | 即服务,表示 Nacos 实现的服务注册中心和配置中心都是以服务为核心的。 |
前几章节我们介绍了Spring Cloud Netflix套件,今天开始我们升级成使用Spring Cloud Alibaba。
Spring Cloud Alibaba 的 Nacos discovery,会替换掉Spring Cloud Netflix 的 Eureka。
整个电商微服务架构,选用Spring Cloud Alibaba套件,包括:
再加上Spring Cloud组件:
以及:
组件 | 描述 | 功能 |
---|---|---|
Nacos Server | Nacos 服务端,与 Eureka Server 不同,Nacos Server 由阿里巴巴团队使用 Java 语言编写并将 Nacos Server 的下载地址给用户,用户只需要直接下载并运行即可。 | Nacos Server 可以作为服务注册中心,帮助 Nacos Client 实现服务的注册与发现。 |
– | – | Nacos Server 可以作为配置中心,帮助 Nacos Client 在不重启的情况下,实现配置的动态刷新。 |
Nacos Client | Nacos 客户端,通常指的是微服务架构中的各个服务,由用户自己搭建,可以使用多种语言编写。 | Nacos Client 通过添加依赖 spring-cloud-starter-alibaba-nacos-discovery,在服务注册中心(Nacos Server)中实现服务的注册与发现。 |
– | – | Nacos Client 通过添加依赖 spring-cloud-starter-alibaba-nacos-config,在配置中心(Nacos Server)中实现配置的动态刷新。 |
从 Nacos 官方提供的下载页面中,下载 Nacos Server 并运行。
Nacos Client 启动时,会把服务以服务名(spring.application.name)的方式注册到服务注册中心(Nacos Server)
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
下载:
https://github.com/alibaba/nacos/releases/tag/2.0.4
Nacos Server 下各目录说明如下:
进入bin目录,执行启动命令:startup.cmd -m standalone
http://localhost:8848/nacos
用户名/密码:nacos/nacos
org.springframework.cloud spring-cloud-dependencies 2021.0.5 pom import com.alibaba.cloud spring-cloud-alibaba-dependencies 2021.0.4.0 pom import
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery 2021.0.4.0
spring: application: name: app-provider-service #服务名 cloud: nacos: discovery: server-addr: localhost:8848
@EnableDiscoveryClient
启动应用,查看nacos后台
com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery 2021.0.4.0
spring: application: name: app-api-service #服务名 cloud: nacos: discovery: server-addr: localhost:8848 #Nacos server 的地址
@EnableDiscoveryClient
创建config文件夹,在下面添加LoadBalancedConfig配置
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; @Configuration public class LoadBalancedConfig { @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } }
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import java.util.Map; @RestController @RequestMapping("/user") public class UserController { private final static String SERVER_URL = "http://localhost:8080"; @Autowired private RestTemplate restTemplate; @GetMapping("/getUserName") public Map getUserName() { String url = SERVER_URL + "/user/getUserName"; Map map = restTemplate.getForObject(url , Map.class); map.put("type" , "caller"); return map; } }
org.springframework.cloud spring-cloud-dependencies 2021.0.5 pom import com.alibaba.cloud spring-cloud-alibaba-dependencies 2021.0.4.0 pom import
org.springframework.boot spring-boot-starter-web com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.cloud spring-cloud-starter-openfeign org.springframework.cloud spring-cloud-starter-loadbalancer
@EnableFeignClients
import com.xxx.common.entity.User; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; @FeignClient(name = "app-provider-service") public interface UserService { @GetMapping("/user/getUserName") public User getUserName() ; }
@Autowired private UserService userService; @GetMapping("/getUserName") public Map getUserName() { User user = userService.getUserName(); Map map = new HashMap(); map.put("code" , 200); map.put("data" , user); map.put("type" , "caller"); return map; }
云原生微服务治理有很多手段,但在Java生态里,最主流的还是Spring Cloud Alibaba 、Spring Cloud Netflix。
Spring Cloud文章的前部分已经把Spring Cloud Netflix相关组件讲解且实践过了,这章我们讲解了Spring Cloud Alibaba的Nacos discovery,后续还会继续讲解完Spring Cloud Alibaba其他组件。
上一篇:MySQL中表的增删改查