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基础构建。有不对的地方希望留言指出,不喜勿喷。 转载请标明出处
源码已上传gitee:源码下载