引言
不用任何第三方开源框架,集成最简单的spring cloud微服务应用。包括使用eureka
注册中心实现服务发布到注册中心中,gateway
实现网关路由转发。
1、我们先创建一个简单的maven项目
(1)、maven的简介,maven的两大核心功能
- 依赖管理(jar包管理)
-
构建项目(项目打包)
创建一个maven父模块项目
2、然后基于父模块项目创建module子模块项目 eureka
注册中心
pom文件拷贝父模块的eureka的服务端依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
eureka的pom.xml文件
<?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>yu-study</artifactId>
<groupId>com.zhushengyu.study</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>yu-study-eureka</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
</project>
将父模块之前创建的工程src文件删除,父模块的功能主要就是为了管理jar包。整理的工程如图
image.png
启动eureka子模块EurekaApplication的main方法(适当进行了日志答应的改造)
spring boot默认集成slf4j框架,它定义了一些日志接口,规范日志输出,真正的实现是logback或log4j。我们代码中写的都是slf4j的代码。
启动成功如图
启动成功图
可以点击这个地址,浏览器就可以进入注册中心了
注册中心
注册中心可以看到,目前没有其它任何服务
3、我们现在添加子模块gateway网关模块
引用的依赖,先添加最简单的 spring cloud自己gateway模块依赖,以及eureka注册中心客户端依赖
<?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>yu-study</artifactId>
<groupId>com.zhushengyu.study</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>yu-study-gateway</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
</project>
然后创建一个eureka的客户端的基于gateway的main方法启动类
image.png
其中application.yml文件需要指定eureka的注册中心地址
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
server:
port: 9000
spring:
application:
name: yu-study-gateway
先启动eureka注册中心,再启动gateway网关,重新访问下eureka注册中心
image.png
此时就发现服务注册上去了
4、我们现在再创建一个系统的业务模块,后面开发功能可以在这个业务模块中写公司对应的业务,这里只演示一个模块,其它业务模块类似。在父模块的基础上添加子模块。
这里我们只引入最基本的依赖,web程序访问的依赖,eureka客户端依赖
<?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>yu-study</artifactId>
<groupId>com.zhushengyu.study</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>yu-study-system</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
创建好的业务模块
然后我们写个最简单的controller
package com.zhushengyu.study.yustudy.system.controller;
import org.springframework.web.bind.annotation.GetMapping;
/**
* @Description TODO
* @Author jin_z
* @Date 2020/6/7 13:59
* @since:
* @copyright:
*/
public class TestController {
@GetMapping("/test")
public String test(){
return "success";
}
}
yml文件配置注册到注册中心去
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
server:
port: 9001
servlet:
context-path: /system
spring:
application:
name: yu-study-system
如图项目结构
image.png
重新启动eureka注册中心,然后启动业务模块system
此时注册中心就可以看到我们注册的服务了
image.png
我们访问下那个controller的请求
image.png此时我们是直接通过system项目端口访问的,这根本没有达到gateway路由转发的效果,我们要通过网关9000端口去访问其它业务请求。此时在gateway的yml文件下配置一下路由转发就行,多个业务模块就配置多个路由转发
image.png
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
server:
port: 9000
spring:
application:
name: yu-study-gateway
##路由转发
cloud:
gateway:
routes:
- id: system
predicates:
- args:
- /system/**
name: Path
uri: http://127.0.0.1:9001
重启gateway服务,此时浏览器就可以通过9000端口访问了
这样后期所有的其它业务模块都可以通过这个统一网关入口进行访问,后期其它业务模块可以进行屏蔽掉,只能通过网关访问。对应的服务限流什么请求都可以通过网关实现
路由转发:将外部请求转发到实际的业务模块进行处理
作者:金哲一(jinzheyi)【笔名】
本文代码地址:https://gitee.com/jinzheyi/springboot/tree/master/springcloud-study
本文链接:https://www.jianshu.com/p/3c39323172b8
网友评论