SpringCloud(Finchley.RELEASE版本)+SpringBoot(2.0.3.RELEASE)微服务框架搭建

@SpringCloud(Finchley.RELEASE版本)+SpringBoot(2.0.3.RELEASE)微服务框架搭建

eureka注册中心

由于项目需要,以及应对高并发建议搭建高可用注册中心,pow依赖以及配置文件如下:
在这里插入图片描述

<dependencies>
        <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-actuator</artifactId>
        </dependency>
        <!-- eureka安全认证-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</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>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <finalName>${project.name}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
        <testResources>
            <testResource>
                <directory>src/test/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </testResource>
            <testResource>
                <directory>src/test/resources</directory>
            </testResource>
        </testResources>
    </build>

application.properties文件内容

#安全认证
spring.security.user.name=admin
spring.security.user.password=123

以下是application-peer1.properties文件内容


server.port=8000
spring.application.name=zy_eureka

eureka.instance.hostname=peer1
#维护实例,不需要去检索服务
#eureka.client.register-with-eureka=false
#不注册自己
eureka.client.fetch-registry=true
#eureka地址
eureka.client.serviceUrl.defaultZone=http://admin:123@peer2:8100/eureka/
#开启ip地址形式来定义注册中心的地址
#eureka.instance.prefer-ip-address=true
#开发阶段关闭服务的自我保护
#eureka.server.enable-self-preservation=false

以下是application-peer2.properties文件内容

server.port=8100
spring.application.name=zy_eureka

eureka.instance.hostname=peer2
#维护实例,不需要去检索服务
#eureka.client.register-with-eureka=false
#不注册自己
eureka.client.fetch-registry=true
#eureka地址
eureka.client.serviceUrl.defaultZone=http://admin:123@peer1:8000/eureka/
#开启ip地址形式来定义注册中心的地址
#eureka.instance.prefer-ip-address=true
#开发阶段关闭服务的自我保护
#eureka.server.enable-self-preservation=false

#注册中心的启动,通过命令行模式,首先项目打jar包,后打开cmd输入如下命令:
java -jar jar包名.jar --spring.profiles.active=peer1
java -jar jar包名.jar --spring.profiles.active=peer2
#注册中心启动后会互相注册

网关zuul

#网关是微服务中不可或缺的一部分,外部请求统一通过网关请求,通过验证,拦截处理后,通过zuul的router过滤器路由到不同的服务模块中去,来保护各服务的实例地址
网关的pom依赖如下:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <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-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</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>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <finalName>${project.name}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
        <testResources>
            <testResource>
                <directory>src/test/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </testResource>
            <testResource>
                <directory>src/test/resources</directory>
            </testResource>
        </testResources>
    </build>

以下是配置文件,由于网关的路由配置同步到springcloud的配置中心在F版本中还有问题(博主还未解决),所以没有添加bus(消息总线)和config(配置中心的依赖),如下是网关配置文件:

spring.application.name=zyzuul
#spring.cloud.config.label=master
#spring.cloud.config.profile=dev
#spring.cloud.config.uri=http://localhost:8881/
#为配置中心添加安全保护
#spring.cloud.config.username=user
#spring.cloud.config.password=123
#spring.cloud.bus.enabled=true
#spring.cloud.bus.trace.enabled=true
spring.rabbitmq.port=5672
spring.rabbitmq.host=localhost
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
server.port=8002
#配置路由地址
zuul.routes.zy_member.path=/zymember.**
#通过服务名,配置路由映射地址
zuul.routes.zy_member.url=zymember
#注册中心地址
eureka.client.serviceUrl.defaultZone=http://admin:123@peer1:8000/eureka/,http://admin:123@peer2:8100/eureka/
#保护cookie中的信息
zuul.routes.<router>.customSensitiveHeaders=true
#解决重定向问题,保护实例地址
zuul.addHostHeader=true
#该参数用来设置API网关中路由转发请求的HysstrixCommand执行超时时间(ms)
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds:6000
#路由转发请求,创建请求连接的超时时间(ms),该参数小于timeoutInMilliseconds,在连接超时时会
#自动重试路由请求
ribbon.ConnectTimeout=5000
#路由转发请求的超时时间,与请求连接类似
ribbon.ReadTimeout=2000
#开发阶段关闭重试机制,默认出现bug,全局关闭
zuul.retryable=false
#服务提供者维持心跳
eureka.instance.lease-renewal-interval-in-seconds=30
#90秒无心跳服务失效,进行eureka的"剔除任务"
eureka.instance.lease-expiration-duration-in-seconds=90

#网关的核心为过滤器:pre,routing,post,error

public class MyZuulFilter extends ZuulFilter {
    //过滤器类型
    public String filterType() {
        return "pre";
    }
    //过滤器执行顺序
    public int filterOrder() {
        return 0;
    }
    //过滤器是否执行
    public boolean shouldFilter() {
        return true;
    }
    //具体逻辑
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        /*String accessToken = request.getParameter("accessToken");
        if(accessToken == null) {
            ctx.setSendZuulResponse(false);
            ctx.setResponseStatusCode(401);
            return null;
        }*/
        return null;
    }
}
在具体逻辑中,我们可以做accessToken校验,以及其他验证

SpringCloud配置中心

#配置中心是整个微服务的统一配置获取模块,所有服务统一地到配置中心取配置。同事集成bus消息总线,来动态地刷新配置(手动或者通过Git动态刷新),无需重启项目。
pom依赖如下:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
        <!--<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</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>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <finalName>${project.name}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
        <testResources>
            <testResource>
                <directory>src/test/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </testResource>
            <testResource>
                <directory>src/test/resources</directory>
            </testResource>
        </testResources>
    </build>

application.properties配置内容以及注释如下:

#服务端口
server.port=8881
#服务名称
spring.application.name=zy_config
#服务注册中心
eureka.client.service-url.defaultZone=http://admin:123@peer1:8000/eureka/,http://admin:123@peer1:8100/eureka/
#服务的git仓库地址
spring.cloud.config.server.git.uri=您的git地址uri
#配置文件所在的目录
spring.cloud.config.server.git.search-paths=/**
#配置文件所在的分支
spring.cloud.config.label=master
#git仓库的用户名
spring.cloud.config.username=用户名(github/gitlable)
#git仓库的密码
spring.cloud.config.password=密码
#为配置中心添加安全保护
#security.user.name=user
#security.user.password=123
#关闭安全保护,动态刷新配置中心,开启端口
management.endpoints.web.exposure.include=bus-refresh
#使用消息总线refesh配置中心信息
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.cloud.bus.trace.enabled=true

#peer1,peer2是通过电脑中的hosts文件进行配置:
#127.0.0.1 peer1
#127.0.0.1 peer2

#启动类上注解如下:
在这里插入图片描述
##博主也是在学习中,在这里简单介绍下springcloud的使用,以及配置文件。希望对您有所帮助!!!!!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值