- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
上下文:我有一些代码正在为特定 session 创建消息 session ,使用 ISessionClient.Task<IMessageSession> AcceptMessageSessionAsync(string sessionId, TimeSpan operationTimeout);
问题:AcceptMessageSessionAsync中的operationTimeout有什么作用?我尝试将其设置为一分钟,但一分钟后,什么也没有发生。这个超时是否只是设置了一个我需要自己检查的属性? SessionLockLostException 不应该被触发吗?
代码示例:
var session = await sessionClient.AcceptMessageSessionAsync(0, TimeSpan.FromMinutes(1));
var gotSession = true;
if (gotSession)
{
while (!session.IsClosedOrClosing)
{
try
{
Message message = await session.ReceiveAsync(TimeSpan.FromMinutes(2));
if (message != null)
{
await session.CompleteAsync(message.SystemProperties.LockToken);
}
else
{
await session.CloseAsync();
}
}
}
}
最佳答案
AcceptMessageSessionAsync 中的OperationTimeout 是调用应等待获取下一个 session 的时间。
您可以找到这里是 AcceptMessageSessionAsync 方法的完整实现
/// <summary>
/// Gets a particular session object identified by <paramref name="sessionId"/> that can be used to receive messages for that sessionId.
/// </summary>
/// <param name="sessionId">The sessionId present in all its messages.</param>
/// <param name="operationTimeout">Amount of time for which the call should wait to fetch the next session.</param>
/// <remarks>All plugins registered on <see cref="SessionClient"/> will be applied to each <see cref="MessageSession"/> that is accepted.
/// Individual sessions can further register additional plugins.</remarks>
public async Task<IMessageSession> AcceptMessageSessionAsync(string sessionId, TimeSpan operationTimeout)
{
this.ThrowIfClosed();
MessagingEventSource.Log.AmqpSessionClientAcceptMessageSessionStart(
this.ClientId,
this.EntityPath,
this.ReceiveMode,
this.PrefetchCount,
sessionId);
bool isDiagnosticSourceEnabled = ServiceBusDiagnosticSource.IsEnabled();
Activity activity = isDiagnosticSourceEnabled ? this.diagnosticSource.AcceptMessageSessionStart(sessionId) : null;
Task acceptMessageSessionTask = null;
var session = new MessageSession(
this.EntityPath,
this.EntityType,
this.ReceiveMode,
this.ServiceBusConnection,
this.CbsTokenProvider,
this.RetryPolicy,
this.PrefetchCount,
sessionId,
true);
try
{
acceptMessageSessionTask = this.RetryPolicy.RunOperation(
() => session.GetSessionReceiverLinkAsync(operationTimeout),
operationTimeout);
await acceptMessageSessionTask.ConfigureAwait(false);
}
catch (Exception exception)
{
if (isDiagnosticSourceEnabled)
{
this.diagnosticSource.ReportException(exception);
}
MessagingEventSource.Log.AmqpSessionClientAcceptMessageSessionException(
this.ClientId,
this.EntityPath,
exception);
await session.CloseAsync().ConfigureAwait(false);
throw AmqpExceptionHelper.GetClientException(exception);
}
finally
{
this.diagnosticSource.AcceptMessageSessionStop(activity, session.SessionId, acceptMessageSessionTask?.Status);
}
MessagingEventSource.Log.AmqpSessionClientAcceptMessageSessionStop(
this.ClientId,
this.EntityPath,
session.SessionIdInternal);
session.UpdateClientId(ClientEntity.GenerateClientId(nameof(MessageSession), $"{this.EntityPath}_{session.SessionId}"));
// Register plugins on the message session.
foreach (var serviceBusPlugin in this.RegisteredPlugins)
{
session.RegisterPlugin(serviceBusPlugin);
}
return session;
}
您可以在下面的链接中找到完整的示例
希望有帮助。
关于c# - ISessionClient.AcceptMessageSessionAsync 中的 operationTimeout 实际上是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54993186/
我正在使用服务总线辅助角色模板创建辅助角色。 我处理每条消息都要花费一分多钟的时间。 因此,我发现工作角色多次收到相同的消息,大约每分钟收到一条消息。 我认为这是因为该值默认为 60 秒。 http:
我看过关于如何转换为代理的引用资料,例如: ((IContextChannel)client.InnerChannel).OperationTimeout = new TimeSpan(0,0,240
上下文:我有一些代码正在为特定 session 创建消息 session ,使用 ISessionClient.Task AcceptMessageSessionAsync(string sessio
我正在努力设置 RoutingService 上的 OperationTimeout| 问题是消息转发到的服务需要超过 1 分钟的时间才能做出响应。这会导致 RoutingService 出现 Ope
我在 celery 任务中异步执行的每个插入查询(小查询)都有问题。在同步模式下,当我插入时一切都很好,但是当它在 apply_async() 中执行时,我得到这个: OperationTimedOu
经过相当多的搜索,我找不到这个问题的答案。 OperationTimeout 之间的确切区别是什么?和 SendTimeout ?我读到 OperationTimeout 是 SendTimeout
我似乎每隔 20 分钟 - 1 小时就会经历一次 Mongo::OperationTimeout我的堆栈: 导轨 3.1.3 Mongoid 3(git 边缘) unicorn 4.1.1 2 X M
我以前使用 CouchBase NodeJS SDK 2.6.10 并且设置 operationTimeout 是这样的: const couchbase = require('couchbase')
我是一名优秀的程序员,十分优秀!