gpt4 book ai didi

azure - 如何使用一名工作人员从多个队列读取 Azure 服务总线消息

转载 作者:行者123 更新时间:2023-12-03 03:10:42 28 4
gpt4 key购买 nike

我有三个队列和一个工作人员,我想监控这三个队列(或仅其中两个)

一个队列是 qPirate一个队列是 qShips一个队列是 qPassengers

这个想法是,工作人员要么查看全部 3 个、其中 2 个,要么查看其中一个,并根据消息内容执行不同的操作。

关键是,如果消息失败,因为 Ship1 离线,qships 中的所有队列都将刷新,正在查看该消息的工作人员和其他队列将稍微挂起,因为他们将尝试处理消息该队列只稍微查看其他队列,而查看其他 2 个队列并跳过 qship 的其他工作人员将继续处理消息,而不会造成阻塞或延迟。

    public static void GotMessage([ServiceBusTrigger("%LookAtAllQueuesintheservicebus%")] BrokeredMessage message)
{
var handler = new MessageHandler();

var manager = new MessageManager(
handler,
"PirateShips"
);

manager.ProcessMessageViaHandler(message);
}

在网上查了一下,我猜这不可能,但似乎是可能的?不管怎样,提前致谢!

编辑1:我还将添加作业主持人,以尝试澄清一些事情

        JobHostConfiguration config = new JobHostConfiguration()
{
DashboardConnectionString = "DefaultEndpointsProtocol=https;AccountName=PiratesAreUs;AccountKey=Yarr",
StorageConnectionString = "DefaultEndpointsProtocol=https;AccountName=PiratesAreUs;AccountKey=Yarr",
NameResolver = new QueueNameResolver()
};

ServiceBusConfiguration serviceBusConfig = new ServiceBusConfiguration()
{
ConnectionString = "Endpoint=AllPirateQueuesLocatedHere;SharedAccessKeyName=PiratesAreUs;SharedAccessKey=Yarr"
};

serviceBusConfig.MessageOptions.AutoComplete = false;
serviceBusConfig.MessageOptions.AutoRenewTimeout = TimeSpan.FromMinutes(1);
serviceBusConfig.MessageOptions.MaxConcurrentCalls = 1;

config.UseServiceBus(serviceBusConfig);


JobHost host = new JobHost(config);

host.RunAndBlock();

QueueNameResolverClass 也很简单

    public class QueueNameResolver : INameResolver
{
public string Resolve(string name)
{
return name;
}
}

我似乎没有让 NameResolver 成为多个队列,虽然我可以说我希望作业主机查看某个 ServiceBus,但我不知道如何告诉它查看所有队列在服务总线内。

换句话说,我想在这个worker上有多个servicebustrigger,这样如果消息被发送到qpirate1和qships1(它们都位于服务总线AllPirateQueuesHere中),worker就可以在qpirate1中拾取消息,处理它,然后拾取qships1中的消息并处理它。

最佳答案

找出答案...这是可能的,而且比我想象的要简单,我不确定为什么我没有将这些点连接起来,但我仍然很好奇为什么没有更多关于此的文档。显然,它只是为每个队列创建一个函数,您希望工作人员查看多个队列。因此,如果您有三个队列,您会需要如下所示的内容(您可以以不同的方式处理每个消息)。

  public static void GotMessage1([ServiceBusTrigger("%qPirate1%")] BrokeredMessage message)
{
var handler = new MessageHandler();

var manager = new MessageManager(
handler,
"Pirates"
);

manager.ProcessMessageViaHandler(message);
}

public static void GotMessage2([ServiceBusTrigger("%qShip1%")] BrokeredMessage message)
{
var handler = new MessageHandler();

var manager = new MessageManager(
handler,
"Ships"
);

manager.ProcessMessageViaHandler(message);
}

public static void GotBooty([ServiceBusTrigger("%qBooty%")] BrokeredMessage message)
{
var handler = new MessageHandler();

var manager = new MessageManager(
handler,
"Booty"
);

manager.ProcessMessageViaHandler(message);
}

关于azure - 如何使用一名工作人员从多个队列读取 Azure 服务总线消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38402407/

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