扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
Gateway概念
湖南网站制作公司哪家好,找创新互联公司!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设等网站项目制作,到程序开发,运营维护。创新互联公司2013年开创至今到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联公司。特征
核心流程
Eureka服务注册
生产端
Gateway网关
验证网关
路由(Route)是GateWay中最基本的组件之一,表示一个具体的路由信息载体,主要由下面几个部分组成:
特征
id:路由唯一标识,区别于其他的route
url: 路由指向的目的地URL,客户端请求最终被转发到的微服务
order: 用于多个Route之间的排序,数值越小越靠前,匹配优先级越高
predicate:断言的作用是进行条件判断,只有断言为true,才执行路由
filter: 过滤器用于修改请求和响应信息
(1)基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0
(2)集成 Hystrix 断路器
(3)集成 Spring Cloud DiscoveryClient
(4)Predicates 和 Filters 作用于特定路由,易于编写的 Predicates 和 Filters
(5)具备一些网关的高级功能:动态路由、限流、路径重写
这里尤其需要注意三个关键术语:
①Filter(过滤器):
和Zuul的过滤器在概念上类似,可以使用它拦截和修改请求,并且对上游的响应,进行二次处理。过滤器为org.springframework.cloud.gateway.filter.GatewayFilter类的实例。
②Route(路由):
网关配置的基本组成模块,和Zuul的路由配置模块类似。一个Route模块由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配,目标URI会被访问。
③Predicate(断言):
这是一个 Java 8 的 Predicate,可以使用它来匹配来自 HTTP 请求的任何内容,例如 headers 或参数。断言的输入类型是一个 ServerWebExchange。
核心流程Eureka服务注册在做Gateway网关服务前,我们需要先注册一个服务中心,否则无法使用网关。这里我使用的是Eureka这个服务注册中心。
第一步:首先构建Eureka模块,命名随意。可以通过Maven也可以使用Spring来构建项目。
第二步:修改pom.xml,引入依赖。
org.springframework.cloud spring-cloud-starter-netflix-eureka-serverorg.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-actuatororg.projectlombok lombokorg.springframework.boot spring-boot-starter-testjunit junittest
第三步:在application.yml中进行配置
server:
port: 7001
eureka:
instance:
hostname: eureka7001.com #Eureka服务器的实例名称
client:
register-with-eureka: false #不向注册中心注册自己
fetch-registry: false #不需要去检索服务
service-url:
#设置与EurekaServer交互的地址查询服务和注册服务都需要依赖这个地址
defaultZone: http://localhost:7001/eureka/
第四步:启动类上添加注解
@SpringBootApplication
@EnableEurekaClient //此注解是用于在Eureka注册客户端使用
public class Gateway1221 {
public static void main(String[] args) {
SpringApplication.run(Gateway1221.class,args);
}
}
第五步:直接启动这个类,然后在网站输入:localhost:7001即可进入以下网页
生产端既然已经完成了注册服务中心的构建,那么我们还需要构建一个生产端的来注册进Eureka中。
第一步:创建模块 命名随意。
第二步:在pom.xml中引入依赖
org.springframework.cloud spring-cloud-starter-netflix-eureka-clientorg.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-actuatororg.mybatis.spring.boot mybatis-spring-boot-startercom.alibaba druid-spring-boot-starter1.1.23 mysql mysql-connector-javaorg.springframework.boot spring-boot-starter-jdbcorg.projectlombok lombokorg.springframework.boot spring-boot-starter-testtest
第三步:在application.yml中进行配置
server:
port: 8001
spring:
application:
name: cloud-payment-service
eureka:
client:
register-with-eureka: true #表明将自己注册进EurekaServer
fetch-registry: true
service-url:
defaultZone: http://eureka7001.com:7001/eureka/
instance:
instance-id: payment8001 #注册的服务名称
第四步:在启动类上添加注解
@SpringBootApplication
@EnableEurekaClient //此注解是用于在Eureka注册客户端使用
public class Payment8001Application {
public static void main(String[] args) {
SpringApplication.run(Payment8001Application.class,args);
}
}
第五步:写controller层的逻辑(由于简化开发 在此不写业务层逻辑)
@RestController
public class PaymentController {
@GetMapping("/payment/get/{id}")
public String getPaymentById(@PathVariable("id") Long id){
return "查询成功,id为:" + id;
}
}
第五步:启动此类 在Eureka注册中心上可以发现cloud-payment-service被注册进去了
Gateway网关第一步:构建模块
第二步:在pom.xml中引入依赖
org.springframework.cloud spring-cloud-starter-gatewayorg.springframework.cloud spring-cloud-starter-netflix-eureka-clientorg.projectlombok lomboktrue org.springframework.boot spring-boot-starter-test
第三步:修改application.yml
server:
port: 1221
spring:
application:
name: cloud-gateway
cloud:
#配置路由
gateway:
#这里可以配置多个路由
routes:
- id: payment_routh #路由的id
uri: http://localhost:8001 #匹配后提供服务的路由地址
predicates:
- Path=/payment/get/** #断言 路径相匹配的进行路由
eureka:
instance:
hostname: cloud-gateway
client:
register-with-eureka: true #表明将自己注册进EurekaServer
fetch-registry: true
service-url:
defaultZone: http://eureka7001.com:7001/eureka/
第四步:启动类上添加注解
@SpringBootApplication
@EnableEurekaClient //此注解是用于在Eureka注册客户端使用
public class Gateway1221 {
public static void main(String[] args) {
SpringApplication.run(Gateway1221.class,args);
}
}
第五步:启动Gateway类,Eureka中也可以发现又注册进了一个客户端
验证网关直接调用生产端的方法,网址:localhost:8001/payment/get/200
通过网关去调用生产端,网址:localhost:1221/payment/get/200
可以发现网关的功能已经实现了,可以隐藏注册进服务的生产端端口号
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流