英文:
How to achieve guaranteed concurrency in service bus?
问题
我正在尝试在订阅服务总线的函数应用中实现一些确保的并发性。
为了实现这一目标,我已经在服务总线中实现了分区。
如果我的服务总线中的消息分发如下:
分区1 分区2 分区3
消息1 消息3 消息5
消息2 消息4 消息6
我期望我的函数应用调用顺序为:
消息1 --> 消息3 --> 消息5 --> 消息2 --> 消息4 --> 消息6
但实际情况并非如此。
我的 host.json
配置如下:
{
"version": "2.0",
"extensions": {
"serviceBus": {
"maxConcurrentCalls": 1
}
},
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": false,
"excludedTypes": "Request"
}
}
}
}
是否有任何方法可以实现这个目标?通过使用 sessionId 或事务吗?
英文:
I'm trying to achieve some guaranteed concurrency in function app which is subscribed to a service bus.
To achieve this, I've implemented partition in service bus.
If my message distribution in service bus is like this:
Partition1 Partition2 Partition3
message1 message3 mesaage5
message2 message4 message6
I expected my function app invocation serial to be :
message1 --> message3 -->message5 -->message2 -->message4-->message6
which is not happening.
My host.json
configuration is
{
"version": "2.0",
"extensions": {
"serviceBus": {
"maxConcurrentCalls": 1
}
},
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": false,
"excludedTypes": "Request"
}
}
}
}
Is there any way that I can achieve this? By using sessionId or transaction?
答案1
得分: 1
分区不是用于并发的。Azure Service Bus中的分区旨在确保在某些分区出现问题的情况下,不是所有消息都不可用,而是一些消息仍然可用。
您的配置中并发性设置为一。因此,您将从随机分区获取消息,逐个处理。如果您需要保证顺序,那将需要使用消息会话。事务处理适用于处理传入消息后生成的出站消息。
英文:
Partitioning is not intended for concurrency. Partitioning with Azure Service Bus is intended to ensure that in case some partitions are experiencing a problem, not all messages are not available but some.
Concurrency in your configuration is set to one. So you'll get messages from a random partition, processed one at a time. If you need a guaranteed order, that would be message sessions. Transactional processing is applicable for outgoing messages as a result of processing an incoming message.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论