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

用户名

我正在编写一些响应Azure Service Bus队列的功能。当前,这会在指定的队列上进行轮询,并且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事件,尽管实际上是从ServiceBusHelper类触发了OnMessage,但仍会触发新的worker(从class1内部)。

用户名

因此,我设法通过修改异步OnMessage对应项来使其正常工作。我相信根本原因与未将OnMessageOptions指定给OnMessage有关,或者与CompletedResetEvent没有按我的预期进行交互有关。

    public void Listen(QueueType queue, Action<BrokeredMessage> callback)
    {
            OnMessageOptions options = new OnMessageOptions
            {   
                MaxConcurrentCalls = maxConcurrent,
                AutoComplete = false
            };

            switch (queue)
            {
                case QueueType.Inbound:
                    inboundClient.OnMessageAsync(async message =>
                    {
                        bool shouldAbandon = false;
                        try
                        {
                            callback(message);

                            // complete if successful processing
                            await message.CompleteAsync();
                        }
                        catch (Exception ex)
                        {
                            shouldAbandon = true;
                            Debug.WriteLine(ex);
                        }

                        if (shouldAbandon)
                        {
                            await m.AbandonAsync();
                        }
                    }, options);
                    break;

                ...
            }
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Azure服务总线队列OnMessageOptions

Azure 服务总线队列分区队列 AutoRenewTimeout

如何关闭与Azure服务总线队列的连接?

如何增加Azure服务总线队列大小?

Azure服务总线队列计数

从ssis连接到azure服务总线队列

Azure服务总线队列大小达到最大

MassTransit在Azure服务总线上创建队列

Azure服务总线队列,主题和中继

无法连接到Azure服务总线队列

Azure服务总线-使用OnMessage()方法接收消息

Azure服务总线,确定OnMessage是否停止处理

Azure服务总线队列:如何从队列中读取单个消息

如何在 C# 中使用 .NET API 获取 Azure 服务总线的队列大小

Azure服务总线队列消息在Message.Abandon之后死信

没有队列或主题的Azure服务总线流量

MassTransit 不会更新现有 Azure 服务总线队列的设置

每个队列名称的Azure服务总线QueueClient吗?

Azure 服务总线队列自动删除,如 RabbitMQ

Azure服务总线队列,卡住的消息或错误的消息计数?

Azure服务总线-消息直接进入死信队列

尝试创建Azure服务总线队列时出现访问错误

集成测试连接到服务总线队列的Azure功能应用

从Azure功能推迟或放弃消息服务总线队列

服务总线队列触发 Azure Function 的“唤醒”时间

从 web api 向 azure 服务总线队列发送消息

无法从 Azure 函数向服务总线队列写入消息

Azure服务总线队列-当消息在队列中时,QueueClient.Receive()返回空的BrokeredMessage

Azure 服务总线 - 将消息从死信队列自动转发到另一个队列