Google PubSubからメッセージを引き続き取得しています。メッセージを取得するのにかかる時間が約12〜15秒で、私たちの場合には受け入れられないことを除いて、すべてうまくいっています。以下の私のCallTimingの設定です:Google Pub Sub Message .Netクライアントで問題が発生する。
public CallSettings GetPullSetting()
{
CallTiming timing = CallTiming.FromRetry(new RetrySettings(
retryBackoff: new BackoffSettings(new TimeSpan(0, 0, 0, 0, 50), new TimeSpan(0, 0, 5), 1),
timeoutBackoff: new BackoffSettings(new TimeSpan(0, 0, 0, 18, 0), new TimeSpan(0, 0, 20), 1),
totalExpiration: Google.Api.Gax.Expiration.FromTimeout(TimeSpan.FromMilliseconds(600000))));
return CallSettings.FromCallTiming(timing);
}
私は最大3秒に、この待ち時間を短縮するために、組み合わせのすべての種類をしようとしています。
メッセージが正常に取得されるたびに、そしてメッセージがある場合はすぐにpull
の次の反復で、そのメッセージがすぐにフェッチされます。つまり、メッセージが連続して見つかった場合は、遅延が非常に小さいpull
です。
しかし問題は、pubsubにメッセージがないので、Deadline exceeded
例外が発生するということです。次に、次の反復のためにpubsubでメッセージをプッシュします。この時点では、多くの時間がかかります(13〜16秒)。だから、この問題を再現するための条件は、私がメッセージをプルしようとして失敗したということです。ここに貼り付け
コード:
public void PullTest()
{
var cont = true;
SubscriberSettings settings = new SubscriberSettings()
{
PullSettings = GetPullSetting()
};
SubscriberClient subscriberClient = SubscriberClient.Create(settings: settings);
var subscriberName = new SubscriptionName("project-name", "subscription-name");
while (cont)
{
try
{
PullResponse response = subscriberClient.Pull(subscriberName, returnImmediately: false, maxMessages: 1);
System.Diagnostics.Trace.WriteLine(">>>>>> " + DateTime.Now.ToString());
System.Diagnostics.Trace.WriteLine(">>>>>> " + "Job Recieved" + response.ReceivedMessages.ToList().FirstOrDefault());
subscriberClient.Acknowledge(subscriberName, new List<string>() { response.ReceivedMessages.ToList().FirstOrDefault().AckId });
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(">>>>>> " + DateTime.Now.ToString());
System.Diagnostics.Trace.WriteLine(">>>>>> " + ex.Message);
}
}
}
public CallSettings GetPullSetting()
{
CallTiming timing = CallTiming.FromRetry(new RetrySettings(
retryBackoff: new BackoffSettings(new TimeSpan(0, 0, 0, 0, 50), new TimeSpan(0, 0, 5), 1),
timeoutBackoff: new BackoffSettings(new TimeSpan(0, 0, 0, 18, 0), new TimeSpan(0, 0, 20), 1),
totalExpiration: Google.Api.Gax.Expiration.FromTimeout(TimeSpan.FromMilliseconds(600000))));
return CallSettings.FromCallTiming(timing);
}
この問題は.netクライアントでのみ発生しますか?私たちはJAVAで作られた同様のコンポーネントを持っており、うまく動作します。 – Savaratkar