我的公司需要一种方法来同步"我们的客户和远程服务之间的数据。我目前正在审查服务总线以解决这一挑战。最重要的部分是同步必须以完全相同的顺序发生。所以我们假设一个实体是createad - >更新 - >更新 - >删除然后重要的是队列中的所有消息将以相同的顺序执行。
队列中将有大约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);
}
});
}