使用 Polly 断路器处理多种服务的正确方法

2023-12-24

我有一个应用程序,我们可以在其中与数百个 HTTP 端点进行通信。该应用程序是某种代理。

在使用 polly 进行测试时,我注意到如果一个端点,比如说api.endpoint1.com失败,调用api.endpoint2.com and api.endpoint3.com也将处于打开/阻塞状态。

这是有道理的,因为我只定义了一个策略,但是处理这种情况的推荐方法是什么,以便对不相关端点的调用不会因为另一个端点出现性能问题而被阻止?

我是否创建一组策略,每个端点一个,或者是否有一种方法提供某种上下文键(即主机名)来将故障范围限制到给定的主机端点?

我已经评论过波莉的文档 https://github.com/App-vNext/Polly/wiki/Keys-And-Context-Data关于上下文键,看来这些是一种来回交换数据的方式,而不是我在这里寻找的。

var policy = Policy
            .Handle<TimeoutException>()
            .CircuitBreaker(1, TimeSpan.FromSeconds(1));
                
//dynamic, large list of endpoints. 
var m = new HttpRequestMessage(HttpMethod.Post, "https://api.endpoint1.com")
{
    Content = new StringContent("some JSON data here", Encoding.UTF8,"application/json")
};


policy.Execute(() => HTTPClientWrapper.PostAsync(message));

是的,最好的选择是为每个端点创建单独的策略。这比对每个主机执行此操作要好,因为端点可能由于特定于该端点的原因而响应缓慢(例如,存储过程很慢)。

我用过一个Dictionary<string, Policy>以端点 URL 作为键。

if (!_circuitBreakerPolices.ContainsKey(url))
{
    CircuitBreakerPolicy policy = Policy.Handle<Exception>().AdvancedCircuitBreakerAsync(
        onBreak: ...
    );
    _circuitBreakerPolicies.Add(url, policy);
}
await _circuitBreakerPolicies[url].ExecuteAsync(async () => ... );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Polly 断路器处理多种服务的正确方法 的相关文章

  • 关于逻辑/算法的想法以及如何防止线程写入 Sql Server 中的竞争

    我有以下逻辑 public void InQueueTable DataTable Table int incomingRows Table Rows Count if incomingRows gt RowsThreshold async
  • strlen() 编译时优化

    前几天我发现你可以找到编译时strlen使用这样的东西 template
  • Boost ASIO 串行写入十六进制值

    我正在使用 ubuntu 通过串行端口与设备进行通信 所有消息都必须是十六进制值 我已经在 Windows 环境中使用白蚁测试了通信设置 并得到了我期望的响应 但在使用 Boost asio 时我无法得到任何响应 以下是我设置串口的方法 b
  • 如何在 C# 中将 Json 转换为对象

    我想将 Json 转换为 C 中的对象 这里的 Json 是 值 e920ce0f e3f5 4c6f 8e3d d2fbc51990e4 如何使用 Object 问题看似愚蠢 但其实并不那么愚蠢 我没有简单的 Json 我有 IEnume
  • C# 中一次性对象克隆会导致内存泄漏吗?

    检查这个代码 class someclass IDisposable private Bitmap imageObject public void ImageCrop int X int Y int W int H imageObject
  • 混合模型优先和代码优先

    我们使用模型优先方法创建了一个 Web 应用程序 一名新开发人员进入该项目 并使用代码优先方法 使用数据库文件 创建了一个新的自定义模型 这 这是代码第一个数据库上下文 namespace WVITDB DAL public class D
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • C# 根据当前日期传递日期时间值

    我正在尝试根据 sql server 中的两个日期获取记录 Select from table where CreatedDate between StartDate and EndDate我通过了5 12 2010 and 5 12 20
  • OpenGL:如何检查用户是否支持glGenBuffers()?

    我检查了文档 它说 OpenGL 版本必须至少为 1 5 才能制作glGenBuffers 工作 用户使用的是1 5版本但是函数调用会导致崩溃 这是文档中的错误 还是用户的驱动程序问题 我正在用这个glGenBuffers 对于VBO 我如
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen
  • LinkLabel 无下划线 - Compact Framework

    我正在使用 Microsoft Compact Framework 开发 Windows CE 应用程序 我必须使用 LinkLabel 它必须是白色且没有下划线 因此 在设计器中 我将字体颜色修改为白色 并在字体对话框中取消选中 下划线
  • 对于 C# Express 用户来说,有哪些好的工具可以识别可能重复的代码? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 也可以看看 有什么工具可以检查重复的 VB NET 代码吗 https stackoverflow c
  • 读取依赖步行者输出

    I am having some problems using one of the Dlls in my application and I ran dependency walker on it i am not sure how to
  • Xamarin Forms Binding - 访问父属性

    我无法访问页面的 ViewModel 属性以便将其绑定到 IsVisible 属性 如果我不设置 BindingContext 我只能绑定它 有没有办法可以在设置 BindingContext 的同时访问页面的 viewmodel root
  • 如何在C#中控制datagridview光标移动

    我希望 datagridview 光标向右移动到下一列 而不是在向单元格输入数据后移动到下一行 我试图通过 dataGridView1 KeyDown 事件捕获键来控制光标 但这并不能阻止光标在将数据输入到单元格后移动到下一行 提前感谢你的
  • C:设置变量范围内所有位的最有效方法

    让我们来int举个例子 int SetBitWithinRange const unsigned from const unsigned to To be implemented SetBitWithinRange应该返回一个int其中所有
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • 声明一个负长度的数组

    当创建负长度数组时 C 中会发生什么 例如 int n 35 int testArray n for int i 0 i lt 10 i testArray i i 1 这段代码将编译 并且启用 Wall 时不会出现警告 并且似乎您可以分配
  • 如何在 C# 中获取 CMD/控制台编码

    我需要指定正确的代码页来使用 zip 库打包文件 正如我所见 我需要指定控制台编码 在我的例子中为 866 C Users User gt mode Status for device CON Lines 300 Columns 130 K
  • 如何在 ASP.NET Core 中注入泛型的依赖关系

    我有以下存储库类 public class TestRepository Repository

随机推荐

  • 全屏模式下的 JInternalFrame

    我打算在全屏模式下使用 JInternalFrame 作为模态 JDialog 但是 当前在调用它时并未显示它 我需要将其添加到某个容器中吗 我尝试将其添加到 JOptionPane showInternalMessage 但由于我想让对话
  • 即席查询、存储过程、动态 SQL [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • PHP - 简单 XML - 嵌套层次结构

    我一直在使用 PHP 的简单 XML 函数来处理 XML 文件 下面的代码适用于简单的 XML 层次结构 xml simplexml load file test xml echo xml gt getName br foreach xml
  • 从 pandas 数据框中减去两列并将结果存储在第三列中[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我有一个数据框 df 有 3 列 我想执行减法如下 df available df recommended df man
  • 使用 class.forname 但想要自动装配目标类的成员

    我有这个需求 我的框架的方式是从配置文件中以字符串形式读取类名 我想使用该类中的方法 显而易见的解决方案是使用反射 我已经使用了反射并能够调用我想要的方法 但问题是目标类内的变量没有自动装配 我知道我不会让 spring 通过使用反射来自动
  • 如何将 system() 调用结果的每一行写入 Vimscript 中的列表?

    我想使用 Vimscript 循环遍历目录中的文件 阅读usr 41 txt四处搜寻后 我能想到的最好的办法就是let dir contents system ls 但是由于system 没有返回列表 我无法循环它 有没有办法可以将系统调用
  • ActiveWorkbook.Connections("x").Refresh 完成时执行的代码

    从外部源选择数据我有一个数据连接 它使用select使用 vba 代码从 SQL 服务器查询到 Excel 工作表 如下所示 With ActiveWorkbook Connections x OLEDBConnection Backgro
  • Hadoop HDFS 中块的概念

    我对 Hadoop 中的块有一些疑问 我读到 Hadoop 使用 HDFS 来创建特定大小的块 第一个问题这些块是否物理存在于普通文件系统 如 NTFS 的硬盘上 即我们可以看到托管文件系统 NTFS 上的块还是只能使用 hadoop 命令
  • Perl 就地编辑:在 X12850 格式的文件中查找和替换

    我是 Perl 新手 无法弄清楚这一点 我有一个名为Test ISA 00 00 01 SupplyScan 01 NOVA 180815 0719 U 00204 000000255 0 P GS PO SupplyScan NOVA 2
  • 如何在 Android Studio 中删除代码格式中不必要的空白行

    是否可以在 Android Studio 中删除代码格式中不必要的空白行 Yes It is possible to configure the number of blank lines in the settings menu File
  • Oracle JET:淘汰赛未更新变量

    我有以下 oracle jet 和淘汰赛 html 文件
  • 以编程方式设置 type="file" 输入 HTML 元素的值? [复制]

    这个问题在这里已经有答案了 Note 下面的答案反映了 2009 年旧版浏览器的状态 现在 您实际上可以在 2017 年使用 JavaScript 动态 编程地设置文件输入元素的值 有关详细信息以及演示 请参阅此问题中的答案 如何以编程方式
  • 为自定义驱动程序创建 GraphicsDevice

    我正在开发一个在嵌入式系统中使用 Java 的项目 我有用于屏幕和触摸输入的驱动程序 以及用于文本输入的虚拟键盘 我的屏幕驱动程序有一个Graphics2D您可以绘制的对象和repaint Rectangle 更新方法 类似地 触摸驱动器能
  • 将所有函数保存在txt文件中

    我通常会运行大量模拟R 在模拟之间 R 的某些部分 代码会改变 通常情况下 我会站在旁边 模拟结果包含以下内容的 txt 文件 其中使用的每个函数的定义 模拟 为了制作该 txt 文件 我只需 运行这一行 for j in 1 length
  • 开始学习 JavaFX 之前需要了解什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我读到了 JavaFX 相对于 Swing 的优势 这不是讨论的重点 我想学习 JavaFX 但后来我对 JavaFX 脚本和 XML
  • Android Square Picasso 无法加载土耳其字符图像 url

    我尝试使用 square picasso 一个网络应用程序 但是如果我的图片网址包含土耳其字符 毕加索未加载 该网址正在运行 http www bulenttiras com wp content uploads 2014 02 kokhu
  • 虚拟类中的抽象方法

    我有一个 C 类 它有很多虚拟方法 其中一些方法本质上是抽象的 它们在子类中完全实现 基类是空的 为了让它编译 我在基类中抛出一个 InvalidOperationException 并注释应该做什么 这只是感觉很脏 有更好的方法来设计我的
  • Android,日文字符文件名比较问题

    我正在尝试将搜索字符串与文件名与 Android 上的递归目录搜索相匹配 问题是字符是日语 在某些情况下不匹配 例如 我尝试匹配文件名开头的搜索字符串是 呼 当我从 file getName 打印文件名时 这会准确反映 例如打印到控制台的文
  • Oracle中如何进行条件插入?

    我读了here http psoug org snippet INSERT WHEN 588 htm语法如下所示 INSERT WHEN Condition THEN INTO TableName ColumnName VALUES VAL
  • 使用 Polly 断路器处理多种服务的正确方法

    我有一个应用程序 我们可以在其中与数百个 HTTP 端点进行通信 该应用程序是某种代理 在使用 polly 进行测试时 我注意到如果一个端点 比如说api endpoint1 com失败 调用api endpoint2 com and ap