Skip to main content
Version: 当前版本

使用 Shenyu-SDK-Feign

Shenyu sdk-feign#

集成openFeign来实现声明式SDK调用网关API. 与shenyu-sdk一样, shenyu-sdk-feign是另外一个选项; 详情请看 :

添加Maven依赖#

在客户端应用的pom.xml文件中引入如下依赖(与FeignClient兼容).

<dependencies>    <dependency>        <groupId>org.springframework.cloud</groupId>        <artifactId>spring-cloud-starter-openfeign</artifactId>        <version>${spring-cloud.version}</version>    </dependency>        <dependency>        <groupId>org.apache.shenyu</groupId>        <artifactId>shenyu-spring-boot-starter-sdk-feign</artifactId>        <version>2.6.1-SNAPSHOT</version>    </dependency></dependencies>

配置文件#

在客户端应用的yml配置文件中添加以下配置.

shenyu:  sdk:    enabled: true    register-type: consul    server-lists: localhost    props:      algorithm: roundRobin      scheme: http
# 如果不使用`openFeign`和`springCloud-loadBalance`,则必须启用外部客户端选项。.feign:  client:    httpclient:      enabled: true      # registerType : 服务注册类型,填写 etcd# serverList: 为etcd注册类型时,填写etcd地址,多个地址用英文逗号分隔
# algorithm: 负载均衡算法.# scheme: 请求协议.

本地接口配置#

  1. 在项目启动类上标注@EnableShenyuClients(basePackages = "org.apache.shenyu.examples.sdk.feign.api"), 其中basePackages中维护的是Shenyu-Sdk对应维护网关API接口的所在包位置.

  2. 创建interface并使用@ShenyuClient(name = "xxx", contextId = "ShenyuSdkApiName")注解标注, 其中name表示网关服务名.假如你需要定义多个bean来维护网关的API, 可以使用contextId作为对应的bean别名.

  3. 在定义接口中添加所要映射shenyu网关中的接口方法, 其中@xxMapping中的value对应值是网关中对应请求的路径。

示例

项目启动类

import org.apache.shenyu.sdk.feign.EnableShenyuClients;
@SpringBootApplication@EnableShenyuClients(basePackages = "org.apache.shenyu.examples.sdk.feign.api")public class ShenyuSdkHttpExampleApplication {
    /**     * main.     *     * @param args args     */    public static void main(final String[] args) {        SpringApplication.run(ShenyuSdkHttpExampleApplication.class, args);    }}

网关API接口

import org.apache.shenyu.sdk.feign.ShenyuClient;
@ShenyuClient(name = "shenyu-gateway", contextId = "ShenyuSdkApiName", path = "/feign/shenyu/client")public interface ShenyuFeignClientApi {
    /**     * findById.     * test Get.     *     * @param id id     * @return SdkTestDto     */    @GetMapping("/findById")    SdkTestDto findById(@RequestParam("id") String id);
    /**     * annoTest.     *     * @param cookie     cookie     * @param header     header     * @param id         id     * @param requestDto requestDto     * @return sdkTestDto     */    @PostMapping("/{id}/anno")    SdkTestDto annoTest(@CookieValue("cookie") String cookie, @RequestHeader("header") String header, @PathVariable("id") String id, @RequestBody SdkTestDto requestDto);
}

更多可参考示例工程 shenyu-examples-sdk-feign