我已经使用 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)
函数需要一个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"}
您可以考虑使用Azure存储队列SDK来代替队列触发功能。