nacos之负载均衡
简介随着Eureka宣告闭源,更多人开始转向Zookeeper和Nacos。Nacos不仅有着优秀的注册中心,还拥有远程配置和服务总线的的功能,当前的功能已经远超Eureka,后续发展不可估量。快速开始首先创建一个springboot项目,不需要引入依赖,删除src目录,修改pom文件。导入的依赖其实只需要nacos-discovery和spring-web就行了,这个demo里没有用到远程配置,
·
简介
随着Eureka宣告闭源,更多人开始转向Zookeeper和Nacos。Nacos不仅有着优秀
的注册中心,还拥有远程配置和服务总线的的功能,当前的功能已经远超Eureka,
后续发展不可估量。
快速开始
首先创建一个springboot项目,不需要引入依赖,删除src目录,修改pom文件。
-
导入的依赖其实只需要nacos-discovery和spring-web就行了,这个demo里没有用到远程配置,所以nacos-config不需要
-
因为要使用模块化开发,所以这个大的项目需要作为pom依赖,需要配置
<packaging>pom</packaging>
-
然后在确定子项目的版本,需要有properties和dependencyManagement来进行版本控制
-
之后因为需要创建多个模块,所以把需要创建的模块进行引入modules。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.5.RELEASE</version>
<relativePath/>
</parent>
<groupId>org.jgs2007</groupId>
<artifactId>sc-nacos-study</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>sc-nacos-study</name>
<description>Demo project for Spring Boot</description>
<packaging>pom</packaging>
<modules>
<module>user-consumer</module>
<module>user-provider</module>
<module>user-provider-2</module>
<module>common</module>
</modules>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR9</spring-cloud.version>
<spring-cloud-alibaba.version>2.2.3.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
创建子模块
user-provider
- 首先修改pom文件,将父项目的坐标引入,换成这样。
<parent>
<groupId>org.jgs2007</groupId>
<artifactId>sc-nacos-study</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
- 在运行类上添加注解@EnableDiscoveryClient
- 更改配置文件格式为yml,添加nacos设置。设置该模块的端口号,名称和nacos地址。
server:
port: 7071
spring:
application:
name: user-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848
- 编写控制类方法,严格遵守restful接口开发规范
package org.jgs2007.scnacosstudy.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author sun
* @Title:
* @Description:
* @date 2020-11-1720:32
*/
@RestController
@RequestMapping("user")
public class UserController {
@GetMapping
public String list(){
return "123";
}
}
user-provider-2
- 因为是集群,所以配置基本一致,只需要更改端口号即可,7072,为了结果展示明显,控制器返回的字符串改为“456”.
user-consumer
- 操作也基本相同,但是注意几点。
-
- 主运行类上添加两个注解:
@EnableDiscoveryClient
@EnableFeignClients
- 主运行类上添加两个注解:
-
- 端口号改为8081,服务名称改为user-consumer
-
- 控制器编写需要引入feignClient类,这是下一个模块的。
package org.jgs2007.scnacosstudy.controller;
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;
/**
* @author sun
* @Title:
* @Description:
* @date 2020-11-1720:32
*/
@RestController
@RequestMapping("user")
public class UserController {
@Autowired
protected UserProviderClient userProviderClient;
@RequestMapping("list")
public String list(){
return userProviderClient.list();
}
}
common
common模块作为连接消费者和提供者的介质,所以配置有点不一样,只需要配置pom文件和编写控制器代码就行
- 修改pom文件,引入OpenFeign依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.jgs2007</groupId>
<artifactId>sc-nacos-study</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>common</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
</project>
- 编写代码,需要匹配provider模块的写法,返回类型必须保持一致。
package org.jgs2007.scnacosstudy.controller;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
/**
* @author sun
* @Title:
* @Description:
* @date 2020-11-1720:46
*/
@FeignClient(value = "user-provider", path = "user")
public interface UserProviderClient {
@GetMapping
String list();
}
启动nacos
- 下载并解压好nacos文件,进入到bin目录下运行cmd指令。弹出窗口后输入startup.cmd -m standalone,启动nacos。
- 然后启动所有服务,启动成功会显示已完成的服务。
- 最后运行localhost:8081/user/list,运行成功会显示。
- 再次运行
nacos注册服务和轮询功能完成。
更多推荐
已为社区贡献1条内容
所有评论(0)