构建环境
idea:2021.1.2
gradle:4.10.3
项目介绍
gradle-spring-cloud 根项目,用于统一一些公共配置
gradle-eurakeserver 模块使用eurake提供服务注册功能
gradle-getway 提供网关服务
gradle-serviceA和gradle-serviceB用来提供接口服务,服务名相同,用于测试getway 负载均衡
构建开始
一、创建根项目(gradle-spring-cloud)
1.idea创建新的gradle项目
2.配置项目gradle
3.修改buid.gradle文件
buildscript {
ext {
springBootVersion = '2.0.7.RELEASE'
springCloudVersion = 'Finchley.SR2'
}
repositories {
maven { url "http://nexus.xxxxx.com/repository/maven-public" }
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
allprojects {
group 'org.example'
version '1.0-SNAPSHOT'
apply plugin: 'java'
// 指定JDK版本
sourceCompatibility = 1.8
targetCompatibility = 1.8
//指定编码格式
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
repositories {
maven { url "http://nexus.xxxxx.com/repository/maven-public" }
}
}
subprojects {
//dependency-management 插件
apply plugin: 'io.spring.dependency-management'
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
mavenBom "org.springframework.boot:spring-boot-dependencies:${springBootVersion}"
}
}
jar {
manifest.attributes provider: 'gradle'
}
}
说明: maven { url "http://nexus.xxxxx.com/repository/maven-public" } 配置的是 maven私服地址,大家可以配置成阿里云的镜像地址。
4.build下项目,无报错,根项目构建成功。
二、构建gradle-eurakeserver服务注册中心
1.在根项目下,new module,取名为gradle-eurakeserver
2.修改build.gradle配置文件,加入相关依赖
apply plugin: 'org.springframework.boot'
dependencies { //dependencies闭包
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
3.build项目
4.创建spring boot启动类
package org.example.eurake.server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
5.配置application.properties
server.port=7101
spring.application.name=gradle-eureka
#不向注册中心注册自己
eureka.client.register-with-eureka=false
#健康检测
eureka.client.fetch-registry=false
#开发环境关闭自我保护机制,保证不可用的服务及时剔除
eureka.server.enable-self-preservation=false
#间隔2秒钟剔除一次
eureka.server.eviction-interval-timer-in-ms=2000
#服务注册地址
eureka.client.service-url.defaultZone=http://127.0.0.1:7101/eureka
6.启动项目,访问 http://127.0.0.1:7101/ 注册中心搭建完毕
三、搭建gradle-getway网关服务
1.在根项目下,new module,取名为gradle-getway
2.修改build.gradle配置文件,加入相关依赖
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
implementation 'org.springframework.cloud:spring-boot-starter-data-redis-reactive'
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-hystrix'
implementation 'com.alibaba:fastjson:1.2.47'
}
3.build项目
4.创建spring boot启动类
@SpringBootApplication
@EnableDiscoveryClient
public class GetWayApplication {
public static void main(String[] args) {
SpringApplication.run(GetWayApplication.class,args);
}
}
5.配置application.yml
# 端口
server:
port: 8000
spring:
application:
# 应用名称
name: gradle-getway
cloud:
gateway:
discovery:
locator:
# 是否和服务注册与发现组件结合,设置为 true 后可以直接使用应用名称调用服务
enabled: true
# 路由(routes:路由,它由唯一标识(ID)、目标服务地址(uri)、一组断言(predicates)和一组过滤器组成(filters)。filters 不是必需参数。)
routes:
# 路由标识(id:标识,具有唯一性) 转发指定服务并传入参数
- id: route_addRequestParameter
# 目标服务地址(uri:地址,请求转发后的地址)
uri: lb://gradle-service
# 路由条件(predicates:断言,匹配 HTTP 请求内容)
predicates:
## 匹配 GET 请求
- Method=GET
# 过滤器(filters:过滤器,过滤规则)
filters:
## 添加指定参数
- AddRequestParameter=age, three
eureka:
client:
serviceUrl:
# 注册中心地址
defaultZone: http://127.0.0.1:7101/eureka
logging:
level:
# log 级别
org.springframework.cloud.gateway: debug
6.启动getway,成功注册到eureka
四、创建gradle-service 服务,AB服务只是端口不同,所以只以A为例
1.在根项目下,new module,取名为gradle-serviceA
2.修改build.gradle配置文件,加入相关依赖
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.projectlombok:lombok:1.18.18'
implementation 'redis.clients:jedis:2.9.0'
implementation 'org.apache.commons:commons-pool2'
}
3.build项目
4.创建spring boot启动类
@SpringBootApplication
@EnableDiscoveryClient
public class ServiceApplicationA {
public static void main(String[] args) {
SpringApplication.run(ServiceApplicationA.class,args);
}
}
5.配置application.yml
# 端口
server:
port: 9000
# 应用名称
spring:
application:
name: gradle-service
eureka:
client:
serviceUrl:
# 注册中心地址
defaultZone: http://127.0.0.1:7101/eureka
fetch-registry: true
register-with-eureka: true
6.创建controller接口类
@RestController
public class ASayHelloController {
/*
* @ClassName ASayHelloController
* @Desc TODO 读取配置文件中的端口
* @Date 2019/5/20 23:24
* @Version 1.0
*/
@Value("${server.port}")
private String port;
/*
* @ClassName ASayHelloController
* @Desc TODO Say Hello
* @Date 2019/5/20 23:24
* @Version 1.0
*/
@RequestMapping("/hello")
public String hello(){
return "Hello!I'm a. port:" + port;
}
}
7.相同的创建B服务,端口改为9001.
8.启动 AB服务,注册到注册中心,搭建完成
五、测试getway网关功能
调用网关地址如下 http://localhost:8000/hello
第一次返回 Hello!I'm a. port:9000
第二次返回 Hello!I'm a. port:9001
基于gradle 构建简单的cloud 项目,完毕。