SpringCloud Alibaba【三】Gateway

Gateway配置与使用

    • 前言
    • 新建gateway子项目
      • pom.xml
      • 配置文件
      • 启动类
      • 访问接口方式
    • 测试
    • 拓展

前言

在工作中遇到一种情况,一个父项目中有两个子项目。实际使用时,需要外网可以访问,宝信软件只能将一个端口号发布在外网上,所以需要运用网关技术,通过一个端口号访问两个项目。
之前已经试用nacos搭建了注册中心

新建gateway子项目

pom.xml

导入依赖时注意SpringCloudAlibaba与gateway依赖的版本是否对应,否则启动时会报错。


<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>testmaven32springcloudartifactId>
        <groupId>com.hzxgroupId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>

    <artifactId>gateway-projectartifactId>

    <dependencies>
        
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
            <version>2.2.7.RELEASEversion>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-gatewayartifactId>
            <version>2.2.6.RELEASEversion>
        dependency>
    dependencies>
project>

配置文件

将gateway服务注册到nacos中

server:
  port: 8901
spring:
  cloud:
    nacos:
      discovery:
        server-addr: http://192.168.0.248:8848
        namespace: e6f0f8ad-e4c1-408b-afae-4a2495911ca7
    gateway:
      discovery:
        locator:
          enabled: true
  application:
    name: nacos-gateway

启动类

在启动类中需要加上注解:@EnableDiscoveryClient

@SpringBootApplication
@EnableDiscoveryClient
public class StartGatewayApplication {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(StartGatewayApplication.class, args);
    }
}

以上就是gateway相关的代码,启动成功后就可以使用了。
我在学习的时候没想到这么简单。

访问接口方式

http://ip:网关端口/nacos中注册的服务名称/controller层路径

具体内容见测试部分

测试

上一篇讲nacos的文章中,我创建了两个子项目,分别是:nacos-provider-project、nacos-consumer-project,连同gateway项目启动后,在nacos可以看到注册的服务。
SpringCloud Alibaba【三】Gateway_第1张图片
在nacos-provider-project项目添加接口

    @RequestMapping(value = "/send/provider/{msg}",method = RequestMethod.GET)
    public String sendMessageProvider(@PathVariable String msg){
        return "调用生产者端接口,向生产者发送消息:"+msg;
    }

在nacos-consumer-project项目添加接口

    @RequestMapping(value = "/send/consumer/{msg}",method = RequestMethod.GET)
    public String sendMessageConsumer(@PathVariable String msg){
        return "调用消费者端接口,向消费者发送消息:"+msg;
    }

通过接口文档测试上面的两个接口
首先是直接通过项目本身的端口号访问接口。其中8081和8091分别是两个项目的端口号。
SpringCloud Alibaba【三】Gateway_第2张图片
SpringCloud Alibaba【三】Gateway_第3张图片
然后通过网关端口分别访问两个接口。其中8901为gateway项目端口号,nacos-provider与nacos-consumer分别为两个项目在nacos注册中心的服务名称。
SpringCloud Alibaba【三】Gateway_第4张图片
SpringCloud Alibaba【三】Gateway_第5张图片

拓展

本文中使用的是gateway默认配置网关的方法,开发者还可以自定义配置路由,也可以不通过注册在nacos中的服务名就能访问接口,但这两种方法目前本人还不需要,所以文章中没有写出。

你可能感兴趣的:(spring,cloud,gateway,spring)