Я работаю над системой, в которой мне нужно управлять упорядоченными сообщениями, через служебную шину. В моей компании все работает в облаке Azure, и я использую служебную шину Azure для обмена сообщениями. Я читал о сеансе, и мне кажется, что он может решить мою проблему из коробки с помощью служебной шины Azure, но она работает только с одним экземпляром. Как только я масштабирую задание we до нескольких экземпляров, несколько экземпляров используют одни и те же сообщения из одного сеанса. В моем POC я использую тему с подпиской.
Может ли кто-нибудь заставить его работать с масштабированием до нескольких экземпляров приемника? Второй вариант, который у меня есть, - это реализовать самостоятельно корпоративный шаблон Resequencer. Есть ли у вас какие-либо предложения?
Вот код, который я использую для получения сообщений:
static async Task InitializeReceiver(string connectionString, string queueName, CancellationToken ct)
{
var receiverFactory = MessagingFactory.CreateFromConnectionString(connectionString);
ct.Register(() => receiverFactory.Close());
var client = receiverFactory.CreateSubscriptionClient(queueName, "parallel", ReceiveMode.ReceiveAndDelete);
client.RegisterSessionHandler(
typeof(SessionHandler),
new SessionHandlerOptions
{
AutoRenewTimeout = TimeSpan.FromMinutes(5),
MessageWaitTimeout = TimeSpan.FromSeconds(120),
MaxConcurrentSessions = 100,
AutoComplete = false
});
}
Вот код, который я использую для обработки:
public async Task OnMessageAsync(MessageSession session, BrokeredMessage message)
{
await ProcessMessage(session, message, currentInstanceId, recipeStep);
// If I process the last message of the session
if (message.Sequence == numberOfMsgPerSession)
{
// end of the session!
await session.CloseAsync();
logger.LogInformation($"Session with id {message.SessionId} is completed.");
}
}
Спасибо. С Уважением.