『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网关和云原生技术的深度解析。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot速成(八)登录实战:未登录不能访问 P5-P8

1.登录 package com.itheima.springbootconfigfile.controller;import com.itheima.springbootconfigfile.pojo.Result; import com.itheima.springbootconfigfile.pojo.User; import com.itheima.springbootconfigfile.service.UserService;import com.itheima.springbootco…

对接DeepSeek

其实&#xff0c;整个对接过程很简单&#xff0c;就四步&#xff0c;获取key&#xff0c;找到接口文档&#xff0c;接口测试&#xff0c;代码对接。 获取 KEY https://platform.deepseek.com/transactions 直接付款就是了&#xff08;现在官网暂停充值2025年2月7日&#xff0…

ASP.NET Core JWT

目录 Session的缺点 JWT&#xff08;Json Web Token&#xff09; 优点&#xff1a; 登录流程 JWT的基本使用 生成JWT 解码JWT 用JwtSecurityTokenHandler对JWT解码 注意 Session的缺点 对于分布式集群环境&#xff0c;Session数据保存在服务器内存中就不合适了&#…

【MySQL】深度学习数据库开发技术:使用CC++语言访问数据库

**前言&#xff1a;**本节内容介绍使用C/C访问数据库&#xff0c; 包括对数据库的增删查改操作。 主要是学习一些接口的调用&#xff0c; 废话不多说&#xff0c; 开始我们的学习吧&#xff01; ps:本节内容比较容易&#xff0c; 友友们放心观看哦&#xff01; 目录 准备mysql…

postgreSQL16.6源码安装

1.获取源码 从PostgreSQL: File Browser获取tar.bz2或者tar.gz源码 2.解压 tar xf postgresql-version.tar.bz2 roothwz-VMware-Virtual-Platform:/usr/local# tar xf postgresql-16.6.tar.bz2 roothwz-VMware-Virtual-Platform:/usr/local# ll 总计 24324 drwxr-xr-x 12 ro…

音频进阶学习十一——离散傅里叶级数DFS

文章目录 前言一、傅里叶级数1.定义2.周期信号序列3.表达式DFSIDFS参数含义 4.DFS公式解析1&#xff09;右边解析 T T T、 f f f、 ω \omega ω的关系求和公式N的释义求和公式K的释义 e j ( − 2 π k n N ) e^{j(\frac{-2\pi kn}{N})} ej(N−2πkn​)的释义 ∑ n 0 N − 1 e…

【kafka系列】Topic 与 Partition

Kafka 的 Topic&#xff08;主题&#xff09; 和 Partition&#xff08;分区&#xff09; 是数据组织的核心概念&#xff0c;它们的映射关系及在 Broker 上的分布直接影响 Kafka 的性能、扩展性和容错能力。以下是详细解析&#xff1a; 一、Topic 与 Partition 的映射关系 Top…

卷积神经网络CNN如何处理语音信号

卷积神经网络&#xff08;CNN&#xff09;在处理语音数据时通常不直接处理原始的一维波形信号&#xff0c;而是处理经过预处理的二维语音特征图。以下是CNN处理语音数据时的常见数据类型和步骤&#xff1a; 1. 语音信号预处理 语音信号通常是一维的时间序列&#xff08;波形信…

【MQ】Spring3 中 RabbitMQ 的使用与常见场景

一、初识 MQ 传统的单体架构&#xff0c;分布式架构的同步调用里&#xff0c;无论是方法调用&#xff0c;还是 OpenFeign 难免会有以下问题&#xff1a; 扩展性差&#xff08;高耦合&#xff0c;需要依赖对应的服务&#xff0c;同样的事件&#xff0c;不断有新需求&#xff0…

GB/T 43698-2024 《网络安全技术 软件供应链安全要求》标准解读

一、43698-2024标准图解 https://mmbiz.qpic.cn/sz_mmbiz_png/rwcfRwCticvgeBPR8TWIPywUP8nGp4IMFwwrxAHMZ9Enfp3wibNxnfichT5zs7rh2FxTZWMxz0je9TZSqQ0lNZ7lQ/640?wx_fmtpng&fromappmsg 标准在线预览&#xff1a; 国家标准|GB/T 43698-2024 相关标准&#xff1a; &a…

Linux系统-centos防火墙firewalld详解

Linux系统-centos7.6 防火墙firewalld详解 1 firewalld了解 CentOS 7.6默认的防火墙管理工具是firewalld&#xff0c;它取代了之前的iptables防火墙。firewalld属于典型的包过滤防火墙或称之为网络层防火墙&#xff0c;与iptables一样&#xff0c;都是用来管理防火墙的工具&a…

Gitlab中如何进行仓库迁移

需求&#xff1a;之前有一个自己维护的新仓库A&#xff0c;现在需要将这个仓库提交并覆盖另一个旧的仓库B&#xff0c;需要保留A中所有的commit信息。 1.方法一&#xff1a;将原有仓库A导出后再导入到新的仓库B中 适用场景&#xff1a;新的仓库B是一个待建仓库&#xff0c;相当…

微信点餐系统小程序ssm+论文源码调试讲解

第4章 系统设计 一个成功设计的系统在内容上必定是丰富的&#xff0c;在系统外观或系统功能上必定是对用户友好的。所以为了提升系统的价值&#xff0c;吸引更多的访问者访问系统&#xff0c;以及让来访用户可以花费更多时间停留在系统上&#xff0c;则表明该系统设计得比较专…

01单片机上电后没有正常运行怎么办

单片机上电后没有运转, 首先要检查什么? 1、单片机供电是否正常? &电路焊接检查 如果连最基本的供电都没有,其它都是空谈啊!检查电路断路了没有?短路了没有?电源合适吗?有没有虚焊? 拿起万用表之前,预想一下测量哪里?供电电压应该是多少?对PCB上电压测量点要…

【Java基础】为什么不支持多重继承?方法重载和方法重写之间区别、Exception 和 Error 区别?

Hi~&#xff01;这里是奋斗的明志&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f331;&#x1f331;个人主页&#xff1a;奋斗的明志 &#x1f331;&#x1f331;所属专栏&#xff1a;Java基础面经 &#x1f4da;本系列文章为个…

c++ haru生成pdf输出饼图

#define PI 3.14159265358979323846 // 绘制饼图的函数 void draw_pie_chart(HPDF_Doc pdf, HPDF_Page page, float *data, int data_count, float x, float y, float radius) { float total 0; int i; // 计算数据总和 for (i 0; i < data_count; i) { tot…

Linux 创建进程 fork()、vfork() 与进程管理

Linux 创建进程 fork、vfork、进程管理 一、Linux的0号、1号、2号进程二、Linux的进程标识三、fork() 函数1、基本概念2、函数特点3、用法以及应用场景&#xff08;1&#xff09;父子进程执行不同的代码&#xff08;2&#xff09;进程执行另一个程序 4、工作原理 四、vfork() 函…

【漫话机器学习系列】082.岭回归(或脊回归)中的α值(alpha in ridge regression)

岭回归&#xff08;Ridge Regression&#xff09;中的 α 值 岭回归&#xff08;Ridge Regression&#xff09;是一种 带有 L2​ 正则化 的线性回归方法&#xff0c;用于处理多重共线性&#xff08;Multicollinearity&#xff09;问题&#xff0c;提高模型的泛化能力。其中&am…

电脑重启后vscode快捷方式失效,找不到code.exe

今天打开电脑发现vscode的快捷方式失效了&#xff0c;提示code.exe被删除或移动。 解决方法 查看vscode安装目录&#xff0c;发现多了一个_文件夹&#xff0c;包括code.exe在内的其他文件都被移动到了这个文件夹下。 将里面内容都移动到microsoft vs code文件夹下&#xff0c…

[权限提升] Linux 提权 维持 — 系统错误配置提权 - Sudo 滥用提权

关注这个专栏的其他相关笔记&#xff1a;[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01&#xff1a;Sudo 滥用提权原理 Sudo 是一个 Linux 系统管理命令&#xff0c;它允许系统管理员授予普通用户以指定身份执行指定命令的权限。该命令不仅减少了 Root 用户的登录时间和管理时…