首页 > 解决方案 > RabbitMQ/MassTrans 错误消息:Guid 应包含 32 位数字和 4 个破折号

问题描述

当我尝试将一个项目排入 rabbitmq 队列时,会返回一个 guid 解析异常。即使我删除了所有 guid 并用字符串替换它们(出于测试目的),也会出现相同的消息。

fail: MassTransit.Messages[0]
      S-FAULT rabbitmq://rabbitmq.rabbitmq/rs_2b94a1c9-b907-4ae6-af2b-507341cb12d9_default?bind=true fda80000-e461-fe4d-922f-08d7a2af25c9 sample.Cloud.aps.Api.Model.AddResourceRequest Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
fail: Microsoft.AspNetCore.SignalR.Internal.DefaultHubDispatcher[8]
      Failed to invoke hub method 'AddResourceAsync'.
System.FormatException: Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
   at System.Guid.GuidResult.SetFailure(Boolean overflow, String failureMessageID)
   at System.Guid.TryParseExactN(ReadOnlySpan`1 guidString, GuidResult& result)
   at System.Guid.TryParseGuid(ReadOnlySpan`1 guidString, GuidResult& result)
   at System.Guid.Parse(String input)
   at sample.Cloud.MessageBroker.MassTransitExtensions.<>c__DisplayClass1_1.<InitializeMassTransit>b__3(SendContext ctx)
   at GreenPipes.Filters.DelegateFilter`1.Send(TContext context, IPipe`1 next)
   at GreenPipes.Filters.SplitFilter`2.Send(TInput context, IPipe`1 next)
   at GreenPipes.Pipes.LastPipe`1.Send(TContext context)
   at MassTransit.Pipeline.Pipes.MessageSendPipe`1.GreenPipes.IPipe<MassTransit.SendContext<TOutput>>.Send(SendContext`1 context)
   at MassTransit.Pipeline.Pipes.SendPipe.MessagePipe`1.MassTransit.Pipeline.Pipes.SendPipe.IMessagePipe.Send[T](SendContext`1 context)
   at MassTransit.Pipeline.Pipes.SendPipe.MassTransit.Pipeline.ISendContextPipe.Send[T](SendContext`1 context)
   at MassTransit.Transports.SendEndpoint.EndpointSendContextPipe`1.Send(SendContext`1 context)
   at MassTransit.RabbitMqTransport.Transport.RabbitMqSendTransport.SendPipe`1.Send(ModelContext modelContext)
   at MassTransit.RabbitMqTransport.Transport.RabbitMqSendTransport.SendPipe`1.Send(ModelContext modelContext)
   at GreenPipes.Agents.PipeContextSupervisor`1.GreenPipes.IPipeContextSource<TContext>.Send(IPipe`1 pipe, CancellationToken cancellationToken)
   at GreenPipes.Agents.PipeContextSupervisor`1.GreenPipes.IPipeContextSource<TContext>.Send(IPipe`1 pipe, CancellationToken cancellationToken)
   at GreenPipes.Agents.PipeContextSupervisor`1.GreenPipes.IPipeContextSource<TContext>.Send(IPipe`1 pipe, CancellationToken cancellationToken)
   at sample.Cloud.aps.WebApi.Hubs.apsHub.AddResourceAsync(AddResourceRequest request) in /src/sample.Cloud.aps.WebApi/Hubs/apsHub.cs:line 90
   at Microsoft.AspNetCore.SignalR.Internal.DefaultHubDispatcher`1.ExecuteHubMethod(ObjectMethodExecutor methodExecutor, THub hub, Object[] arguments)
   at Microsoft.AspNetCore.SignalR.Internal.DefaultHubDispatcher`1.<>c__DisplayClass13_0.<<Invoke>g__ExecuteInvocation|0>d.MoveNext()
Received request

有什么可以做的,调试问题出在哪里?该错误不会出现在我的本地 rabbitmq 设置上,而是出现在 azure 实例上。

应查询的对象:

/// <summary>
/// Add resource request
/// </summary>
public class AddResourceRequest : BaseModel
{
    /// <summary>
    /// Gets or sets the resource id
    /// </summary>
    public string Id { get; set; }

    /// <summary>
    /// Gets or sets the resource type
    /// </summary>
    public ResourceType Type { get; set; }
}

发送数据的代码:

public async Task AddResourceAsync(AddResourceRequest request)
{
    Console.WriteLine("Add resource");

    var endpoint = await GetEndpointAsync(request);            
    await endpoint.Send(request);

    Console.WriteLine("...");
}

public async Task<ISendEndpoint> GetEndpointAsync(BaseModel model)
{
    return await messageBus.GetSendEndpoint(new Uri($"queue:rs_{model.OrganizationId}_{model.Name}".ToLower()));
}

标签: c#asp.net-corerabbitmqmessage-queuemasstransit

解决方案


推荐阅读