【发布时间】:2018-12-31 15:25:31
【问题描述】:
我在一个需要管理有序消息的系统上工作,这会引发服务总线。在我的公司,我们在 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.");
}
}
谢谢。 问候。
【问题讨论】:
-
他们是使用相同的订阅还是每个实例的订阅?
-
在我的 POC 中他们使用相同的订阅,如果不是我想接收相同的消息是正常的,
标签: session azureservicebus azure-servicebus-topics