在旧 NuGet中,保留MessagingFactory
实例是一种很好的做法。
我们是否应该保留ServiceBusConnection
的单个实例(来自 new Nuget)以注入到多个客户端中?
编辑2018-07-25 00:22:00 UTC + 8:
答案 0 :(得分:1)
Azure Service Bus .NET Standard客户端连接无法通过QueueClient
或任何工厂(如以前的工厂)进行管理。 QueueClient
是在MessageSender
和MessageReceiver
之上的抽象,可以采用多个发送者/接收者共享的ServiceBusConnection
。您可以选择共享还是不共享同一连接对象。
var connection = new ServiceBusConnection(connectionString);
var queueClient1 = new QueueClient(connection, "queue1", ReceiveMode.PeekLock, RetryPolicy.Default);
var queueClient2 = new QueueClient(connection, "queue2", ReceiveMode.PeekLock, RetryPolicy.Default);
// Queue clients share the same connection
var message1 = new Message(Encoding.UTF8.GetBytes("Message1"));
var message2 = new Message(Encoding.UTF8.GetBytes("Message2"));
根据您使用的名称空间层,您必须进行基准测试,看看哪种方法更适合您。我的发现表明,标准层具有多个连接有助于提高吞吐量,而高级层则不能。 This post暗示了这样做的原因。
答案 1 :(得分:0)
不一定是所有人。
正确的粮食水平是消息传递工厂。您可以连接到应用程序中的多个名称空间,每个名称空间都需要自己的MessageFactory和连接。
或者,您的代码本质上不是很异步,因此在这种情况下,多个连接(工厂)才有意义。例如,您的代码中有两个过程,一个过程在循环中做很多工作来发送消息,另一个过程接收消息,在这种情况下,两个工厂可能有用,或者您可以重构以使代码更加异步。
建议您不要关闭消息传递工厂或排队, 主题和订阅客户端发送消息后,然后 在发送下一条消息时重新创建它们。关闭消息 工厂删除与服务总线服务的连接。
简而言之,您应该重新使用您的消息工厂,这些消息工厂随后将保持与服务总线的连接。根据代码的编写方式,您可能需要多个工厂。