从0开始搭建 SpringCloudAlibaba 项目
1、服务注册中心和配置中心nacos
- 首先去NACOS官网 下载相关jar,这里使用的是最新版本1.3.2
- 解压缩后需要配置数据库 nacos->conf 找到nacos-mysql.sql ,在数据库建库nacos并执行该脚本。
- 修改applicaion.properties文件,其中将默认连接方式修改为mysql数据库连接
spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://localhost:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=GMT%2b8 db.user=root db.password=root
- 配置完以上内容后就可以启动nacos服务了,选择nacos->bin目录下startup.cmd。双击该文件运行,当然运行不了。 因为1.3.2版本默认的启动方式集群模式,需要切换成单机模式才可以运行。
- 打开cmd切换到nacos的bin文件夹下,输入命令startup.cmd -m standalone ,出现如下显示就表示启动成功了。
- 访问nacos网页看看效果,cmd启动完了会有启动地址,如上图红框地址。默认的账号密码为 nacos
以上就是nacos的配置信息与启动方式。第一步已经完事了,接下来开始创建demo,开始写代码啦
注意事项:必须先启动nacos,才能启动cloud的项目
2、创建SpringCloudAlibaba项目
2.1 创建一个父工程
修改pom文件
<?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> <modules> <module>cloudalibaba-provider</module> </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>cloudalibaba</artifactId> <version>0.0.1-SNAPSHOT</version> <name>cloudalibaba</name> <description>Demo project for Spring Boot</description> <packaging>pom</packaging> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.2.1.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>
2.2 创建生产者和消费者项目
- 首先创建生产者项目 cloudablibaba-provider,新建module项目,新建的是没有包和启动类,没有配置文件,需要手动创建
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
server: port: 8000 spring: application: name: provider-server #服务名称 cloud: nacos: discovery: server-addr: 127.0.0.1:8848 #nacos的服务注册中心地址
- 创建一个controller测试一下
完成以上,生产者就完成了,启动项目看看
注意事项:父工程的pom文件中必须添加
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
不然启动项目后,注册中心是无法发现服务的
- 启动完成后去nacos服务注册中心看看,发现provider生产者已经注册到了nacos,说明生产者已经搭建完成。
访问地址:http://localhost:8000/index ,如图所示,生产者已经搭建完成
2.2 创建消费者,步骤和创建生产者一样,修改一下端口号和服务名称
- 启动完成后nacos注册服务中心可以看到消费者服务已经注册
访问地址:http://localhost:8001/index ,如图所示,生产者已经搭建完成
2.3 整合feign,实现消费者调用生产者
- 在消费者pom.xml 添加依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.2.5.RELEASE</version> </dependency>
- 添加 @EnableFeignClients 注解
- 创建 ConsumerFeign.java 和 FeignServiceFallBack
- 在controller里添加方法
- 重启消费者服务,并访问接口 http://localhost:8001/getInfo,出现如下结果,表示消费者调用生产者成功
- 然后停止生产者服务 cloudablibaba-provider,访问以上接口,看看什么效果?
出现以上结果表示降级没有起作用。并没有返回自定义的信息。理论上应该显示 “生产者cloudalibaba-provider服务被降级停用了”。
为什么出现这个结果呢,SpringCloudAlibaba 降级必须与熔断器sentinel一起用才生效。在消费者cloudalibaba-consumer的pom.xml添加以下依赖
<!-- 集成sentinel --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> <exclusions> <!--除去该依赖,controller返回的结果才是json,不去除就xml--> <exclusion> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> </exclusion> </exclusions> </dependency>
- 在yml文件中添加开启熔断的开关
- 重启消费者服务,访问接口
2.4 整合网关SpringCloudGateWay (不是zuul)
- 创建cloudalibaba-gateway服务,创建的都是module
<!--网关--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> <version>2.2.1.RELEASE</version> </dependency> <!--nacos注册中心--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
- 新建启动类和配置文件
- 配置文件application.yml
server: port: 9000 spring: application: name: gateway-server cloud: nacos: discovery: server-addr: 127.0.0.1:8848 gateway: routes: # 路由数组[路由 就是指定当请求满足什么条件的时候转到哪个微服务] - id: provider-route # 当前路由的标识, 要求唯一,可以随便写 uri: lb://provider-server # lb指的是从nacos中按照名称获取微服务,并遵循负载均衡策略 predicates: # 断言(就是路由转发要满足的条件) - Path=/provider/** # 当请求路径满足Path指定的规则时,才进行路由转发 filters: # 过滤器,请求在传递过程中可以通过过滤器对其进行一定的修改 - StripPrefix=1 # 转发之前去掉1层路径 - id: consumer-route uri: lb://consumer-server predicates: - Path=/consumer/** filters: - StripPrefix=1
启动网关服务,(当然消费者和生产者也要启动,最重要的nacos一定要最先启动)
启动网关报错,这是为什么呢?因为父工程中引入了 spring-boot-starter-web 依赖,SpringCloudGateway中不能引入此依赖,所以要修改cloudalibaba-gateway服务的pom.xml
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <!-- <parent> <artifactId>cloudalibaba</artifactId> <groupId>com.example</groupId> <version>0.0.1-SNAPSHOT</version> </parent>--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>cloudalibaba-gateway</artifactId> <dependencies> <!--网关--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> <version>2.2.1.RELEASE</version> </dependency> <!--nacos注册中心--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.2.1.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>
重启网关服务cloudalibaba-gateway,访问地址:http://localhost:9000/provider/index
访问消费者:http://localhost:9000/consumer/index
访问消费者调用生产者:http://localhost:9000/consumer/getInfo
以上就是SpringCloudAlibaba基础构建。有不对的地方希望留言指出,不喜勿喷。 转载请标明出处
关注下面微信公众号,回复SpringCloudAlibaba,即可获取下载地址。