【发布时间】:2022-10-07 22:00:36
【问题描述】:
我的服务总线主题有一个发布者和一个消费者。我的目标是让消费者按照发布者将消息发布到主题的顺序接收消息。这是我将消息发布到启用会话的主题的代码:
public void Publish<T>(T messageObject)
{
var jsonString = JsonSerializer.Serialize(messageObject);
var message = new ServiceBusMessage(jsonString)
{
SessionId = "12345"
};
message.ApplicationProperties["messageType"] = typeof(T).Name;
serviceBusSender.SendMessageAsync(message);
}
这是接收器的代码:
public async Task ReceiveWithSessionsAsync()
{
var options = new ServiceBusSessionProcessorOptions
{
ReceiveMode = ServiceBusReceiveMode.ReceiveAndDelete,
AutoCompleteMessages = true,
MaxConcurrentSessions = 1,
MaxConcurrentCallsPerSession = 1,
};
await using ServiceBusSessionProcessor processor = serviceBusClient.CreateSessionProcessor("my_topic", "my_subscription__session_enabled", options);
processor.ProcessMessageAsync += MessageHandler;
async Task MessageHandler(ProcessSessionMessageEventArgs args)
{
var body = args.Message.Body.ToString();
logger.LogInformation($"received body: {body}");
}
// start processing
await processor.StartProcessingAsync();
}
我给Publish打了几个电话,然后打电话给ReceiveWithSessionsAsync,但是,收到的消息顺序仍然与发送它们的顺序不同。
我在这里想念什么?
【问题讨论】:
-
没声音了你在公共回购中有复制品吗?
-
@SeanFeldman 给你:github.com/rezamanshouri/azure-service-bus
-
@SeanFeldman 奇怪的是,每次我运行应用程序时,对
publish-messages-with-session的调用都会导致以随机顺序接收消息。但是,在随后的调用中似乎保留了该顺序。我也看到了非会话订阅的确切行为。 -
出于好奇,如果您将
ServiceBusSessionProcessorOptions.SessionIds限制在您的硬编码会话中,那是否有效? -
@SeanFeldman 同样的事情,将
SessionIds = { "some_session_ID" }添加到ServiceBusSessionProcessorOptions,以及与我之前的评论相同的行为。
标签: c# azureservicebus azure-servicebus-topics