gpt4 book ai didi

C# Azure 服务总线队列 OnMessage 回调

转载 作者:太空宇宙 更新时间:2023-11-03 15:03:13 24 4
gpt4 key购买 nike

我正在编写一些响应 Azure 服务总线队列的功能。当前,它会轮询指定的队列,并且 OnMessage 会触发对调用它的原始类中的方法的回调:

    partial class Class1
{
private void BeginProcessing()
{
serviceBusHelper.Listen(QueueType.Inbound, HandleTransaction);
}
private bool HandleTransaction(BrokeredMessage message)
{
...
}
}

然后是服务总线助手类:

public class ServiceBusHelper : IServiceBusHelper
{
ManualResetEvent CompletedResetEvent = new ManualResetEvent(false);

public void Listen(QueueType queue, Action<BrokeredMessage> callback)
{

switch (queue)
{
case QueueType.Inbound:
inboundClient.OnMessage(message =>
{
try
{
callback(message);
}
catch (Exception ex)
{
...
}
CompletedResetEvent.WaitOne();
});
break;
...
}
}

它正在正确连接到 azure 服务总线队列并检索消息,但是回调似乎从未真正触发。我想要实现的是一个服务,它将持续响应 OnMessage 事件,触发一个新的工作线程(从 class1 内),尽管 OnMessage 实际上是从 ServiceBusHelper 类触发的。

最佳答案

the callback never seems to actually trigger.

为了重现该问题,我在控制台应用程序中使用以下代码进行了测试,效果很好。

public static void processmessage()
{
string connectionString = "{connectionstring here}";

var queueName = "{queue name}";

var client = QueueClient.CreateFromConnectionString(connectionString, queueName);
var options = new OnMessageOptions();
options.AutoComplete = false;

try
{
client.OnMessage(message =>
{
HandleTransaction(message);
}, options);
}
catch (Exception)
{

}
}

private static void HandleTransaction(BrokeredMessage message)
{
Console.WriteLine(String.Format("Message body: {0}", message.GetBody<String>()));
}

如果可能的话,您可以尝试将private bool HandleTransaction(BrokeredMessage message)修改为make it return void private void HandleTransaction(BrokeredMessage message),并检查是否正常工作。

关于C# Azure 服务总线队列 OnMessage 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45052756/

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