当前位置: 首页 > article >正文

『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 访问控制,需要指定 tokenskip_services:- "service_a"               # 需要跳过的服务timeout:connect: 1000               # 连接超时时间,默认 2000 msread: 1000                  # 读取超时时间,默认 2000 mswait: 60                    # 等待时间,默认 60 秒weight: 1                     # 默认权重fetch_interval: 5             # 拉取间隔,默认 3 秒,仅在 keepalive: false 时生效keepalive: true               # 是否使用长连接,默认 truesort_type: "origin"           # 排序类型,默认 origindefault_service:              # 默认服务配置host: "127.0.0.1"port: 20999metadata: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网关和云原生技术的深度解析。

相关文章:

『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 多数据中心支持 三、总结 &#x1f4e3;读完这篇文章里…...

家用报警器的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…...

医疗信息分析与知识图谱系统设计方案

医疗信息分析与知识图谱系统设计方案 0. 系统需求 0.1 项目背景 本系统旨在通过整合医疗机构现有的信息系统数据&#xff0c;结合向量数据库、图数据库和开源AI模型&#xff0c;实现医疗数据的深度分析、疾病预测和医疗知识图谱构建&#xff0c;为医疗决策提供智能化支持。 …...

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

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

关于视频字幕

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

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

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

使用 Let‘s Encrypt 和 OpenResty 实现域名转发与 SSL 配置

在搭建网站或服务时&#xff0c;确保域名的安全性和正确的流量转发是非常重要的。本文将介绍如何使用 Let’s Encrypt 获取免费的 SSL 证书&#xff0c;并将其配置到 OpenResty 中&#xff0c;同时实现特定的域名转发规则。这不仅可以提升网站的安全性&#xff0c;还能优化流量…...

代码随想录算法训练营| 二叉树总结

代码随想录 二叉树的理论基础&#xff1a;二叉树种类、存储方式、遍历方式、定义方式 二叉树遍历&#xff1a;深度优先和广度优先 二叉树属性&#xff1a;对称、深度、节点、平衡、路径、回溯 修改与构造&#xff1a;反转、构造、合并 涉及到二叉树的构造&#xff0c;无论普…...

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

目录 一.栈结构之顺序栈操作实现 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 通过事件处理程序来更新 …...

【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter2-HTML 中的 JavaScript

二、HTML 中的 JavaScript 将 JavaScript 插入 HTML 的主要方法是使用<script>元素。 <script>元素有下列 8 个属性。 async&#xff1a;可选。表示应该立即开始下载脚本&#xff0c;但不能阻止其他页面动作&#xff0c;比如下载资源或等待其他脚本加载。只对外部…...

tcpdump 的工作层次

理解 tcpdump 的工作层次需要结合 网络分层模型 和 数据包捕获机制&#xff08;如 pcap&#xff09;来回答。以下是详细的解释&#xff1a; 物理层 vs. 数据链路层 物理层&#xff08;Physical Layer&#xff0c;OSI 第1层&#xff09; 负责传输原始比特流&#xff08;如电信号…...

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领…...

Qt最新热点

Qt的最新热点主要集中在以下几个方面: 跨平台开发:Qt继续强调其在跨平台开发方面的优势,支持在Windows、macOS、Linux以及移动操作系统(如Android和iOS)上的应用开发。 Qt for Python:Qt for Python(PySide2和PySide6)的发展,为Python开发者提供了更强大的工具来创建桌…...

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…...

音频录制一般在什么情况下会选择保存为PCM?什么情况会选择保存为WAV?

在音频开发中,选择保存为 PCM 或 WAV 格式取决于具体的应用场景和需求。以下是两种格式的特点以及适用场景的分析: PCM 格式 特点: 原始音频数据: PCM 是未压缩的原始音频数据,没有任何文件头或元数据。数据直接以二进制形式存储,通常是采样点的值。文件体积较大: 由于…...

【Elasticsearch】nested聚合

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

从零创建 Vue 3 项目

Vue 3 作为当前最流行的前端框架之一&#xff0c;提供了多种创建项目的方式。本文将详细介绍七种常见的创建 Vue 3 项目的方法&#xff0c;涵盖从本地开发到在线编辑器的多种场景&#xff0c;帮助您选择最适合的方式 快速创建 Vue 3项目 进行开发。 方法一&#xff1a;使用 Vue…...

Day48_20250130【回校继续打卡】_单调栈part1_739.每日温度|496.下一个更大元素I|503.下一个更大元素II

Day48_20250130_单调栈part1_739.每日温度|496.下一个更大元素I|503.下一个更大元素II 20250130补完 739.每日温度 题目 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0…...

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) 基础词嵌入…...

【LeetCode 刷题】二叉树(3)-二叉树的属性

此博客为《代码随想录》二叉树章节的学习笔记&#xff0c;主要内容为二叉树的属性相关的题目解析。 文章目录 101. 对称二叉树104.二叉树的最大深度111.二叉树的最小深度222.完全二叉树的节点个数110.平衡二叉树257. 二叉树的所有路径404.左叶子之和513.找树左下角的值112. 路…...

深度学习模型可视化小工具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服务之间的通信…...

python:csv文件批量导入mysql

1.导入sql文件到数据库中 mysql -u username -p要先创建一个空的数据库 CREATE DATABASE your_database_name;USE your_database_name;导入sql文件 source /path/to/your/file.sql;查看某个表格的结构&#xff0c;为后续数据插入做准备 DESCRIBE table_name;2.插入假数据到对应…...