2013-04-09 4 views
4

Что нужно сделать, чтобы заставить InMemoryTransientMessageService работать в фоновом потоке? Я публикую вещи внутри службы, используяServiceStack: Как сделать InMemoryTransientMessageService запущенным в фоновом режиме

base.MessageProducer.Publish(new RequestDto()); 

и они незамедлительно проходят через запрос на обслуживание.

Проект является самостоятельным.

Вот быстрый тест, показывающий устройство блокировки текущего запроса вместо отложив его на задний план:

+0

Что сообщениям Provider вы используете? MSMQ. – Shashi

+0

InMemoryTransientMessageService в ServiceStack, это простая очередь в памяти. Таким образом, цель очереди - позволить абоненту подождать как можно меньше, а не гарантировать, что сообщение будет гарантировано на 100%. Если бы я этого хотел, я мог бы использовать Redis: https://github.com/ServiceStack/ServiceStack/wiki/Messaging-and-redis – mattias

ответ

1

Там нет ничего из коробки. Вам придется строить свои собственные. Взгляните на ServiceStack.Redis.Messaging.RedisMqHost - большинство из того, что вам нужно, есть, и это, вероятно, проще (один поток делает все), чтобы вы шли по сравнению с ServiceStack.Redis.Messaging.RedisMqServer (один поток для прослушивания в очереди, по одному для каждого рабочего). Я предлагаю вам взять этот класс и адаптировать его к вашим потребностям.

Несколько указателей:

  • ServiceStack.Message.InMemoryMessageQueueClient не реализует WaitForNotifyOnAny() так что вам потребуется альтернативный способ получения фонового потока ждать входящих сообщений.
  • Сложная связь, реализация ServiceStack.Redis использует подписки на темы, которые в этом классе используются для переноса WorkerStatus.StopCommand, что означает, что вам нужно найти альтернативный способ остановить фоновый поток.
  • Наконец, вы можете адаптировать ServiceStack.Redis.Messaging.RedisMessageProducer, поскольку его метод Publish() выталкивает запрошенное сообщение в очередь и толкает имя канала/очереди в очередь TopicIn. После прочтения кода вы можете увидеть, как три точки связаны друг с другом.

Надеется, что это помогает ...