写在前面

一直在写springCloud项目,每次都是新建项目然后从零开始写配置,现在写一个尽量通用的项目,方便后续搭建框架的时候直接拿过去使用。

  1. 需要搭建的组件(模块)有:
    eureka(认证),zuul(网关),auth(认证),config(配置中心),user(用户),order(订单),pay(支付),feign...
  2. 这边主要想涉及到的框架技术有:springcloud,springboot2,oauth2,springSecurity,liquibase,lcn(5.0.2),mybatisplus,logback,redis,mysql,swagger2,poi
  3. 需要搭建、支持的技术
    github,jenkins(自动发布),maven私服,nginx,redis,mysql5.7,jdk1.8,swagger2,rabbitmq
一 需要搭建的组件

需要搭建的组件主要有7个模块(feign会集成到具体模块),这边我回详细记录eureka,zuul,auth,config,user.因为前四者是springCloud的配置。需要详细介绍,而具体的业务逻辑代码会在具体模块,这里我将以user模块为例子详细介绍.

  • eureka

我们知道,在为服务里面,所有模块需要被注册到一个注册中心,持续的向注册中心发送心跳以保证连接的存活。而springcloud的注册中心有consul和eureka,这里我选用的是eureka.
eureka的代码很简单,只需要在配置文件里面配置好注册地址与密码(可不设置,生产上强烈建议设置),并标识好自己不向自己注册,不被自己发现即可。

maven坐标:

 <dependencies>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-web</artifactId>    </dependency>    <!--我是用的springboot2.1.3如果是springboot1.5.x请不用这个-->    <dependency>        <groupId>org.springframework.cloud</groupId>        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>    </dependency>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-test</artifactId>        <scope>test</scope>    </dependency></dependencies>

主类,不用做任何配置

@SpringBootApplication@EnableEurekaServerpublic class CrawlerEurekaApplication {    public static void main(String[] args) {        SpringApplication.run(CrawlerEurekaApplication.class, args);    }}

yml配置文件:

spring:  application:    name: crawler-eurekaserver:  host: http://localhost  port: 9990eureka:  client:    fetch-registry: false    register-with-eureka: false    service-url:      defaultZone: ${server.host}:${server.port}/eureka/  instance:    prefer-ip-address: true
  • zuul

上面我们把注册中心搭建好了,访问localhost:9990就可以看到eureka的控制台。但是我们看不到一个服务注册上去了。现在我们搭建一个网关,因为在实际项目中,我们会有很多个微服务模块,而服务器只会向外暴露一个端口,其他的通过相对路径转发。这样也是为了安全和方便管理,有点nginx的感觉。
网关的配置也不复杂:pom坐标:

<dependencies>        <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>        </dependency>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>        </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>        </dependencies>    </dependencyManagement>

主类除了标识为eureka-client,还标识是网关

@SpringBootApplication@EnableEurekaClient@EnableZuulProxypublic class CrawlerZuulApplication {    public static void main(String[] args) {        SpringApplication.run(CrawlerZuulApplication.class, args);    }}

yml配置

server:  port: 9996spring:  application:    name: crawler-zuul  redis:    host: localhost    port: 6379    password: 123456zuul:  routes:    feign-auth:      path: /auth/**      serviceId: crawler-auth      strip-prefix: true      custom-sensitive-headers: true    feign-user:      path: /user/**      serviceId: crawler-goddess      sensitiveHeaders:eureka:  client:    serviceUrl:      defaultZone: http://localhost:9990/eureka/  instance:    prefer-ip-address: truelogging:  level:    ROOT: info    org.springframework.web: inforibbon:  ReadTimeout: 6000000  SocketTimeout: 6000000hystrix:  command:    default:      execution:        isolation:          thread:            timeoutInMilliseconds: 600000

启动项目,再次打开localhost:9990可以发现多了一个crawler-zuul

  • auth

待写

  • config

待写
(这两个模块等我把后续文章写完了,回过头来补起来。下一篇文章主要介绍user模块框架涉及以及涉及的主要技术点)