Почему тайм-аут RabbitMQ при публикации (биржа федерации используется)? - PullRequest
0 голосов
/ 08 января 2019

Для справочной информации, мы являемся розничной компанией с более чем 200 магазинами. Мы используем федерацию rabbitmq с 200+ серверами RabbitMQ (по одному серверу в каждом магазине). Каждый сервер RabbitMQ имеет 4 обмена. Таким образом, всего около 800 бирж.

Существует один центральный сервер, на котором публикуются сообщения. Это используется в качестве вышестоящего сервера для других 200 серверов. При изменении продукта на центральный сервер отправляется сообщение, которое будет пересылаться на другие серверы rabbitmq и обрабатываться локально в каждом магазине. Наше приложение работает на платформе .NET на серверах Windows (используя Masstransit для обработки RabbitMQ).

Иногда мы получаем ошибки тайм-аута при публикации событий в rabbitMQ. Это пример:

Properties  
message_id: f68a0000-15f3-0670-085b-08d66b92a0b1
delivery_mode:  2
headers:    
x-correlation-id:   18799970-fea8-431e-8608-d02496194a0a
Content-Type:   application/vnd.masstransit+json
publishId:  1
MT-Reason:  fault
MT-Fault-Message:   Publishing message of type MyCompany.Event.Message timed out after 5000 milliseconds.
MT-Fault-Timestamp: 2018-12-27T00:32:33.6076503Z
MT-Fault-StackTrace:    at MyCompany.ProductCommand.Listener.UpsertProductCommandListener.<PublishMessage>d__10`1.MoveNext() 
at MyCompany.ProductCommand.Listener.UpsertProductCommandListener.<PublishUpdatedEvents>d__8.MoveNext() 
at MyCompany.ProductCommand.Listener.UpsertProductCommandListener.<Consume>d__7.MoveNext() 
at MassTransit.AutofacIntegration.AutofacConsumerFactory`1.<Send>d__3`1.MoveNext() 
at MassTransit.Pipeline.Filters.ConsumerMessageFilter`2.<GreenPipes-IFilter<MassTransit-ConsumeContext<TMessage>>-Send>d__4.MoveNext() 
at MassTransit.Pipeline.Filters.ConsumerMessageFilter`2.<GreenPipes-IFilter<MassTransit-ConsumeContext<TMessage>>-Send>d__4.MoveNext() 
at GreenPipes.Filters.TeeFilter`1.<Send>d__5.MoveNext() 
at GreenPipes.Filters.OutputPipeFilter`2.<GreenPipes-IFilter<TInput>-Send>d__6.MoveNext() 
at GreenPipes.Filters.OutputPipeFilter`2.<GreenPipes-IFilter<TInput>-Send>d__6.MoveNext() 
at MassTransit.Pipeline.Filters.DeserializeFilter.<Send>d__4.MoveNext() 
at GreenPipes.Filters.RescueFilter`2.<GreenPipes-IFilter<TContext>-Send>d__5.MoveNext()
MT-Host-MachineName:    WIN-123456
MT-Host-ProcessName:    MyCompany.ProductCommandListener.WindowsService
MT-Host-ProcessId:  848
MT-Host-Assembly:   MyCompany.ProductCommandListener.WindowsService
MT-Host-AssemblyVersion:    1.0.0.0
MT-Host-MassTransitVersion: 3.5.4.992
MT-Host-FrameworkVersion:   4.0.30319.42000
MT-Host-OperatingSystemVersion: Microsoft Windows NT 6.2.9200.0
content_type:   application/vnd.masstransit+json

Каждое сообщение составляет около 5000 байтов. Мы хотели бы понять, как сообщение получило тайм-аут. Мы нашли это на сайте rabbitMQ относительно поведения ack:

For routable messages, the basic.ack is sent when a message has been accepted by all the queues. For persistent messages routed to durable queues, this means persisting to disk. For mirrored queues, this means that all mirrors have accepted the message. (https://www.rabbitmq.com/confirms.html#when-publishes-are-confirmed)

Однако мы не смогли найти какую-либо информацию, касающуюся публикации поведения подтверждения в федерации. Итак, наши вопросы

  1. В федерации обмена брокер отправляет подтверждение публикации, когда все нижестоящие серверы получают сообщение или когда вышестоящий сервер сохраняет сообщение на диск?
  2. Как устранить ошибку тайм-аута?

Любая помощь будет оценена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...