Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查读卡器是否正在使用服务总线的MessageSession?_C#_Azure_Queue_Servicebus_Azure Servicebus Queues - Fatal编程技术网

C# 如何检查读卡器是否正在使用服务总线的MessageSession?

C# 如何检查读卡器是否正在使用服务总线的MessageSession?,c#,azure,queue,servicebus,azure-servicebus-queues,C#,Azure,Queue,Servicebus,Azure Servicebus Queues,我的公司需要一种在客户和远程服务之间“同步”数据的方法。我目前正在审查服务总线以解决这一挑战。最重要的是同步必须以完全相同的顺序进行。因此,假设创建了一个实体ad->updated->updated->deleted,那么队列上的所有消息都将以相同的顺序执行是很重要的 队列中将有大约100个写入程序,每个写入程序将写入单独的会话,因此将有大约100个会话 我试图让多个读者阅读不同的课程 据我所知,当调用AcceptMessageSession时,调用返回的会话将“锁定”到当前读卡器,这是我所期望

我的公司需要一种在客户和远程服务之间“同步”数据的方法。我目前正在审查服务总线以解决这一挑战。最重要的是同步必须以完全相同的顺序进行。因此,假设创建了一个实体ad->updated->updated->deleted,那么队列上的所有消息都将以相同的顺序执行是很重要的

队列中将有大约100个写入程序,每个写入程序将写入单独的会话,因此将有大约100个会话

我试图让多个读者阅读不同的课程

据我所知,当调用
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);
        }
    });
}