0

我有响应队列消息的 webjob 队列触发器,它工作正常。但是,有时我们会手动将消息推送到队列中,并且如果存在导致 DecoderFallBackException 的手动错误。但奇怪的行为是,看起来 webjob 不断尝试无限次,而我们的 AI 日志正在造成混乱。我尝试重新启动 webjob 以查看它是否清除了任何内部缓存但没有帮助。唯一有帮助的是删除队列

理想情况下,超出双端队列计数的任何异常都应将消息移动到毒队列。

4

1 回答 1

0

我试图在我这边重现您的问题,但效果很好。首先,我创建一个后端演示,在队列中插入可能导致 DecoderFallBackException 的无效字节消息

            Encoding ae = Encoding.GetEncoding(
              "us-ascii",
              new EncoderExceptionFallback(),
              new DecoderExceptionFallback());
            string inputString = "XYZ";
            byte[] encodedBytes = new byte[ae.GetByteCount(inputString)];
            ae.GetBytes(inputString, 0, inputString.Length,
                                       encodedBytes, 0);
            //make the byte invalid 
            encodedBytes[0] = 0xFF;
            encodedBytes[2] = 0xFF;

            CloudQueueMessage message = new CloudQueueMessage(encodedBytes);
            queue.AddMessage(message);

网络作业代码:

        public static void ProcessQueueMessage([QueueTrigger("queue")] string message, TextWriter log)
        {
            log.WriteLine(message);
        }

异常发生 5 次后,消息被移至“queue-poison”。这是预期的行为。在此处查看详细信息:

maxDequeueCount 5   The number of times to try processing a message before moving it to the poison queue.

您可以检查您是否不小心将“maxDequeueCount”设置为更大的值。如果没有,请提供您的网络作业代码以及您如何找到 DecoderFallBackException 以供我们调查。

于 2019-09-25T06:42:44.840 回答