{"id":22089019,"url":"https://github.com/galaxy-sea/spring-cloud-apisix","last_synced_at":"2025-08-08T17:07:11.337Z","repository":{"id":108143739,"uuid":"546430904","full_name":"galaxy-sea/spring-cloud-apisix","owner":"galaxy-sea","description":"Spring Cloud APISIX is a Spring Cloud framework based on Apache APISIX","archived":false,"fork":false,"pushed_at":"2022-12-10T07:35:17.000Z","size":103,"stargazers_count":37,"open_issues_count":0,"forks_count":8,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-01T15:10:14.781Z","etag":null,"topics":["apache-apisix","apisix","gateway","microservice","spring","spring-cloud"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/galaxy-sea.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-10-06T04:16:42.000Z","updated_at":"2024-12-28T04:59:42.000Z","dependencies_parsed_at":"2023-03-16T21:01:20.210Z","dependency_job_id":null,"html_url":"https://github.com/galaxy-sea/spring-cloud-apisix","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/galaxy-sea/spring-cloud-apisix","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/galaxy-sea%2Fspring-cloud-apisix","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/galaxy-sea%2Fspring-cloud-apisix/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/galaxy-sea%2Fspring-cloud-apisix/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/galaxy-sea%2Fspring-cloud-apisix/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/galaxy-sea","download_url":"https://codeload.github.com/galaxy-sea/spring-cloud-apisix/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/galaxy-sea%2Fspring-cloud-apisix/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269457772,"owners_count":24420289,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-08T02:00:09.200Z","response_time":72,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apache-apisix","apisix","gateway","microservice","spring","spring-cloud"],"created_at":"2024-12-01T02:10:24.047Z","updated_at":"2025-08-08T17:07:11.330Z","avatar_url":"https://github.com/galaxy-sea.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\u003c!-- TOC --\u003e\n* [spring-cloud-apisix](#spring-cloud-apisix)\n* [安装Apache APISIX](#apache-apisix)\n* [引入注册中心和服务发现](#)\n* [负载均衡](#)\n  * [service to service](#service-to-service)\n  * [service to gateway to service](#service-to-gateway-to-service)\n* [devtools](#devtools)\n\u003c!-- TOC --\u003e\n\n\n#  spring-cloud-apisix\n\nSpring Cloud APISIX is a Spring Cloud framework based on Apache APISIX\n\n\u003e 目前仅测试过`Apache APISIX 2.14`, 其他版本并未经过测试，建议不要用于生产环境哦！！！\n\u003e Spring Cloud APISIX还未发布到maven仓库, 想尝鲜的道友们只能自己本地运行哦\n\n\u003e 注册逻辑:\n\n![](./assets/Registration_logic.png)\n\n[//]: # (```mermaid)\n\n[//]: # (flowchart TD)\n\n[//]: # (    register\u0026#40;[register]\u0026#41; --\u003e putnode\u0026#40;add upstream node\u0026#41; --\u003e register200{is 200})\n\n[//]: # (    register200 --yes------\u003e registerSuccess\u0026#40;[register success]\u0026#41;)\n\n[//]: # (    register200 --no--\u003e putUpstream\u0026#40;create upstream and node\u0026#41; --\u003e upstream200{is 200})\n\n[//]: # (    upstream200 --yes--\u003e putRoute\u0026#40;create Route\u0026#41;)\n\n[//]: # (    upstream200 --no----\u003e registerFail\u0026#40;[register fail]\u0026#41;)\n\n[//]: # (    putRoute --\u003e Route200{is 200})\n\n[//]: # (    Route200 --yes--\u003e registerSuccess\u0026#40;[register success]\u0026#41;)\n\n[//]: # (    Route200 --no--\u003e registerFail\u0026#40;[register fail]\u0026#41;)\n\n[//]: # (```)\n\n\n\n#  安装Apache APISIX\n\n\n建议使用 2.14 版本，其他版本可能会存在一些问题\n\n```\ngit clone -b release/apisix-2.14.1 https://github.com/apache/apisix-docker.git\ncd apisix-docker/example\ndocker-compose -p docker-apisix up -d\n```\n\n更多的安装方式查看[APISIX 安装指南](https://apisix.apache.org/docs/apisix/installation-guide/ )\n\n\n#  引入注册中心和服务发现\n\n\n将一个服务注册到Apache APISIX, 详细请查看`spring-cloud-apisix-examples/provider-example`工程\n\n\u003e pom.xml\n```xml\n    \u003cdependencies\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eplus.wcj\u003c/groupId\u003e\n            \u003cartifactId\u003espring-cloud-starter-apisix-discovery\u003c/artifactId\u003e\n        \u003c/dependency\u003e\n  \n        \u003cdependency\u003e\n            \u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n            \u003cartifactId\u003espring-boot-starter-web\u003c/artifactId\u003e\n        \u003c/dependency\u003e\n    \u003c/dependencies\u003e\n```\n\n\u003e application.yml\n```yml\nspring:\n  application:\n    name: provider-example\n  cloud:\n    apisix:\n      discovery:\n        address: http://nuc8i7.wcj.plus:9180\n        control-address: http://nuc8i7.wcj.plus:9092\n        active-health-check: true\n        passive-health-check: true\n        active-health-check-path: /hello\n        token: edd1c9f034335f136f87ad84b625c8f1\n```\n\n\u003e ProviderExampleApplication.java\n```java\n@SpringBootApplication\npublic class ProviderExampleApplication {\n  \n    public static void main(String[] args) {\n        SpringApplication.run(ProviderExampleApplication.class, args);\n    }\n  \n    @RestController\n    @RequestMapping(\"hello\")\n    public class HelloController {\n  \n        @GetMapping\n        public String hello() {\n            return \"hello Apache APISIX\";\n        }\n  \n    }\n  \n}\n```\n\n\n\n#  负载均衡\n\n\n##  service to service\n\n\n可以使用 `RestTemplate` `WebClient` `OpenFeign` 进行服务的调用。\n\n\u003e pom.xml\n```xml\n    \u003cdependencies\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eplus.wcj\u003c/groupId\u003e\n            \u003cartifactId\u003espring-cloud-starter-apisix-discovery\u003c/artifactId\u003e\n        \u003c/dependency\u003e\n  \n        \u003cdependency\u003e\n            \u003cgroupId\u003eplus.wcj\u003c/groupId\u003e\n            \u003cartifactId\u003espring-cloud-starter-apisix-loadbalancer\u003c/artifactId\u003e\n        \u003c/dependency\u003e\n  \n        \u003cdependency\u003e\n            \u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n            \u003cartifactId\u003espring-boot-starter-web\u003c/artifactId\u003e\n        \u003c/dependency\u003e\n  \n    \u003c/dependencies\u003e\n```\n\n\u003e application.yml\n```yml\nspring:\n  application:\n    name: consumer-example\n  cloud:\n    apisix:\n      discovery:\n        address: http://nuc8i7.wcj.plus:9180\n        control-address: http://nuc8i7.wcj.plus:9092\n        active-health-check: true\n        passive-health-check: true\n        active-health-check-path: /hello\n        token: edd1c9f034335f136f87ad84b625c8f1\n```\n\n\u003e HelloClient.java\n```java\n@FeignClient(value = \"provider-example\", name = \"provider-example\", contextId = \"provider-example\", path = \"hello\")\npublic interface HelloClient {\n  \n    @GetMapping\n    String hello();\n  \n}\n```\n\n\u003e ConsumerExampleApplication.java\n```java\n@SpringBootApplication\n@EnableFeignClients(basePackageClasses = HelloClient.class)\npublic class ConsumerExampleApplication {\n  \n    public static void main(String[] args) {\n        SpringApplication.run(ConsumerExampleApplication.class, args);\n    }\n  \n    @RestController\n    @RequestMapping(\"hello\")\n    public class HelloController {\n  \n        @Autowired\n        private HelloClient helloClient;\n  \n        @GetMapping\n        public String hello() {\n            return helloClient.hello();\n        }\n  \n    }\n  \n}\n```\n##  service to gateway to service\n\n\n可以使用 `RestTemplate` `WebClient` `OpenFeign` 进行服务的调用。会改变`spring-cloud-loadbalancer`的一些行为。\n\n灵感源于 [APISIX 助力中东社交软件，实现本地化部署](https://apisix.apache.org/zh/blog/2022/06/14/beeto-with-apache-apisix/ )\n\n\u003e pom.xml\n```xml\n    \u003cdependencies\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eplus.wcj\u003c/groupId\u003e\n            \u003cartifactId\u003espring-cloud-starter-apisix-discovery\u003c/artifactId\u003e\n        \u003c/dependency\u003e\n  \n        \u003cdependency\u003e\n            \u003cgroupId\u003eplus.wcj\u003c/groupId\u003e\n            \u003cartifactId\u003espring-cloud-starter-apisix-loadbalancer\u003c/artifactId\u003e\n        \u003c/dependency\u003e\n  \n        \u003cdependency\u003e\n            \u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n            \u003cartifactId\u003espring-boot-starter-web\u003c/artifactId\u003e\n        \u003c/dependency\u003e\n  \n    \u003c/dependencies\u003e\n```\n\n\u003e application.yml\n```yml\nspring:\n  application:\n    name: consumer-gateway-example\n  cloud:\n    apisix:\n      discovery:\n        address: http://nuc8i7.wcj.plus:9180\n        control-address: http://nuc8i7.wcj.plus:9092\n        active-health-check: true\n        passive-health-check: true\n        active-health-check-path: /hello\n        token: edd1c9f034335f136f87ad84b625c8f1\n      gateway:\n        loadbalancer:\n          provider-example:\n            scheme: HTTP\n            host: nuc8i7.wcj.plus\n            port: 9180\n    loadbalancer:\n      configurations: apisix\nserver:\n  port: 0\n  \n```\n\n\u003e HelloClient.java\n```java\n@FeignClient(value = \"provider-example\", name = \"provider-example\", contextId = \"provider-example\", path = \"hello\")\npublic interface HelloClient {\n  \n    @GetMapping\n    String hello();\n  \n}\n```\n\n\u003e ConsumerGatewayExampleApplication.java\n```java\n@SpringBootApplication\n@EnableFeignClients(basePackageClasses = HelloClient.class)\npublic class ConsumerGatewayExampleApplication {\n  \n    public static void main(String[] args) {\n        SpringApplication.run(ConsumerGatewayExampleApplication.class, args);\n    }\n  \n    @RestController\n    @RequestMapping(\"hello\")\n    public class HelloController {\n  \n        @Autowired\n        private HelloClient helloClient;\n  \n        @GetMapping\n        public String hello() {\n            return helloClient.hello();\n        }\n  \n    }\n  \n}\n```\n# devtools\n\n[健康检查](https://apisix.apache.org/zh/docs/apisix/tutorials/health-check/#%E6%8F%8F%E8%BF%B0) 相关的issues [issues/7964](https://github.com/apache/apisix/issues/7964)，[issues/7141](https://github.com/apache/apisix/issues/7141)\n\n实际体验的感觉就是Upstream的node节点太少无法触发健康检查，你没有任何请求使用Upstream就无法触发健康检查。\n\n1. `spring-cloud-apisix-devtools`会自动注册在servlet容器（Tomcat、Jetty、Undertow）启动的时随机增加两个端口（1000-65535），然后把这两个端口一起注册到`Apache APISIX`\n2. 在注册完成后会主动请求一下健康检查的路由\n\n\n\u003e pom.xml\n\n```xml\n    \u003cdependencies\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n            \u003cartifactId\u003espring-boot-starter-web\u003c/artifactId\u003e\n        \u003c/dependency\u003e\n\n        \u003cdependency\u003e\n            \u003cgroupId\u003eplus.wcj\u003c/groupId\u003e\n            \u003cartifactId\u003espring-cloud-apisix-devtools\u003c/artifactId\u003e\n        \u003c/dependency\u003e\n\n    \u003c/dependencies\u003e\n```\n\n\n\u003e application.yml\n\n```yml\nspring:\n  application:\n    name: devtools-example\n  cloud:\n    apisix:\n      discovery:\n        address: http://nuc8i7.wcj.plus:9180\n        control-address: http://nuc8i7.wcj.plus:9092\n        active-health-check: true\n        passive-health-check: true\n        active-health-check-path: /hello\n        token: edd1c9f034335f136f87ad84b625c8f1\n      devtools:\n        gateway-address: http://nuc8i7.wcj.plus:9180\n        ports:\n          - 28080\n          - 38080\n          - 48080\nserver:\n  port: 8080\n```\n\n\u003e DevtoolsExampleApplication.java\n``` java\n@SpringBootApplication\npublic class DevtoolsExampleApplication {\n\n    public static void main(String[] args) {\n        SpringApplication.run(DevtoolsExampleApplication.class, args);\n    }\n\n}\n```\n\nSpring Boot启动后日志会提示\n``` log\n// 多端口\no.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) 28080 (http) 38080 (http) 48080 (http) with context path ''\n\n// 主动触发\np.w.a.d.h.trigger.AutoHealthTrigger      : Apisix devtools healthcheck\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgalaxy-sea%2Fspring-cloud-apisix","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgalaxy-sea%2Fspring-cloud-apisix","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgalaxy-sea%2Fspring-cloud-apisix/lists"}