开发环境
开发工具:IDEA 2021.3.2
JDK版本:JDK1.8
Maven版本:Maven3.8
SpringCloud版本:Hoxton.SR12
SpringCloudAlibaba版本:2.2.7.RELEASE
SpringBoot版本:2.3.12.RELEASE
Nacos版本:2.0.3
Nacos
Nacos 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos 致力于发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
搭建Nacos
Nacos文档 里面有两种nacos-server下载方式:下载编译后压缩包和源码
下载编译后的压缩包(慢,不推荐)
①访问nacos官网,点击最新稳定版本跳转到下载页面
②点击左上角Releases选择版本,展开Assets,下载zip压缩包
下载源码(推荐)
①根据Nacos文档,首先克隆源码(github太慢,使用gitee Nacos镜像)
# -b 后面带的是nacos版本 git clone -b 2.0.3 https://gitee.com/mirrors/Nacos.git
②克隆完之后,执行以下命令构建项目
cd nacos/ mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
③构建完项目之后,进入distribution\target目录下
④在该bin目录下打开cmd,执行 startup.cmd -m standalone 命令启动nacos-server
⑤浏览访问http://localhost:8848/nacos/index.html,登录客户端默认账号密码都是nacos
搭建Spring Cloud项目
搭建父工程
①创建maven项目,命名为spring-cloud-alibaba-2022
②删除src目录
③导入依赖,进行依赖统一管理
<dependencyManagement> <dependencies> <!--SpringCloud Alibaba 依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.2.7.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <!--SpringCloud 依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR12</version> </dependency> <!--SpringBoot 依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.3.12.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
搭建服务提供者
①创建maven子模块,命名为cloud-provider8001
②导入依赖
<dependencies> <!--nacos--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--spring boot依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies>
③创建application.yml配置文件
server: port: 8001 spring: application: name: cloud-provider-nacos cloud: nacos: discovery: #注册中心地址,127.0.0.1不能写成localhost,不然会报错 server-addr: 127.0.0.1:8848 management: endpoints: web: exposure: include: "*"
④创建启动类,添加@EnableDiscoveryClient注解
@EnableDiscoveryClient @SpringBootApplication public class ProviderNacos8001 { public static void main(String[] args) { SpringApplication.run(ProviderNacos8001.class, args); } }
⑤创建controller
@RestController @RequestMapping("provider") public class ProviderController { @Value("${server.port}") private String port; @GetMapping("getUUID") public String getUUID() { return port + "\t:\t" + UUID.randomUUID(); } }
搭建服务消费者
①创建maven子模块,命名为cloud-consumer80
②导入依赖
<dependencies> <!--nacos--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--spring boot依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies>
③创建application.yml配置文件
server: port: 80 spring: application: name: cloud-consumer-nacos cloud: nacos: discovery: server-addr: 127.0.0.1:8848 management: endpoints: web: exposure: include: "*"
④创建启动类,添加@EnableDiscoveryClient注解
@EnableDiscoveryClient @SpringBootApplication public class ConsumerNacos80 { public static void main(String[] args) { SpringApplication.run(ConsumerNacos80.class, args); } }
⑤创建配置类,把RestTemplate注入到容器当中
@Configuration public class ApplicationContextConfig { @Bean @LoadBalanced //nacos-discovery依赖自带ribbon,可以实现负载均衡 public RestTemplate getRestTemplate() { return new RestTemplate(); } }
⑥创建controller
@RestController @RequestMapping("consumer") public class ConsumerController { // RestTemplate 方式 // cloud-provider-nacos是服务提供者在注册中心的昵称 private static final String URL = "http://cloud-provider-nacos/provider"; @Autowired private RestTemplate restTemplate; @GetMapping("getUUID") public String getUUID() { String result = null; result = restTemplate.getForObject(URL + "/getUUID", String.class); return result; } }
测试
启动nacos注册中心,登录客户端
启动cloud-provider8001服务提供者,cloud-consumer80服务消费者
刷新nacos客户端