使用Nacos接入

背景说明

Shenyu提供了Shenyu-Sdk方便让服务能够快速接入shenyu网关, 客户端服务只需要依赖该sdk, 并做些简单配置, 即可类似调用本地接口一样调用网关暴露的API。

使用Nacos接入 - 图1

客户端接入网关的注册中心支持(nacos、eureka、etcd、zookeeper、consul),下面为shenyu-bootstrap应用客户端使用Zookeeper注册中心时的相关指引。

环境准备

需要参考 运维部署 , 选择一种方式启动shenyu-adminshenyu-bootstrap.

shenyu-bootstrap

添加Maven依赖

在网关的pom.xml文件中引入如下依赖.

  1. <dependency>
  2. <groupId>org.apache.shenyu</groupId>
  3. <artifactId>shenyu-spring-boot-starter-instance</artifactId>
  4. <version>${project.version}</version>
  5. </dependency>

配置文件调整

在网关的yml配置文件中添加如下配置.

  1. spring:
  2. application:
  3. name: shenyu-bootstrap
  4. cloud:
  5. discovery:
  6. enabled: true
  7. nacos:
  8. discovery:
  9. server-addr: 127.0.0.1:8848 # 此处填你的nacos服务地址
  10. enabled: true
  11. namespace: ShenyuRegisterCenter # nacos命名空间
  12. # 如开启nacos鉴权需配置如下参数
  13. username: nacos # 鉴权用户名
  14. password: nacos # 鉴权密码

应用客户端

添加Maven依赖

在应用客户端的pom.xml文件中引入如下依赖.

  • Shenyu-Sdk 核心包
  1. <dependencies>
  2. <dependency>
  3. <groupId>org.apache.shenyu</groupId>
  4. <artifactId>shenyu-sdk-core</artifactId>
  5. <version>2.5.1-SNAPSHOT</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.apache.shenyu</groupId>
  9. <artifactId>shenyu-spring-boot-starter-sdk</artifactId>
  10. <version>2.5.1-SNAPSHOT</version>
  11. </dependency>
  12. </dependencies>
  • Shenyu-Sdk http实现包

http客户端实现, 目前提供实现okhttp, httpclient. 其他客户端实现可继承AbstractShenyuSdkClient实现。

  1. <!-- httpclient -->
  2. <dependency>
  3. <groupId>org.apache.shenyu</groupId>
  4. <artifactId>shenyu-sdk-httpclient</artifactId>
  5. <version>2.5.1-SNAPSHOT</version>
  6. </dependency>
  7. <!-- okhttp -->
  8. <!--
  9. <dependency>
  10. <groupId>org.apache.shenyu</groupId>
  11. <artifactId>shenyu-sdk-okhttp</artifactId>
  12. <version>2.5.1-SNAPSHOT</version>
  13. </dependency>
  14. -->

配置文件调整

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

  1. shenyu:
  2. sdk:
  3. enabled: true
  4. register-type: nacos
  5. server-lists: localhost:2181
  6. props:
  7. nacosNameSpace: ShenyuRegisterCenter
  8. username: nacos
  9. password: nacos
  10. retry:
  11. enable: true
  12. period: 100
  13. maxPeriod: 1000
  14. maxAttempts: 5
  15. algorithm: roundRobin
  16. scheme: http
  17. # registerType : 服务注册类型,填写 nacos
  18. # serverList: 为nacos注册类型时,配置成你的nacos地址,集群环境请使用(,)分隔
  19. # nacosNameSpace: nacos命名空间ID
  20. # username: nacos鉴权用户名
  21. # password: nacos鉴权密码
  22. # retry 失败重试相关配置
  23. # retry.period: 重试等待时间
  24. # retry.maxPeriod: 最大重试等待时间
  25. # retry.maxAttempts: 最大重试次数
  26. # algorithm: 负载均衡
  27. # scheme: 请求协议头

本地接口配置

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

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

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

示例

项目启动类

  1. @SpringBootApplication
  2. @EnableShenyuClients(basePackages = "org.apache.shenyu.examples.sdk.http.api")
  3. public class ShenyuSdkHttpExampleApplication {
  4. /**
  5. * main.
  6. *
  7. * @param args args
  8. */
  9. public static void main(final String[] args) {
  10. SpringApplication.run(ShenyuSdkHttpExampleApplication.class, args);
  11. }
  12. }

网关API接口

  1. @ShenyuClient(name = "shenyu-bootstrap", contextId = "ShenyuSdkApiName")
  2. public interface ShenyuHttpClientApi {
  3. /**
  4. * findById.
  5. * test Get.
  6. *
  7. * @param id id
  8. * @return SdkTestDto
  9. */
  10. @GetMapping("/http/shenyu/client/findById")
  11. SdkTestDto findById(@RequestParam("id") String id);
  12. }

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