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

news2025/4/22 3:20:44

文章目录

  • 一、引言
  • 二、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网关和云原生技术的深度解析。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

家用报警器的UML 设计及其在C++和VxWorks 上的实现01

M.W.Richardson 著&#xff0c;liuweiw 译 论文描述了如何运用 UML&#xff08;统一建模语言&#xff09;设计一个简单的家用报警器&#xff0c;并实现到 VxWorks 操作系统上。本文分两个部分&#xff0c;第一部分描述了如何用 UML 设计和验证家用报警器的模型&#xff0c;以使…

BUU24 [GXYCTF2019]BabyUpload 1

开局上传文件 上传muma.php 上传.htaccess文件也被打回 再次求助互联网&#xff0c;才发现这提示给的多么明显&#xff0c;上传.htaccess文件是检查文件类型&#xff08;Contnet-Type&#xff09;&#xff0c;上传muma.php是检查后缀里头有没有ph &#xff0c;检查文件类型那…

贪心与单调栈的艺术:从三道 LeetCode 题看最小字典序问题(316/402/1081)

前言 欢迎来到我的算法探索博客&#xff0c;在这里&#xff0c;我将通过解析精选的LeetCode题目&#xff0c;与您分享深刻的解题思路、多元化的解决方案以及宝贵的实战经验&#xff0c;旨在帮助每一位读者提升编程技能&#xff0c;领略算法之美。 &#x1f449;更多高频有趣Lee…

【含开题报告+文档+PPT+源码】基于SpringBoot的校园论坛系统的设计与实现

开题报告 本研究论文主要探讨并实现了一个基于SpringBoot框架构建的全方位校园论坛系统。此系统旨在为校内师生提供一个信息交流与分享的互动平台&#xff0c;核心功能涵盖了校园新闻新闻的实时浏览与更新&#xff0c;用户可自主发布各类主题帖子&#xff0c;并支持深度互动&a…

关于视频字幕

文章目录 视频字幕分类内嵌字幕内封字幕外挂字幕 字幕格式纯文本字幕特效字幕图形字幕 简易修改字幕修改时间同步PotplayerSubtitleEdit 提取蓝光原盘字幕参考资料 视频字幕分类 内嵌字幕 合成到画面的硬字幕&#xff0c;不可移除。 内封字幕 常见的如 MKV 文件&#xff0c…

【AI 语音】实时语音交互优化全解析:从 RTC 技术到双讲处理

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

数据结构(栈结构之顺序栈操作实现一)

目录 一.栈结构之顺序栈操作实现 1.项目结构以及初始代码 2.初始化栈结构 3.入栈操作并显示 4.出栈操作并显示出栈元素 5.获取栈长度 6.清空栈 7.销毁栈 8.动态扩展栈空间 一.栈结构之顺序栈操作实现 1.项目结构以及初始代码 SeqStack.h #ifndef __SEQSTACK_H__ #de…

【React】受控组件和非受控组件

目录 受控组件非受控组件基于ref获取DOM元素1、在标签中使用2、在组件中使用 受控组件 表单元素的状态&#xff08;值&#xff09;由 React 组件的 state 完全控制。组件的 state 保存了表单元素的值&#xff0c;并且每次用户输入时&#xff0c;React 通过事件处理程序来更新 …

vue2:如何动态控制el-form-item之间的行间距

需求 某页面有查看和编辑两种状态: 编辑: 查看: 可以看到,查看时,行间距太大导致页面不紧凑,所以希望缩小查看是的行间距。 行间距设置 行间距通常是通过 CSS 的 margin 或 padding 属性来控制的。在 Element UI 的样式表中,.el-form-item 的下边距(margin-bottom)…

亚博microros小车-原生ubuntu支持系列:20 ROS Robot APP建图

依赖工程 新建工程laserscan_to_point_publisher src/laserscan_to_point_publisher/laserscan_to_point_publisher/目录下新建文件laserscan_to_point_publish.py #!/usr/bin/env python3import rclpy from rclpy.node import Node from geometry_msgs.msg import PoseStam…

计算机毕业设计Python+Vue.js游戏推荐系统 Steam游戏推荐系统 Django Flask 游 戏可视化 游戏数据分析 游戏大数据 爬虫

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

k8sollama部署deepseek-R1模型,内网无坑

这是目录 linux下载ollama模型文件下载到本地,打包迁移到k8s等无网络环境使用下载打包ollama镜像非k8s环境使用k8s部署访问方式非ollama运行deepseek模型linux下载ollama 下载后可存放其他服务器 curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o ollama-linu…

【Elasticsearch】nested聚合

在 Elasticsearch 中&#xff0c;嵌套聚合&#xff08;nestedaggregation&#xff09;的语法形式用于对嵌套字段&#xff08;nestedfields&#xff09;进行聚合操作。嵌套字段是 Elasticsearch 中的一种特殊字段类型&#xff0c;用于存储数组中的对象&#xff0c;这些对象需要独…

spy-debugger + Charles 调试移动端/内嵌小程序H5

简介说明&#xff1a; PC端可以用F12进行console等进行调试&#xff0c;但移动端App中使用webview就无法进行实时调试&#xff0c;针对这种情况 1. 安装 全局安装 spy-debugger sudo npm install spy-debugger -g // window不用加sudo2. spy-debugger 证书 其实spy-debugg…

【NLP 20、Encoding编码 和 Embedding嵌入】

目录 一、核心定义与区别 二、常见Encoding编码 (1) 独热编码&#xff08;One-Hot Encoding&#xff09; (2) 位置编码&#xff08;Positional Encoding&#xff09; (3) 标签编码&#xff08;Label Encoding&#xff09; (4) 注意事项 三、常见Embedding词嵌入 (1) 基础词嵌入…

深度学习模型可视化小工具wandb

1 概述 Wandb&#xff08;Weights & Biases&#xff0c;网址是https://wandb.ai&#xff09;是一个用于机器学习项目实验跟踪、可视化和管理的工具&#xff0c;旨在用户更有效地监控模型训练过程、优化性能&#xff0c;并分享和复现实验结果‌‌。对于使用者而言&#xff…

数据库系统概论的第六版与第五版的区别,附pdf

我用夸克网盘分享了「数据库系统概论第五六版资源」&#xff0c;点击链接即可保存。 链接&#xff1a;https://pan.quark.cn/s/21a278378dee 第6版教材修订的主要内容 为了保持科学性、先进性和实用性&#xff0c;在第5版教材基础上对全书内容进行了修改、更新和充实。 在科…

【Kubernetes Pod间通信-第2篇】使用BGP实现Pod到Pod的通信

Kubernetes中Pod间的通信 本系列文章共3篇: 【Kubernetes Pod间通信-第1篇】在单个子网中使用underlay网络实现Pod到Pod的通信【Kubernetes Pod间通信-第2篇】使用BGP实现Pod到Pod的通信(本文介绍)【Kubernetes Pod间通信-第3篇】Kubernetes中Pod与ClusterIP服务之间的通信…

软件设计模式

目录 一.创建型模式 抽象工厂 Abstract Factory 构建器 Builder 工厂方法 Factory Method 原型 Prototype 单例模式 Singleton 二.结构型模式 适配器模式 Adapter 桥接模式 Bridge 组合模式 Composite 装饰者模式 Decorator 外观模式 Facade 享元模式 Flyw…

vscode 如何通过Continue引入AI 助手deepseek

第一步&#xff1a; 在deepseek 官网上注册账号&#xff0c;得到APIKeys(deepseek官网地址) 创建属于自己的APIKey,然后复制这个key,(注意保存自己的key)! 第二步&#xff1a; 打开vscode,在插件市场安装Continue插件, 点击设置&#xff0c;添加deepseek模型&#xff0c;默认…