『Apisix进阶篇』结合Consul作服务发现实战演练

文章目录

  • 一、引言
  • 二、APISIX与Consul集成
    • 2.1 环境准备
    • 2.2 配置Consul服务发现
      • 2.2.1 修改APISIX配置文件
      • 2.2.2 重启APISIX
    • 2.3 在路由中使用Consul服务发现
      • 2.3.1 创建路由
      • 2.3.2 验证路由
    • 2.4 高级配置
      • 2.4.1 服务过滤
      • 2.4.2 多数据中心支持
  • 三、总结

📣读完这篇文章里你能收获到

  • 🛠️ 从理论到实践:手把手教你用APISIX和Consul搭建高效服务发现系统!
  • 🎯 掌握服务发现的基本概念及Consul的特点与优势
  • 📈 学习APISIX与Consul集成的原理及配置方法
  • 🚀 了解基于Consul的服务发现实战演练过程

一、引言

在现代微服务架构中,服务发现是一个至关重要的组件。它允许服务动态地发现和调用其他服务,而无需硬编码服务地址。APISIX作为一个高性能、可扩展的API网关,天然支持多种服务发现机制,其中Consul是一个广泛使用的服务发现工具。本文将详细介绍如何在APISIX中基于Consul实现服务发现,并给出具体的配置步骤和实践指南。

二、APISIX与Consul集成

APISIX支持通过Consul进行服务发现,这意味着APISIX可以动态地从Consul中获取服务实例列表,并根据负载均衡策略将请求转发到合适的服务实例。下面将详细介绍如何在APISIX中配置Consul服务发现。

2.1 环境准备

在开始之前,确保你已经具备以下环境:

  • APISIX:已经安装并运行APISIX,可以参考官方文档进行安装。
  • Consul:已经安装并运行Consul,可以参考Consul官方文档进行安装。

2.2 配置Consul服务发现

APISIX通过discovery插件支持Consul服务发现。需要在APISIX的配置文件中进行相应的配置。

2.2.1 修改APISIX配置文件

首先,打开APISIX的配置文件/usr/local/apisix/conf/config-default.yam,找到<font style="color:rgb(64, 64, 64);">discovery</font>部分,添加Consul的配置:

discovery:
   consul:
     servers:                     
       - "http://127.0.0.1:8500"

更多配置可选项如下:

discovery:
  consul:
    servers:
      - "http://127.0.0.1:8500"  # Consul 服务地址
    token: "your_acl_token"       # 如果 Consul 启用了 ACL 访问控制,需要指定 token
    skip_services:
      - "service_a"               # 需要跳过的服务
    timeout:
      connect: 1000               # 连接超时时间,默认 2000 ms
      read: 1000                  # 读取超时时间,默认 2000 ms
      wait: 60                    # 等待时间,默认 60 秒
    weight: 1                     # 默认权重
    fetch_interval: 5             # 拉取间隔,默认 3 秒,仅在 keepalive: false 时生效
    keepalive: true               # 是否使用长连接,默认 true
    sort_type: "origin"           # 排序类型,默认 origin
    default_service:              # 默认服务配置
      host: "127.0.0.1"
      port: 20999
      metadata:
        fail_timeout: 1           # 默认失败超时时间
        weight: 1                 # 默认权重
        max_fails: 1              # 默认最大失败次数
    dump:
      path: "logs/consul.dump"    # 数据持久化路径
      expire: 2592000             # 数据过期时间,默认 0(永不过期)

2.2.2 重启APISIX

修改完配置文件后,需要重启APISIX以使配置生效:

sudo apisix restart

2.3 在路由中使用Consul服务发现

接下来,可以在APISIX的路由配置中使用Consul服务发现。假设有一个服务<font style="color:rgb(64, 64, 64);">my_service</font>已经注册到Consul中,可以通过以下配置将请求转发到该服务。

2.3.1 创建路由

使用APISIX的Admin API创建一个路由,配置如下:

curl -X PUT http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -d '
{
  "uri": "/my_service/*",
  "upstream": {
    "service_name": "my_service",  # Consul中注册的服务名称
    "type": "roundrobin",          # 负载均衡策略
    "discovery_type": "consul"     # 使用Consul服务发现
  }
}'

2.3.2 验证路由

创建路由后,可以通过访问http://127.0.0.1:9080/my_service/来验证请求是否被正确转发到my_service服务。

2.4 高级配置

2.4.1 服务过滤

Consul支持通过标签(tags)对服务进行过滤。可以在APISIX的配置中使用filter参数来指定过滤条件。例如,如果只想选择带有env=prod标签的服务实例,可以这样配置:

discovery:
  consul:
    filter: "Service.Tags contains 'env=prod'"

2.4.2 多数据中心支持

如果你的Consul部署在多个数据中心,可以通过配置多个Consul服务器地址来实现多数据中心的服务发现:

discovery:
  consul:
    servers:
      - "http://dc1.consul.example.com:8500"
      - "http://dc2.consul.example.com:8500"

三、总结

通过本文的介绍,详细讲解了如何在APISIX中基于Consul实现服务发现。从Consul的基本概念到APISIX的具体配置,一步步实现了服务的动态发现与负载均衡。Consul作为一个成熟的服务发现工具,与APISIX的结合能够极大地提升微服务架构的灵活性和可扩展性。

在实际生产环境中,服务发现的配置可能会更加复杂,需要根据具体的业务需求进行调整。希望本文能够为你提供一个清晰的指引,帮助你在APISIX中顺利集成Consul服务发现。

如果你对APISIX或Consul有更多的疑问,欢迎在评论区留言讨论。也欢迎关注我的博客,获取更多关于微服务、API网关和云原生技术的深度解析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/966343.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

迁移学习 Transfer Learning

迁移学习&#xff08;Transfer Learning&#xff09;是什么&#xff1f; 迁移学习是一种机器学习方法&#xff0c;它的核心思想是利用已有模型的知识来帮助新的任务或数据集进行学习&#xff0c;从而减少训练数据的需求、加快训练速度&#xff0c;并提升模型性能。 &#x1f…

深入理解 C++17 std::is_swappable

文章目录 深入理解 C17 std::is_swappable引言std::is_swappable 概述std::is_swappable 的工作原理std::is_swappable 的变体注意事项结论 深入理解 C17 std::is_swappable 引言 在 C 编程中&#xff0c;交换两个对象的值是一个常见的操作。为了确保代码的通用性和安全性&am…

Java/Kotlin双语革命性ORM框架Jimmer(一)——介绍与简单使用

概览 Jimmer是一个Java/Kotlin双语框架 包含一个革命性的ORM 以此ORM为基础打造了一套综合性方案解决方案&#xff0c;包括 DTO语言 更全面更强大的缓存机制&#xff0c;以及高度自动化的缓存一致性 更强大客户端文档和代码生成能力&#xff0c;包括Jimmer独创的远程异常 …

deepseek+kimi自动生成ppt

打开deepseek官网&#xff0c;输入详细的需求&#xff0c;让他生成个ppt 接着deepseek开始思考生成了 接着复制生成了的内容 打开kimi粘贴刚才deepseek生成的内容 可以一键生成啦&#xff0c;下载编辑使用吧

C#中深度解析BinaryFormatter序列化生成的二进制文件

C#中深度解析BinaryFormatter序列化生成的二进制文件 BinaryFormatter序列化时,对象必须有 可序列化特性[Serializable] 一.新建窗体测试程序BinaryDeepAnalysisDemo,将默认的Form1重命名为FormBinaryDeepAnalysis 二.新建测试类Test Test.cs源程序如下: using System; us…

探索从传统检索增强生成(RAG)到缓存增强生成(CAG)的转变

在人工智能快速发展的当下&#xff0c;大型语言模型&#xff08;LLMs&#xff09;已成为众多应用的核心技术。检索增强生成&#xff08;RAG&#xff09;&#xff08;RAG 系统从 POC 到生产应用&#xff1a;全面解析与实践指南&#xff09;和缓存增强生成&#xff08;CAG&#x…

采用idea中的HTTP Client插件测试

1.安装插件 采用idea中的HTTP Client插件进行接口测试,好处是不用打开post/swagger等多个软件,并且可以保存测试时的参数,方便后续继续使用. 高版本(2020版本以上)的idea一般都自带这个插件,如果没有也可以单独安装. 2.使用 插件安装完成(或者如果idea自带插件),会在每个Con…

WebStorm设置Vue Component模板

下载vue.js插件 下面有模板样例 Composition API&#xff1a;这是 Vue 3 的一项新特性&#xff0c;允许通过 setup 函数来组织组件逻辑。Options API&#xff1a;这是 Vue 2 和 Vue 3 都支持的传统方式&#xff0c;通过定义组件的 data、methods、computed 等来组织逻辑。 Comp…

程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<7>

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。 今天我们一起来学习转移表&#xff0c;回调函数&#xff0c;qsort… 目录 一、转移表1.1 定义与原理1.3…

DeepSeek-R1:通过纯强化学习提升大模型推理能力,对于真正的强 AI (AGI/ASI),要放弃人类评审,让TA学会自我评估与博弈

DeepSeek-R1&#xff1a;通过纯强化学习提升大模型推理能力&#xff0c;对于真正的超级人工智能&#xff0c;要放弃人类评审&#xff0c;让TA学会自我评估与博弈 论文大纲理解Why - 这个研究要解决什么现实问题What - 核心发现或论点是什么HowHow good - 研究的理论贡献和实践意…

LabVIEW2025中文版软件安装包、工具包、安装教程下载

下载链接&#xff1a;LabVIEW及工具包大全-三易电子工作室http://blog.eeecontrol.com/labview6666 《LabVIEW2025安装图文教程》 1、解压后&#xff0c;双击install.exe安装 2、选中“我接受上述2条许可协议”&#xff0c;点击下一步 3、点击下一步&#xff0c;安装NI Packa…

使用 Ollama 在 Windows 环境部署 DeepSeek 大模型实战指南

文章目录 前言Ollama核心特性 实战步骤安装 Ollama验证安装结果部署 DeepSeek 模型拉取模型启动模型 交互体验命令行对话调用 REST API 总结个人简介 前言 近年来&#xff0c;大语言模型&#xff08;LLM&#xff09;的应用逐渐成为技术热点&#xff0c;而 DeepSeek 作为国产开…

快速在wsl上部署学习使用c++轻量化服务器-学习笔记

知乎上推荐的Tinywebserver这个服务器&#xff0c;快速部署搭建&#xff0c;学习c服务器开发 仓库地址 githubhttps://link.zhihu.com/?targethttps%3A//github.com/qinguoyi/TinyWebServerhttps://link.zhihu.com/?targethttps%3A//github.com/qinguoyi/TinyWebServer 在…

【R语言】apply函数族

在R语言中使用循环操作时是使用自身来实现的&#xff0c;效率较低。所以R语言有一个符合其统计语言出身的特点&#xff1a;向量化。R语言中的向量化运用了底层的C语言&#xff0c;而C语言的效率比高层的R语言的效率高。 apply函数族主要是为了解决数据向量化运算的问题&#x…

spring 学习(工厂方式 实例化对象(静态工厂,实例化工厂,实现factorybean 规范))

目录 前言 第一种&#xff1a;静态工厂方式实例化对象 静态工厂的特点 demo(案例&#xff09; 第二种&#xff1a;实例工厂的方式 实例工厂和静态工厂的区别 demo(案例&#xff09; 第三种&#xff1a;实现FactoryBean规范的方式 demo(案例&#xff09; 前言 spring 实…

4.python+flask+SQLAlchemy+达梦数据库

前提 1.liunx Centos7上通过docker部署了达梦数据库。从达梦官网下载的docker镜像。(可以参考前面的博文) 2.windows上通过下载x86,win64位的达梦数据库,只安装客户端,不安装服务端。从达梦官网下载达梦数据库windows版。(可以参考前面的博文) 这样就可以用windows的达…

2024最新版Java面试题及答案,【来自于各大厂】

发现网上很多Java面试题都没有答案&#xff0c;所以花了很长时间搜集整理出来了这套Java面试题大全~ 篇幅限制就只能给大家展示小册部分内容了&#xff0c;需要完整版的及Java面试宝典小伙伴点赞转发&#xff0c;关注我后在【翻到最下方&#xff0c;文尾点击名片】即可免费获取…

接入 deepseek 实现AI智能问诊

1. 准备工作 注册 DeepSeek 账号 前往 DeepSeek 官网 注册账号并获取 API Key。 创建 UniApp 项目 使用 HBuilderX 创建一个新的 UniApp 项目&#xff08;选择 Vue3 或 Vue2 模板&#xff09;。 安装依赖 如果需要在 UniApp 中使用 HTTP 请求&#xff0c;推荐使用 uni.requ…

TypeScript 中的对象类型:深入理解接口和类型别名

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Vinorine合成酶的晶体结构-文献精读110

Crystal structure of vinorine synthase, the first representative of the BAHD superfamily Vinorine合成酶的晶体结构&#xff1a;BAHD超级家族的首个代表 摘要 Vinorine合成酶是一种酰基转移酶&#xff0c;在植物Rauvolfia中抗心律失常单萜吲哚生物碱ajmaline的生物合成…