我试图让 Polly 在 3 秒后超时以及返回某些 http 代码时再次尝试。但是,直到 100 秒后 HttpClient 超时后才会超时。
这是我的代码:
private static Polly.Wrap.AsyncPolicyWrap<HttpResponseMessage> GetPolicy()
{
var timeoutPolicy = Policy.TimeoutAsync(3, Polly.Timeout.TimeoutStrategy.Optimistic);
var retryPolicy = Policy
.Handle<HttpRequestException>()
.OrResult<HttpResponseMessage>(r =>
r.StatusCode == HttpStatusCode.TooManyRequests ||
r.StatusCode == HttpStatusCode.ServiceUnavailable ||
r.StatusCode == HttpStatusCode.Forbidden)
.WaitAndRetryAsync(3, i => TimeSpan.FromSeconds(3));
var policy = retryPolicy.WrapAsync(timeoutPolicy);
return policy;
}
Run Code Online (Sandbox Code Playgroud)
更新
根据要求,这是我使用该策略的代码。
var pollyResponse = await GetPolicy().ExecuteAndCaptureAsync(() =>
httpClient.SendAsync(GetMessage(HttpMethod.Delete, endpoint))
);
Run Code Online (Sandbox Code Playgroud)
以及生成 HttpRequestMessage 的辅助方法:
private HttpRequestMessage GetMessage<T>(HttpMethod method, string endpoint, T content)
{
var message = new HttpRequestMessage
{ …Run Code Online (Sandbox Code Playgroud) 几个月前,我想到了为我朋友的服务器制作一个功能性不和谐机器人的想法。我的朋友问我是否可以发出会员超时命令,所以我开始了我的研究。由于discord.py将不再更新,这个问题可能毫无用处并且浪费时间,但无论如何我真的很想尝试一下。我知道 Stack Overflow 是关于修改代码的,而不是代码编写服务,但我真的不知道应该如何做到这一点。
我的想法是在指定时间内为成员提供“静音”或“超时”角色,并在计时器停止后再次将其删除,但随后我应该使用 while 循环,导致其余代码不再可访问,使用该函数也是如此time.sleep。
我在互联网上找不到任何关于此的信息,所以我唯一的希望是 Stack Overflow。我不希望您在答案中编写整个程序,只是在我可能正在寻找的地方,以便我可以自己弄清楚其余的内容。
提前致谢!
我们的流程需要 30 秒到 5 分钟不等,具体取决于事件。我们的基本架构如下(python 3.9,boto3将send_message发送到sqs):
VPC和NAT网关已配置。
我们发现,尽管函数调用已提前成功完成,但后续消息始终以 10 分钟为间隔进行处理。我们打算更有效地管理时间,并尝试将消息可见性超时默认缩短为 1 分钟,并在函数 B 执行期间每 30 秒延长 1 分钟(我们使用 boto3 client.change_message_visibility)。看起来它不起作用 - 几乎所有消息最终都会进入我们的死信队列(CloudWatch 日志没有表明任何错误)。
我们的代码:
Globals:
Function:
Timeout: 30
Environment:
Variables:
SQS_QUEUE_URL: !Ref SqsQueue
Resources:
SqsQueue:
Type: AWS::SQS::Queue
Properties:
VisibilityTimeout: …Run Code Online (Sandbox Code Playgroud) 注册服务:
var host = new HostBuilder().ConfigureServices(services =>
{
services.AddHttpClient<Downloader>(client =>
{
client.Timeout = TimeSpan.FromSeconds(1); // -- T1
})
.AddPolicyHandler(HttpPolicyExtensions
.HandleTransientHttpError()
.Or<HttpRequestException>()
.WaitAndRetryAsync(Backoff.DecorrelatedJitterBackoffV2(
TimeSpan.FromSeconds(5), // -- T2
retryCount: 3)))
.AddPolicyHandler(Policy.TimeoutAsync<HttpResponseMessage>(10)) // -- T3
.AddPolicyHandler(HttpPolicyExtensions
.HandleTransientHttpError()
.CircuitBreakerAsync(5, TimeSpan.FromSeconds(30))); // -- T4
services.AddTransient<Downloader>();
}).Build();
Run Code Online (Sandbox Code Playgroud)
实施Downloader:
class Downloader
{
private HttpClient _client;
public Downloader(IHttpClientFactory factory)
{
_client = factory.CreateClient();
}
public void Download(List<Uri> links)
{
await Parallel.ForEachAsync(
links,
async (link, _cancelationToken) =>
{
await _client.GetStreamAsync(uri, _cancellationToken);
});
}
}
Run Code Online (Sandbox Code Playgroud)
在此伪代码中,我对超时之间的相关性以及如何/何时重新提交 HTTP 请求感到困惑。具体来说: …
当我尝试在 Eclipse 中运行默认的 JavaFX 代码时,窗口需要一段时间才能打开,并且出现以下错误:
com.sun.glass.ui.mac.MacApplication lambda$waitForReactivation$6 警告:等待应用程序重新激活时超时
它在我的 Windows PC 上运行良好,但我只在 Mac 上收到此错误。
直到我取消选中“运行配置”中的 -XstartOnFirstThread 参数后,该窗口才完全打开。但我仍然收到错误。
package application;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
BorderPane root = new BorderPane();
Scene scene = new Scene(root,100,100);
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
Run Code Online (Sandbox Code Playgroud) 当谈到实际决定会话超时的时候,我很困惑.
在登录(或抛出)用户之前,Web应用程序需要允许20分钟的"空闲时间".我在IIS中的sessionState和Recycle worker进程上尝试了不同的设置.超时仍然太短,就我的原始测试所显示的那样,有点随机.
我在某处读到默认超时是20分钟,但在我的应用程序中它似乎更接近五.有没有简单的方法来改变这个?该应用程序在IIS 6上运行.NET 3.5.
编辑:我刚刚意识到实体框架可能与问题有关,因为用户内容作为实体框架中的上下文保存.实体持有多长时间是否有时间限制?
我正在用PHP编写MSN客户端.这是我目前的代码:
$socket = fsockopen("messenger.hotmail.com", 1863);
echo '<b>Connected to 1st server.</b><br />';
//Send MSNP version
fputs($socket, "VER 0 MSNP10 CVR0\r\n");
echo fread($socket, 5000) . '<br />';
//Send user-agent
fputs($socket, "CVR 1 0x0409 php ".phpversion()." i386 MSNMSGR 7.0.0000 MSMSGS ".$_POST["username"]."\r\n");
echo fread($socket, 5000) . '<br />';
//Send username
fputs($socket, "USR 2 TWN I ".$_POST["username"]."\r\n");
//Read XFR
$xfr = fread($socket, 5000);
echo $xfr . '<br />';
$xfr = explode(" ", $xfr);
//Connect to second server
$server2 = explode(":", $xfr[3]);
$socket = fsockopen($server2[0], (int)$server2[1]); …Run Code Online (Sandbox Code Playgroud) 我已经设置了HttpWebRequest的 Timeout和ReadWriteTimeout ,并且在尝试连接到不存在的服务器时,GetRequestStream仍然没有超时.在DNS解析被攻击时,我遇到了类似的问题,但这次有问题的服务器在我自己的机器上运行(localhost),所以这不相关.
场景是这样的:
此时线程挂起.我尝试将KeepAlive设置为false,但这没有用.
我想在一个单独的线程中运行上面的场景,如果它需要太长时间自己杀死它 - 但是这个解决方案非常难看并且不会阻止资源泄漏.
SO用户,
我有3个线程在任何给定时间同时运行,麻烦是在线程1尝试通过传递用户名连接到服务器线程2被调用,并且当线程1转动时,服务器关闭它在代码上的连接.
我可以在任何地方实现同时发送用户名和密码,同时线程互相打断吗?
谢谢!,Nidhi
我从客户那里获得了一个包含500,000个用户更新的更新信息的大文本文件.但是,当我处理此文件时,我经常遇到SQL Server超时错误.
这是我在VB应用程序中遵循的处理数据的过程(通常):
DELETE * FROM tempTable)问题是我经常运行像UPDATE tempTable SET user_id = (SELECT user_id FROM myUsers WHERE external_id = tempTable.external_id这样的命令,这些命令经常超时.我已经尝试将时间超过10分钟,但它们仍然失败.现在,我意识到500k行是不容易操作的行数,但我认为据称能够处理数百万行的数据库应该能够很容易地处理500k.我是如何处理这些数据的?
请帮忙.任何和所有建议欢迎.
timeout ×10
c# ×3
.net ×2
polly ×2
.net-core ×1
amazon-sqs ×1
asp.net ×1
aws-lambda ×1
connection ×1
discord.py ×1
eclipse ×1
http ×1
iis ×1
iis-6 ×1
javafx ×1
msn ×1
php ×1
python ×1
retry-logic ×1