gpt4 book ai didi

Azure 服务总线主题 : how enable concurrent readers?

转载 作者:行者123 更新时间:2023-12-03 04:41:59 25 4
gpt4 key购买 nike

背景

我正在使用 Azure 服务总线。在命名空间内,我有一个具有事件订阅的主题。我有一个生产者将消息推送到该主题,并且我有 n 个服务订阅相同订阅(出于可扩展性原因)。这些服务使用 PeekLock() 来获取消息,对其执行一些工作,然后在工作完成后通过 Complete() 释放消息锁。

问题

每当服务锁定消息时,似乎没有新服务能够从同一主题/订阅获取消息。似乎整个主题都被锁定,而不仅仅是本身锁定的消息。

实际的问题是,我的服务只是坐在那里什么都不做,只是等待具有事件 PeekLock() 的服务完成。

问题

  1. 有没有办法在主题(和订阅)或队列中启用并发读取器(或并发锁)?

  2. 我上面解释的(对我来说不受欢迎的)场景 - 是否是按接收顺序传递消息的某种保证的结果

代码片段:Csharp

public static void main(...) 
{
// configure the options
OnMessageOptions messageOptions = new OnMessageOptions();
messageOptions.AutoComplete = false;

// look for messages
serviceBusClient.OnMessage(msg => processMessage(msg, connectionKey), messageOptions);
}


private static void processMessage(BrokeredMessage msg, string connectionKey)
{
try
{
// do stuff to the message
//...

// for debugging: no new clients grab messages
// while this client has lock active. the sleep
// is to simulate heavy work load
Thread.Sleep(5000);

// release lock on message
msg.Complete();
}

catch (Exception e)
{
msg.Abandon();
}
}

最佳答案

你用Recieve()吗?或Receieve(Int64)接收消息的方法(或异步变体)?

您必须注意位于消息本身,而不是订阅/队列上。但是,如果您使用 Int64 的重载并给出如此大的数字 - 您将获得(锁定)所有消息,并且其他进程无事可做。

无法在 Azure 服务总线中锁定订阅。 limit of concurrent subscription receievers5000!

Here您可以阅读有关服务总线消息传递中的性能的更多信息。

下次您提问时,请附上代码片段,以便我们更好地理解您的问题!

关于Azure 服务总线主题 : how enable concurrent readers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43272425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com