C# 如何检查读卡器是否正在使用服务总线的MessageSession?
我的公司需要一种在客户和远程服务之间“同步”数据的方法。我目前正在审查服务总线以解决这一挑战。最重要的是同步必须以完全相同的顺序进行。因此,假设创建了一个实体ad->updated->updated->deleted,那么队列上的所有消息都将以相同的顺序执行是很重要的 队列中将有大约100个写入程序,每个写入程序将写入单独的会话,因此将有大约100个会话 我试图让多个读者阅读不同的课程 据我所知,当调用C# 如何检查读卡器是否正在使用服务总线的MessageSession?,c#,azure,queue,servicebus,azure-servicebus-queues,C#,Azure,Queue,Servicebus,Azure Servicebus Queues,我的公司需要一种在客户和远程服务之间“同步”数据的方法。我目前正在审查服务总线以解决这一挑战。最重要的是同步必须以完全相同的顺序进行。因此,假设创建了一个实体ad->updated->updated->deleted,那么队列上的所有消息都将以相同的顺序执行是很重要的 队列中将有大约100个写入程序,每个写入程序将写入单独的会话,因此将有大约100个会话 我试图让多个读者阅读不同的课程 据我所知,当调用AcceptMessageSession时,调用返回的会话将“锁定”到当前读卡器,这是我所期望
AcceptMessageSession
时,调用返回的会话将“锁定”到当前读卡器,这是我所期望的,但是当我调用GetMessageSessions
时,将返回锁定的会话。有没有办法让GetMessageSessions
只返回未锁定的会话
这是客户端代码
var client = QueueClient.CreateFromConnectionString(connectionString, ReceiveMode.ReceiveAndDelete);
Console.WriteLine("Reader Started");
while (true)
{
var lockId = Guid.NewGuid();
var sessions = client.GetMessageSessions();
foreach (var item in sessions)
{
StartSessionReading(client, item, lockId);
}
Thread.Sleep(50);
}
下面是一个方法,它实际上锁定会话并从中读取
public static void StartSessionReading(QueueClient client, MessageSession s, Guid lockId)
{
Task.Factory.StartNew(() =>
{
Console.WriteLine("started thread");
try
{
var session = client.AcceptMessageSession(s.SessionId, true);
var x = client.GetMessageSessions();
var message = session.Receive();
while (message != null)
{
printLine(message, session);
message = session.Receive(new TimeSpan(5));
}
}
catch (Exception e)
{
Console.WriteLine(e.InnerException.Message);
}
});
}