MassTransit и RabbitMQ работают локально, но в продакшене сообщения пропускаются - PullRequest
0 голосов
/ 14 июля 2020

У меня есть служба электронной почты EnduroMailer, установленная как служба Windows на нашем производственном компьютере. EnduroMailer связывается с RabbitMQ через MassTransit, чтобы забрать любые электронные письма, ожидающие в очереди, и отправляет их.

Мой код для отправки запроса RabbitMQ выглядит следующим образом:

public class EmailService : IEmailService
{
    private readonly ISendEndpointProvider _endpointProvider;

    public EmailService(ISendEndpointProvider endpointProvider)
    {
        _endpointProvider = endpointProvider;
    }

    public async Task SendEmail(string recipient, string from, string subject, string body,
        CancellationToken cancellationToken = default)
    {
        var endpoint = await _endpointProvider.GetSendEndpoint(new Uri("queue:send-email"));
        var request = new
        {
            From = from,
            Recipient = recipient,
            Subject = subject,
            Body = body
        };
        
        await endpoint.Send<ISendEmail>(request, cancellationToken);
    }
}

И потребитель в EnduroMailer выглядит так:

public async Task Consume(ConsumeContext<ISendEmail> context)
{
    _logger.LogInformation("Request received.");
    
    using var message = new MailMessage
    {
        From = new MailAddress(context.Message.From),
        Body = context.Message.Body,
        Subject = context.Message.Subject,
        IsBodyHtml = true
    };
    message.To.Add(context.Message.Recipient);
    
    await _client.SendMailAsync(message);
    await context.RespondAsync<IEmailSent>(new {context.Message.Recipient});
}

Когда я запускаю автономную почтовую службу на моем локальном компьютере, она забирает все ожидающие письма из очереди и начинает их отправлять. Однако, когда я размещаю его как службу windows, сообщения помещаются в очередь send-email_skipped. Одно из этих сообщений выглядит так:

message_id: 1d010000-5d03-0015-e776-08d82827f7d4
delivery_mode:  2
headers:    
Content-Type:   application/vnd.masstransit+json
MT-Activity-Id: |4988b6ad-4641fe692ecfa3d7.1.
MT-Host-Assembly:   EnduroMail
MT-Host-AssemblyVersion:    1.0.0.0
MT-Host-FrameworkVersion:   3.1.1
MT-Host-MachineName:    HERMES
MT-Host-MassTransitVersion: 6.3.2.0
MT-Host-OperatingSystemVersion: Microsoft Windows NT 6.2.9200.0
MT-Host-ProcessId:  4576
MT-Host-ProcessName:    EnduroMail
MT-Reason:  dead-letter
publishId:  2
content_type:   application/vnd.masstransit+json

{
  "messageId": "1d010000-5d03-0015-e776-08d82827f7d4",
  "conversationId": "1d010000-5d03-0015-7c48-08d82827f7da",
  "sourceAddress": "rabbitmq://192.168.250.194/HERMES_w3wp_bus_dwyoyyn7ycybkscrbdcnojqq8p?temporary=true",
  "destinationAddress": "rabbitmq://192.168.250.194/send-email?bind=true",
  "messageType": [
    "urn:message:Enduro.Common.Messages.Requests:ISendEmail"
  ],
  "message": {
    "from": "REDACTED",
    "recipient": "REDACTED",
    "subject": "REDACTED",
    "body": "REDACTED"
  },
  "sentTime": "2020-07-14T18:58:59.9686006Z",
  "headers": {
    "MT-Activity-Id": "|4988b6ad-4641fe692ecfa3d7.1."
  },
  "host": {
    "machineName": "HERMES",
    "processName": "w3wp",
    "processId": 1636,
    "assembly": "PigTrack.Presentation",
    "assemblyVersion": "1.0.0.0",
    "frameworkVersion": "3.1.1",
    "massTransitVersion": "6.3.2.0",
    "operatingSystemVersion": "Microsoft Windows NT 10.0.14393.0"
  }
}

Что могло вызвать такое поведение?

...