将 QueueClient.Create 转换为 MessagingFactory.CreateQueueClient

Convert QueueClient.Create to MessagingFactory.CreateQueueClient

尝试将使用 .net 库的实现从使用 QueueClient.Create 转换为 MessagingFactory.CreateQueueClient 以便能够更好地控制 BatchFlushInterval 以及允许在多个连接上使用多个工厂增加发送吞吐量,但 运行 成为障碍。

现在我们正在创建 QueueClients(它们在整个应用程序中维护),如下所示:

QueueClient.CreateFromConnectionString(address, queueName, ReceiveMode.PeekLock); // address is the connection string from the azure portal in the form of Endpoint=sb....

尝试将其更改为在将用于创建 QueueClient 的 class 构造函数中创建 MessagingFactory:

messagingFactory = MessagingFactory.Create(address.Replace("Endpoint=",""),mfs);
// later on in another part of the class
messagingFactory.CreateQueueClient(queueName, ReceiveMode.PeekLock);
// error Endpoint not found.,

这会抛出错误 Endpoint not found。如果我不替换 Endpoint=,它甚至不会创建 MessagingFactory。处理这个问题的正确方法是什么?

备注:

顺便说一句,我们有一个进程试图将尽可能多的消息推送到队列中,让其他人阅读它。读者似乎很容易跟上发件人的步伐,我正在努力最大化发送率。

该地址是您要连接的命名空间(sb://yournamespace.servicebus.windows.net/) 的基地址。更多信息,请参考MessagingFactory。以下是演示代码:

 var Address = "sb://yournamespace.servicebus.windows.net/"; //base address of namespace you are connecting to.
 MessagingFactorySettings MsgFactorySettings = new MessagingFactorySettings
            {
                NetMessagingTransportSettings = new NetMessagingTransportSettings
                {
                    BatchFlushInterval = TimeSpan.FromSeconds(2)
                },
                TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider("RootManageSharedAccessKey", "balabala..."),
                OperationTimeout = TimeSpan.FromSeconds(30)
            }; //specify operating timeout (optional)
 MessagingFactory messagingFactory = MessagingFactory.Create(Address, MsgFactorySettings);
 var queue =  messagingFactory.CreateQueueClient("queueName",ReceiveMode.PeekLock);
 var message = queue.Receive(TimeSpan.Zero);