系统定制开发【云原生】一篇打通微服务架构,nacos + gateway + Redis + MySQL + docker

目录

一、前期准备

系统定制开发本项目暂定项目名GooReeyProject,SpringBoot + Vue构建,系统定制开发具体项目内容未定。

基本架构、gateway、Linux、Redis、rabbitMQ、MySQL、docker、Vue。

1、安装MySQL5.7

2、安装nacos

我安装的是window版的nacos和MySQL,安装nacos时需要注意,要讲配置文件中的集群版改为单机版,才能启动!

3、安装Redis

二、创建父工程

我觉得主要是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.guor</groupId>    <artifactId>GooReeyProject</artifactId>    <version>1.0-SNAPSHOT</version>    <modules>        <module>01common</module>        <module>02gateway</module>    </modules>     <properties>        <system.version>1.0.0</system.version>        <system.ip>127.0.0.1</system.ip>        <system.sport>808</system.sport>        <system.mode>http</system.mode>        <java.version>1.8</java.version>        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>        <skipTests>true</skipTests>        <nacos.version>0.2.2.RELEASE</nacos.version>    </properties>     <packaging>pom</packaging>    <name>GooReeyProject</name>    <description>This is parent project</description>     <!-- 本项目的父模块使用spring-boot框架 -->    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.1.4.RELEASE</version>    </parent>     <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>         <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>            <scope>provided</scope>        </dependency>         <dependency>            <groupId>commons-lang</groupId>            <artifactId>commons-lang</artifactId>            <version>2.6</version>        </dependency>         <dependency>            <groupId>com.github.pagehelper</groupId>            <artifactId>pagehelper-spring-boot-starter</artifactId>            <version>1.2.5</version>        </dependency>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>        </dependency>        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>druid</artifactId>            <version>1.1.23</version>        </dependency>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>            <version>0.2.1.RELEASE</version>        </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>org.springframework.cloud</groupId>                <artifactId>spring-cloud-alibaba-dependencies</artifactId>                <version>${nacos.version}</version>                <type>pom</type>                <scope>import</scope>            </dependency>        </dependencies>    </dependencyManagement>     <build>        <resources>            <resource>                <directory>src/main/resources</directory>                <includes>                    <include>**/*.*</include>                </includes>            </resource>            <resource>                <directory>src/main/resources</directory>                <includes>                    <include>**/*.yml</include>                </includes>                <filtering>true</filtering>            </resource>            <resource>                <directory>src/main/java</directory>                <includes>                    <include>**/*.xml</include>                </includes>            </resource>        </resources>    </build></project>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119

三、创建gateway子工程

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 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <parent>        <artifactId>GooReeyProject</artifactId>        <groupId>com.guor</groupId>        <version>1.0-SNAPSHOT</version>    </parent>    <modelVersion>4.0.0</modelVersion>     <artifactId>02gateway</artifactId>     <dependencies>        <dependency>            <groupId>org.mybatis.spring.boot</groupId>            <artifactId>mybatis-spring-boot-starter</artifactId>            <version>2.0.1</version>        </dependency>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-gateway</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>        </dependency>    </dependencies>     <dependencyManagement>        <dependencies>            <dependency>                <groupId>com.alibaba.cloud</groupId>                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>                <exclusions>                    <exclusion>                        <groupId>org.springframework.cloud</groupId>                        <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>                    </exclusion>                </exclusions>            </dependency>        </dependencies>    </dependencyManagement>    <build>        <finalName>gateway-${system.version}</finalName>    </build></project>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

2、配置文件

spring:  application:    name: gateway  cloud:    nacos:      discovery:        server-addr: 127.0.0.1:8848      config:        server-addr: 127.0.0.1:8848        file-extension: yml        ext-config:          - data-id: datasource-share-config.yml            group: SHARE_GROUP            refresh: true          - data-id: log-share-config.yml            group: SHARE_GROUP            refresh: true
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

(1)gateway.yml

server:  port: 8080      spring:  application:    name: gateway    version: 1.0.0  cloud:    gateway:                            discovery:        locator:          enabled: true          lowerCaseServiceId: true          filters:             - StripPrefix=1           routes:        - id: management          uri: lb:management   # 服务端 service_id          predicates:            - Path=/management/**          filters:             - name: Hystrix               args:                 name: fallbackcmd                fallbackUri: forward:/defaultFallback        - id: demo          uri: lb://demo          predicates:            - Path=/demo/**            hystrix:  command:    default:      execution:        isolation:          strategy: SEMAPHORE          thread:            timeoutInMilliseconds: 1500               
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

(2)datasource-share-config.yml

spring:  datasource:    url: jdbc:mysql://localhost:3306/blue?serverTimezone=UTC    driverClassName: com.mysql.cj.jdbc.Driver    username: root    password: rootmybatis:  typeAliasesPackage: com.guor.*.bean.**  mapperLocations: classpath*:**/com/guor/**/dao/mapping/*Mapper.xml  configuration:    map-underscore-to-camel-case: true
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

(3)log-share-config.yml

logging:   path: logs  level:    root: info    com.alibaba.nacos.client.naming: warn   file:     max-size: 20MB    max-history: 30  pattern:     file: "%d{${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:%5p} ${PID:- } --- [%15.15t] %-40.40logger{39} [%5.5line] : %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}"    console: "%d{${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}} %clr(${LOG_LEVEL_PATTERN:%5p}) %clr(${PID:- }){magenta} --- %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr([%5.5line]){cyan} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

3、启动类

package com.guor; import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import org.springframework.cloud.context.config.annotation.RefreshScope;import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)@EnableDiscoveryClient@EnableScheduling@RefreshScopepublic class GatewayApplication {    public static void main(String[] args) {        SpringApplication.run(GatewayApplication.class, args);        System.out.println("hello world");    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

四、创建management管理模块

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 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <parent>        <artifactId>GooReeyProject</artifactId>        <groupId>com.guor</groupId>        <version>1.0-SNAPSHOT</version>    </parent>    <modelVersion>4.0.0</modelVersion>     <artifactId>03management</artifactId>     <properties>        <maven.compiler.source>8</maven.compiler.source>        <maven.compiler.target>8</maven.compiler.target>    </properties>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>org.mybatis.spring.boot</groupId>            <artifactId>mybatis-spring-boot-starter</artifactId>            <version>2.0.1</version>        </dependency>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>        </dependency>        <!--MySQL依赖 -->        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-jdbc</artifactId>        </dependency>    </dependencies>    <build>        <finalName>management-${system.version}</finalName>    </build></project>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

2、配置文件

spring:  application:    name: management  cloud:    nacos:      discovery:        server-addr: 127.0.0.1:8848      config:        server-addr: 127.0.0.1:8848        file-extension: yml        ext-config:          - data-id: datasource-share-config.yml            group: SHARE_GROUP            refresh: true          - data-id: log-share-config.yml            group: SHARE_GROUP            refresh: true
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
server:  port: 8081 spring:  application:    name: management    version: 1.0.0  mvc:   static-path-pattern: /management/**  resources:    static-locations:     - file:../../web/management    - file:../../web/common
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

3、启动类

package com.guor; import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import org.springframework.cloud.context.config.annotation.RefreshScope; @EnableDiscoveryClient@SpringBootApplication(scanBasePackages = "com.guor")@MapperScan("com.guor.management.dao")@RefreshScopepublic class ManagementApplication {     public static void main(String[] args) {        SpringApplication.run(ManagementApplication.class, args);    } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

五、整合mybatis

1、user表设计

数据库选择的是最常用的MySQL

CREATE TABLE `user` (  `user_id` int(10) unsigned NOT NULL AUTO_INCREMENT,  `username` varchar(100) NOT NULL,  `password` varchar(40) NOT NULL,  `age` int(11) DEFAULT NULL,  `sex` int(11) DEFAULT NULL,  `telephone` varchar(100) DEFAULT NULL,  `address` varchar(100) DEFAULT NULL,  `create_date` date DEFAULT NULL,  `update_date` date DEFAULT NULL,  `deleted` int(11) DEFAULT NULL,  `version` int(11) DEFAULT NULL,  PRIMARY KEY (`user_id`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

2、UserController

package com.guor.management.controller; import com.guor.management.bean.User;import com.guor.management.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PutMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestControllerpublic class UserController {    @Autowired    private UserService userService;     @GetMapping("/getUserList")    public List<User> getUserList(){        return userService.getUserList();    }     @PutMapping("/insertUser")    public void insertUser(@RequestBody User user){        userService.insertUser(user);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

3、UserService

package com.guor.management.service; import com.guor.management.bean.User; import java.util.List; public interface UserService {    List<User> getUserList();    void insertUser(User user);}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
package com.guor.management.service.impl; import com.guor.management.bean.User;import com.guor.management.dao.UserMapper;import com.guor.management.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service; import java.util.List; @Servicepublic class UserServiceImpl implements UserService {    @Autowired    private UserMapper userMapper;     @Override    public List<User> getUserList() {        return userMapper.getUserList();    }     @Override    public void insertUser(User user) {        userMapper.insertUser(user);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

4、UserMapper

package com.guor.management.dao; import com.guor.management.bean.User; import java.util.List; public interface UserMapper {    public List<User> getUserList();     public void insertUser(User user);}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" ><mapper namespace="com.guor.management.dao.UserMapper">    <select id="getUserList" resultType="java.util.LinkedHashMap">        select * from user;    </select>     <insert id="insertUser" parameterType="com.guor.management.bean.User">        INSERT INTO gooreey.`user` (username, password) VALUES (#{username}, #{password});    </insert></mapper>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

5、User

package com.guor.management.bean; import com.guor.base.bean.BaseBean;import lombok.Data; @Datapublic class User extends BaseBean {   private Integer userId;   private String username;   private String password;   private Integer age;   private Integer sex;   private String telephone;   private String address;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
package com.guor.base.bean; import lombok.Data; import java.util.Date; @Datapublic class BaseBean {    private Date createDate;    private Date updateDate;    private Integer deleted;    private Integer version;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

6、postman接口测试

更多精彩内容:

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发