从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里添加方法

 

  • 然后停止生产者服务 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,即可获取下载地址。

  

posted @ 2022-05-16 09:57  黄进广寒  阅读(1970)  评论(0编辑  收藏  举报