没有接收器外观的事务性消息 - 会话偷看

时间:2015-10-13 03:56:11

标签: c# asp.net azure servicebus

我有一个分布式服务,需要10秒到10分钟才能处理消息。该服务从用户(==浏览器)请求开始,该请求通过API接收。由于各种限制,服务的结果必须在初始请求之外返回(超时,丢弃客户端连接......)因此,我将SessionId返回给请求用户,该用户可以使用它来检索结果,直到它到期为止。

现在,当会话仍处于锁定状态时,用户会对结果发出多个连续请求。例如,以下代码在60秒内被相同的SessionId命中:

var session = await responseQueue.AcceptMessageSessionAsync(sessionId);
var response = await session.ReceiveAsync(TimeSpan.FromSeconds(60));
if (response == null)
{
    session.Abort();
    return null;
}
await response.AbandonAsync();

我需要的是一个没有锁定的设置,能够多次读取消息,直到它过期,再加上等待但不存在的消息的能力。

哪种ServiceBus解决方案符合该法案?

更新

这是一个肮脏的解决方案,仍在寻找更好的方法:

MessageSession session = null;

try
{
    session = await responseQueue.AcceptMessageSessionAsync(sessionId);
}
catch
{
    // ... and client has to try again until the 60 sec lock from other requests is released
}

var response = await session.ReceiveAsync(TimeSpan.FromSeconds(60));
// ...

0 个答案:

没有答案