從0手寫springCloud項目(組件搭建)

寫在前面

一直在寫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
@EnableEurekaServer
public class CrawlerEurekaApplication {

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

yml配置文件:

spring:
  application:
    name: crawler-eureka

server:
  host: http://localhost
  port: 9990
eureka:
  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
@EnableZuulProxy
public class CrawlerZuulApplication {
    public static void main(String[] args) {
        SpringApplication.run(CrawlerZuulApplication.class, args);
    }
}

yml配置

server:
  port: 9996
spring:
  application:
    name: crawler-zuul
  redis:
    host: localhost
    port: 6379
    password: 123456

zuul:
  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: true

logging:
  level:
    ROOT: info
    org.springframework.web: info

ribbon:
  ReadTimeout: 6000000
  SocketTimeout: 6000000
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 600000

啟動項目,再次打開localhost:9990可以發現多了一個crawler-zuul

  • auth

待寫

  • config

待寫

(這兩個模塊等我把后續文章寫完了,回過頭來補起來。下一篇文章主要介紹user模塊框架涉及以及涉及的主要技術點)

原文 

https://segmentfault.com/a/1190000019510228

本站部分文章源于互聯網,本著傳播知識、有益學習和研究的目的進行的轉載,為網友免費提供。如有著作權人或出版方提出異議,本站將立即刪除。如果您對文章轉載有任何疑問請告之我們,以便我們及時糾正。

PS:推薦一個微信公眾號: askHarries 或者qq群:474807195,里面會分享一些資深架構師錄制的視頻錄像:有Spring,MyBatis,Netty源碼分析,高并發、高性能、分布式、微服務架構的原理,JVM性能優化這些成為架構師必備的知識體系。還能領取免費的學習資源,目前受益良多

轉載請注明原文出處:Harries Blog? » 從0手寫springCloud項目(組件搭建)

贊 (0)
分享到:更多 ()

評論 0

  • 昵稱 (必填)
  • 郵箱 (必填)
  • 網址
2013平特肖公式