前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Spring Cloud gateway】 集成测试

【Spring Cloud gateway】 集成测试

作者头像
用户5640963
发布2021-07-13 11:50:53
5660
发布2021-07-13 11:50:53
举报
文章被收录于专栏:卯金刀GG

1、服务器端搭建

1.1 子模块 customer-service-api-demo,提高发布接口

代码语言:javascript
复制
package com.hake.customerserviceapidemo;

import org.springframework.web.bind.annotation.GetMapping;

/**
 * @Author: Liu Yue
 * @Descripition:
 * @Date; Create in 2021/7/6 9:40
 **/
public interface ICustomerService {

    /**
     * 提供我们发布的接口
     * @param userId
     * @return
     */
    @GetMapping("/getUser")
    String getUser(Integer userId);
}

1.2 子模块 customer-service-impl-demo

父项目的pom.xml

代码语言:javascript
复制
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.7.RELEASE</version>
    </parent>
    <groupId>com.hake</groupId>
    <artifactId>cloudalibaba-openfegin-customer-service-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>cloudalibaba-openfegin-customer-service-demo</name>
    <description>Demo project for Spring Boot</description>

    <modules>
        <module>customer-service-api-demo</module>
        <module>customer-service-impl-demo</module>
    </modules>
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

customer-service-impl-demo 的 pom.xml

代码语言:javascript
复制
<modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.hake</groupId>
        <artifactId>cloudalibaba-openfegin-customer-service-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <groupId>com.hake</groupId>
    <artifactId>customer-service-impl-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>customer-service-impl-demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.hake</groupId>
            <artifactId>customer-service-api-demo</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

customer-service-impl-demo 的 properties

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

实现类 CustomerServiceImpl.java

代码语言:javascript
复制
/**
 * @Author: Liu Yue
 * @Descripition:
 * @Date; Create in 2021/7/6 9:46
 **/
@RestController
@Slf4j
public class CustomerServiceImpl implements ICustomerService {

    @Value("${server.port}")
    private String serverPort;

    @Override
    public String getUser(Integer userId) {
        return "我的会员服务!端口号:" + serverPort;
    }
}

访问地址:http://localhost:9015/getUser

2、客户端搭建

创建父项目 cloudalibaba-openfegin-demo

pom.xml

代码语言:javascript
复制
<modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.7.RELEASE</version>
    </parent>
    <groupId>com.hake</groupId>
    <artifactId>cloudalibaba-openfegin-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>cloudalibaba-openfegin-demo</name>
    <description>Demo project for Spring Boot</description>

    <modules>
        <module>cloudalibaba-gateway-demo</module>
        <module>order-service-demo</module>
    </modules>
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

2.1 创建子模块 order-service-demo

properties配置

代码语言:javascript
复制
# 应用名称
spring.application.name=order-service-demo
# 应用服务 WEB 访问端口
server.port=9016
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

pom.xml配置关键部分

代码语言:javascript
复制
 <parent>
        <groupId>com.hake</groupId>
        <artifactId>cloudalibaba-openfegin-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

OrderServiceFiegn调用

代码语言:javascript
复制
/**
 * @Author: Liu Yue
 * @Descripition:
 * @Date; Create in 2021/7/6 10:16
 **/

@FeignClient("customer-service-impl-demo")
//去nacos中找到customer-service-impl-demo服务,然后找此服务的提供的接口,不需要使用rest风格的调用方式
public interface OrderServiceFiegn {


    /**
     * 提供我们发布的接口
     * @param userId
     * @return
     */
    @GetMapping("/getUser")
    String getUser(@RequestParam("userId") Integer userId);
}

RestController

代码语言:javascript
复制
/**
 * @Author: Liu Yue
 * @Descripition:
 * @Date; Create in 2021/7/6 10:18
 **/
@RestController
public class OrderServiceImpl {

    @Autowired
    private OrderServiceFiegn orderServiceFiegn;

    /**
     * 基于我们的fegin客户端形式实现了rpc远程调用
     *
     * @return
     */
    @GetMapping("/orderFeignToCustomer")
    public String orderFeignToMember() {
        String result = orderServiceFiegn.getUser(1);
        return "我是订单调用会员服务的接口,返回结果" + result;
    }

}

访问地址:http://localhost:9016/orderFeignToCustomer

3、gateway配置

创建项目 cloudalibaba-gateway-demo

pom.xml

注意:不要引用web的支持,版本搭配采坑

代码语言:javascript
复制
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-gateway -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
            <version>2.2.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.8.RELEASE</version>
        </dependency>

yml配置

代码语言:javascript
复制
server:
  port: 9018
spring:
  application:
    name: cloudalibaba-gateway-demo

  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    gateway:
      routes:
        - id: my-customer
          uri: lb://customer-service-impl-demo  #转发的服务,lb代表负载均衡,使用以后必须加filters。
          filters:
            - StripPrefix=1
          predicates:
            - Path=/customer-service/**  #拦截的路径
        - id: my-order
          uri: lb://order-service-demo
          filters:
            - StripPrefix=1
          predicates:
            - Path=/order-sevice/**
        - id: test
          uri: http://www.taobao.com/  #转发到taobao
          filters:
            - StripPrefix=1
          predicates:
            - Path=/test/**   #拦截到路径有test
      discovery:
        locator:
          enabled: true

访问地址:http://localhost:9018/order-sevice/orderFeignToCustomer

访问地址:http://localhost:9018/customer-service/getUser

访问地址:http://localhost:9018/test

跳转到淘宝

getway,是Spingcloud2的路由器,详细介绍请百度或者到官网查询,此处只提供实现,不做具体的介绍。

每天进步一点点!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档