以事务方式向 Azure 服务总线发送 100 多条消息

Send 100+ messages transactionaly to Azure service Bus

如何在事务中向 Azure 服务总线发送超过 100 条中转消息?

我知道 TransactionScope 可以解决问题,但限制为 100 条消息。 而且我知道,如果我将消息作为批处理操作发送,消息的总大小将受到限制,这会导致批次被拆分成不同的批次,并且无法保证交易。而且我认为即使是批量发送,100 条消息的问题仍然存在。

有没有人找到解决方案?

尝试将多条 "logical" 消息放入一个代理消息中。当您的订阅者收到代理消息时,它可以处理每条逻辑消息,一次一条。

嗯,由于您无法使用服务总线传输所需的所有信息,因此您必须以其他方式传输。

将与交易相关的所有数据存储在另一个位置(Azure 存储?),然后发送 一条 包含数据文件位置的消息 - 该文件包含有关应该在一个事务中进行 10,000 个操作。

您的服务在其事务中将读取数据文件并执行操作。

当客户端通过 TCP 协议与服务总线队列通信时,与单个服务总线队列的最大并发连接数限制为 100。此数目由发送方和接收方共享。如果达到此配额,后续的额外连接请求将被拒绝,调用代码将收到异常。 This limit is not imposed on clients connecting to the queues using REST-based API.

A client application can access a REST-style service by using the WebHttpRelayBinding or by directly sending HTTP requests to the service endpoint.

Service Bus is a multi-protocol service: you can send and receive messages to or from the service using REST or .NET managed API, mixing and matching clients using different protocols in a given scenario.

如果在单个服务总线服务命名空间中需要超过 10,000 个队列,可以联系 Azure 支持团队并请求增加。要使用服务总线扩展超过 10,000 个队列,您还可以使用 Microsoft Azure 管理门户创建额外的服务命名空间。

Because they offer support for sessions、事务和 pub/sub 模型,服务总线队列是更复杂的消息传递场景的首选。但是,Azure 队列是支持需要高速和高吞吐量的体系结构以实现不同组件的基本解耦的绝佳选择。

From a developer’s point of view,服务总线队列和 Azure 队列之间的最大区别是使用不同的命名空间以及处理重复或中毒消息的方式。服务总线队列还通过使用 ACS 提供更灵活的安全机制。高级过滤、延迟消息和dead-letter队列等高级场景将在以后的文章中介绍。