使用 Rebus 迁移到隔离的工作线程 .NET 8

问题描述 投票:0回答:1

我已经使用 Rebus 将我的功能项目迁移到了独立的工作线程。我使用

TransportMessage
作为绑定的一部分,但它似乎无法正常工作?消息总是被发送到有害队列。

消息已达到 MaxDequeueCount 5。将消息移动到队列“myqueue-poison”

有人可以帮忙吗? rebus 与孤立的worker 不兼容吗?

[Function( nameof(MyClient))]
public async Task QueueStart(
        [QueueTrigger( Constants.MyQueueName )]
        TransportMessage rebusMessage,
        [DurableClient] DurableTaskClient starter)
{
    string messageBody = Encoding.UTF8.GetString( rebusMessage.Body );
    var message = JsonConvert.DeserializeObject<MyQueueMessage>( messageBody );

    // additional logic here
}

我更新了我的 Rebus 软件包版本:

<PackageVersion Include="Rebus" Version="8.7.1" />
<PackageVersion Include="Rebus.AzureQueues" Version="4.0.0" />
<PackageVersion Include="Rebus.ServiceProvider" Version="10.3.0" />

我使用 Azure 存储,这就是我注册它的方式:

services.AddRebus(configure => configure
        .Transport(t => 
            t.UseAzureStorageQueuesAsOneWayClient( storageConnectionString, new AzureStorageQueuesTransportOptions
        {
            AutomaticallyCreateQueues = true
        }))
        .Serialization(s => s.UseNewtonsoftJson())
        .Routing(r =>
            r.TypeBased()
                .Map<MyQueueMessage>(Constants.MyQueueName)  
azure-functions message-queue rebus azure-functions-isolated
1个回答
0
投票
  • Azure 函数要求隔离函数和进程内函数的输入消息均采用 Base64 格式。

函数需要一个base64编码的字符串。对编码类型的任何调整(为了将数据准备为 base64 编码字符串)都需要在调用服务中实现。

  • 如果消息不是base64格式,那么您将收到消息已达到MaxDequeueCount of 5。将消息移动到队列“myqueue-items-poison”。警告,消息将被愚弄到毒队列。

  • 使用Rebus向Azure存储队列发送消息时,只有正文是base64格式,但自动添加的标头是JSON格式。

以下是Rebus发送到存储队列的消息格式。

{"Headers":{"rbs2-intent":"p2p","rbs2-msg-id":"1fd29174-0ede-46cc-8f6a-6d3152743630","rbs2-senttime":"2024-12-27T16:49:03.6288896\u002B05:30","rbs2-msg-type":"_79311394.MyQueueMessage, 79311394","rbs2-corr-id":"1fd29174-0ede-46cc-8f6a-6d3152743630","rbs2-corr-seq":"0","rbs2-content-type":"application/json;charset=utf-8"},"Body":"eyIkdHlwZSI6Il83OTMxMTM5NC5NeVF1ZXVlTWVzc2FnZSwgNzkzMTEzOTQiLCJNZXNzYWdlQ29udGVudCI6IkhlbGxvLCBSZWJ1cyEiLCJNZXNzYWdlSWQiOjF9"}
  • 因此,由于格式不正确,消息正在移动到有害队列,并且包括标头在内的整个消息被视为存储队列中的消息正文,如下所示。

enter image description here

您可以考虑使用Azure存储队列SDK来代替队列触发功能。

© www.soinside.com 2019 - 2024. All rights reserved.