9

我一直在处理来自 TopicClient 的大量超时,我认为这可能与对象生命周期和处置有关。

我正在使用TopicClient该类Microsoft.ServiceBus.Messaging并阅读此最佳实践指南状态

您不应在发送消息后关闭消息传递工厂或队列、主题和订阅客户端,然后在发送下一条消息时重新创建它们。关闭消息传递工厂会删除与服务总线服务的连接,并在重新创建工厂时建立新的连接。

这让我感到困惑 - 本文档没有具体提及,TopicClient但我假设它适用。也许这个假设是不正确的?

我可以将我的 TopicClient 存储在静态成员中以避免重新创建连接吗?有没有更好的方法来处理这个?我应该使用某种连接池机制吗?

4

2 回答 2

11

文档表明TopicClient的所有静态和实例成员都是线程安全的。

这种类型的任何公共静态(在 Visual Basic 中为 Shared)成员都是线程安全的。实例成员也保证是线程安全的。”

我阅读了您包含的报价,因为它确实包含 TopicClient,因为它说“队列、主题和订阅客户端”。我把它读作 QueueClient、TopicClient 和 SubscriptionClient。

对于消息传递子系统,我倾向于使用网关模式,它可用于处理与消息传递子系统一起工作所需的对象的生命周期。在您的情况下,网关对象将处理 TopicClient 或 MessageSender/Receivers 的生命周期。

我想问你是否见过更通用的MessageSenderMessageReceiver类?在发送时使用这些更通用的对象意味着执行发送的客户端代码不必知道它是发送到主题还是队列,它可以只发送到地址而不关心。

于 2013-04-03T01:28:20.143 回答
3

只是从 MS 中添加另一个确认这是线程安全的,来自使用 Service Bus Messaging 提高性能的最佳实践

您可以安全地使用 QueueClient 对象从并发异步操作和多个线程发送消息。

他们没有TopicClient明确提及,但希望 TopicClient 与QueueClient

于 2018-07-19T05:55:57.457 回答