项目工程.jpg

项目依赖关系:

  • web_portal依赖与pojo

  • service_portal依赖于dao

  • pojo与dao依赖于common

  • gateway则是网关

    父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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
    
     <groupId>com.mysb</groupId>
     <artifactId>BYue_store_mobile</artifactId>
     <packaging>pom</packaging>
     <version>1.0-SNAPSHOT</version>
     <modules>
         <module>web_portal</module>
         <module>dao</module>
         <module>common</module>
         <module>pojo</module>
         <module>service_portal</module>
         <module>gateway</module>
     </modules>
     <!-- 集中定义依赖版本号 -->
     <properties>
         <mysql.version>8.0.11</mysql.version>
     </properties>
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
         <version>2.2.3.RELEASE</version>
     </parent>
     <dependencyManagement>
         <dependencies>
             <!--springcloud 2.1.1-->
             <dependency>
                 <groupId>org.springframework.cloud</groupId>
                 <artifactId>spring-cloud-dependencies</artifactId>
                 <version>Hoxton.SR1</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
    
             <dependency>
                 <groupId>com.alibaba.cloud</groupId>
                 <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                 <version>2.1.1.RELEASE</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
    
             <!-- MySql -->
             <dependency>
                 <groupId>mysql</groupId>
                 <artifactId>mysql-connector-java</artifactId>
                 <version>${mysql.version}</version>
             </dependency>
             <!--热部署-->
             <dependency>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-devtools</artifactId>
             </dependency>
         </dependencies>
    
     </dependencyManagement>
    </project>

    搭建项目前,先把需要的version和必要的包定义在父pom中,然后在common项目中实现

    • dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项,如果父类有很多依赖,这样没用的也继承来,会造成臃肿
    • dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖

common POM

<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>BYue_store_mobile</artifactId>
        <groupId>com.mysb</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>common</artifactId>
    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--gateway整合nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
        </dependency>

        <!--jdbc-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <!--mysql 驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!--Mybatis启动器-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <!--servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
        </dependency>
    </dependencies>
</project>

web_portal 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>BYue_store_mobile</artifactId>
        <groupId>com.mysb</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>web_portal</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.mysb</groupId>
            <artifactId>pojo</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--openfeign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!--sentinel-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>com.alibaba.csp</groupId>
                    <artifactId>sentinel-transport-simple-http</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--alibaba ahas 整合 sentinel-->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>spring-boot-starter-ahas-sentinel-client</artifactId>
            <version>1.6.1</version>
        </dependency>
    </dependencies>
</project>

web_portal配置文件

server:
  port: 9005

spring:
  application:
    name: web-portal #nacos中的服务名称
  cloud:
    nacos:   #整合gateway
      discovery:
        server-addr: ip:8849
    sentinel:
      transport:
        dashboard: ip:8000
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://ip:3306/fmstore?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
    username: root
    password: 1234.

mybatis:
  type-aliases-package: com.mysb.core.pojo
  mapper-locations: classpath*:com.mysb.core.dao.*/*Dao.xml

ribbon:
  eager-load:
    enabled: true
    clients: service-portal #ribbon饥饿加载  多个服务逗号分离
feign:
  sentinel:
    enabled: true

ahas:
  namespace: default
  license: ***************** 
project:
  name: web-portal

gateway 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>BYue_store_mobile</artifactId>
        <groupId>com.mysb</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>gateway</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>io.projectreactor.netty</groupId>
            <artifactId>reactor-netty</artifactId>
            <version>0.9.4.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
        </dependency>
    </dependencies>
</project>

nacos集群步骤

  • 1.编译源码, 支持mysql8数据库 [https://github.com/alibaba/nacos/releases]

  • 2.下载后, 修改源码进行编译,把mysql数据库改为mysql8
    修改pom文件

       <dependency>
              <groupId>mysql</groupId>
              <artifactId>mysql-connector-java</artifactId>
              <version>8.0.15</version>
          </dependency>

    修改MysqlHealthCheckProcessor导入的包为mysql8的驱动包

    修改数据库连接配置为mysql8的配置

db.url.0=jdbc:mysql://11.162.196.161:3306/diamond_devtest?serverTimezone=GMT%2B8&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.url.1=jdbc:mysql://11.163.152.91:3306/diamond_devtest?serverTimezone=GMT%2B8&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
  • 3.进入到源码根目录,使用mvn进行打包
    mvn -Prelease-nacos clean install -U -Dmaven.skip.test=true

  • 4.打包后, 找到nacos-1.1.4\distribution\target\nacos-server-1.1.4

    • 5.在数据库当中创建nacos_config,导入nacos中sql数据
  • 6.在 application.properties中修改端口并添加数据库信息

    # 指定数据源为
    Mysqlspring.datasource.platform=mysql
    # 数据库实例数量
    db.num=1
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    db.user=root
    db.password=1234
  • 7.把cluster.conf.example文件改为cluster.conf配置三个以上的IP:端口

  • 8.分别进入到bin目录下,修改startup.cmd 中 set mode ="cluster"

    集成Ribbon

  • 1.不需要添加依赖

  • 2.配置懒加载

    ribbon:
    eager-load:
      enabled: true
      clients: goods-client  #多个服务使用逗号隔开

    集成Feign

  • 引入依赖

    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
  • 在启动类上面加上注解:@EnableFeignClients

  • 创建一个service文件夹,在该文件下创建一个接口
    在接口加上添加@FeignClient()注解 参数就是你的微服务名字

集成sentinel

  • 1.下载sentinel控制台服务器[https://github.com/alibaba/Sentinel/releases]

    1. java -Dserver.port=8088 -Dcsp.sentinel.dashboard.server=localhost:8088 -jar sentinel-dashboard-1.7.0.jar
  • 添加依赖

    <dependency>
              <groupId>com.alibaba.cloud</groupId>
              <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>
  • 4.添加配置

    spring:
     cloud:
        sentinel:
           transport:
              dashboard: localhost:8080
  • 5.整合Feign

    feign:
    sentinel:
      enabled: true
  • 使用AHAS实现规则持久化[https://ahas.console.aliyun.com/]

    集成gateway

  • 添加依赖

    <dependencies>
          <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-starter-gateway</artifactId>
          </dependency>
          <dependency>
              <groupId>io.projectreactor.netty</groupId>
              <artifactId>reactor-netty</artifactId>
              <version>0.9.4.RELEASE</version>
          </dependency>
    
      </dependencies>
  • 配置文件

    logging:
    pattern:
      console: "%d{HH:mm:ss.SSS} %clr(%5p) %clr(-){faint} %clr(%-80.80logger{79}){cyan} %clr(:) %m%n"
    

server:
port: 9000

spring:
application:
name: api-gateway #此实例注册到eureka服务端的name
cloud:
gateway:
routes: #当请求满足要求时,转发到指定的服务当中
- id: goods_route #唯一标识,默认是uuid
uri: http://localhost:5000/ #请求要转发的地址
order: 1 #路由优先级 越小, 优先级越高
predicates: #谓词,断言(条件判断 转发请求要满足什么条件)
- Path=/consumer-user/** #当路径中有指定内容时, 才会转发到指定uri
filters: #过滤器,拦截请求做一些额外处理
- StripPrefix=1 #去掉添加的path内容

- GateWay整合Nacos
  <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
在gateway配置文件中添加

spring:
cloud:
nacos:
discovery:
server-addr: localhost:80 #nacos服务的地址 不要加http

- 添加@EnableDiscoveryClient 在启动类上

-4.配置gateWay从nacos中获取服务信息

cloud:
gateway:
discovery:
locator:
enabled: true #从nacos当中获取服务信息

##service_portal 集成Mabatis
- 已在common POM中添加依赖
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>

    <!--mysql 驱动-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <!--Mybatis启动器-->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.2</version>
    </dependency>
- 在启动器上添加注解
@MapperScan("com.mysb.core.dao.*")

- 添加相关配置

server:
port: 9006

spring:
application:
name: service-portal
cloud:
nacos:
discovery:
server-addr: ip:8849
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://ip:3306/fmstore?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: 1234

mybatis:
type-aliases-package: com.mysb.core.pojo
mapper-locations: classpath:com.mysb.core.dao./*Dao.xml

- 必须依赖于dao项目
![dao](https://uploadfiles.nowcoder.com/files/20200719/691416082_1595169313590_22718775-4a0529e1d760453f.jpg)