Что использовать для обмена сообщениями с C#

Итак, моя компания хранит много данных в базе данных foxpro, и, пытаясь обойти снижение производительности при непосредственном прикосновении к ней, я думал об обмене сообщениями обо всем, что можно сделать асинхронно для более быстрого взаимодействия с пользователем. Я начал смотреть на ActiveMQ, но не знаю, насколько хорошо C# с этим справится. Хотел бы услышать, что вы все думаете, ребята.

изменить: это будет веб-приложение. Все, что касается этого foxpro, происходит довольно медленно (вероятно, потому, что человек, который установил его 10 лет назад, все испортил, некоторые файлы таблиц невероятно большие). Мы реплицируем foxpro на sql каждую ночь, и большая часть наших данных читается в течение дня, поэтому мы сосредотачиваемся на записи. Кроме того, запись влияет на важную часть взаимодействия с пользователем (покупка), мы сохраняем ее в sql, а затем просто отправляем сообщение, чтобы поместить ее в foxpro, когда это возможно. Я хотел бы просто избавиться от foxpro, к сожалению, компания не хочет избавляться от очень старого программного обеспечения, которое они купили, которое зависит от него.

Ответов (7)

Решение

ActiveMQ хорошо работает с C# с использованием интеграции Spring.NET и NMS. Сообщение с некоторыми ссылками, которые помогут вам начать работу в этом направлении, находится здесь . Также рассмотрите возможность использования MSMQ (пространство имен System.Messaging) или решения для асинхронного обмена сообщениями на основе .NET с некоторыми вариантами здесь .

Извините, если это не то, о чем вы просите ... Рассматривали ли вы за кулисами какой-то кеш, который действует немного как "система ведра" при использовании асинхронных сокетов в c / c ++ с использованием winsock? По сути, он работает, принимая запросы и отправляя немедленный ответ обратно в веб-приложение, а когда он, наконец, находит вашу запись, он обновляет ее в приложении через AJAX или любую другую технологию по вашему выбору. Поскольку я не программист на C#, я не могу привести конкретного примера. Надеюсь это поможет!

Использует ли приложение Fox индексы .CDX? Если это так, вы можете повысить производительность, добавив индексы без необходимости изменять какой-либо программный код. Однако, если он использует индексы .IDX, изменение должно быть выполнено в реальном приложении.

Стоит упомянуть, что проект с открытым исходным кодом ActiveMQ определяет C# API для обмена сообщениями под названием NMS, который позволяет вам разрабатывать на основе одного C# / .Net API, который затем может использовать различные серверные интерфейсы обмена сообщениями, такие как

  • ActiveMQ
  • MSMQ
  • EMS TibCo
  • любой поставщик STOMP
  • любой JMS-провайдер через StompConnect

Поскольку проблема связана с записью, я бы больше обратил внимание на> удаление <любых ненужных индексов в таблицах. Как это часто бывает в РСУБД, каждый индекс в таблице FoxPro замедляет операцию записи, поскольку индексы необходимо обновить, и, поскольку вы не читаете напрямую (или, предположительно, напрямую не запрашиваете) таблицу, вам не нужно очень много индексов. . Вы также можете проверить любые триггеры или правила полей в таблицах, поскольку они могут замедлять операцию записи. Однако убедитесь, что ваша ссылочная целостность сохраняется.

MSMQ (очередь сообщений Microsoft) может быть отличным выбором. Он является частью ОС и представлен как дополнительный компонент (может быть установлен с помощью «Установка и удаление программ» / «Компоненты Windows»), что означает, что он бесплатный (если, конечно, вы уже заплатили за Windows). MSMQ предоставляет API-интерфейсы Win32 / COM и System.Messaging . Более современные каналы с очередями Windows Communication Foundation (также известные как Indigo) также используют MSMQ. Обратите внимание, что MSMQ не поддерживается в домашних SKU Windows (XP Home и Vista Home).

Вы можете посмотреть MSMQ. Его можно использовать в .NET и VFP, но для их использования вам нужно будет переписать. Вот статья, в которой рассказывается, как использовать MSMQ из VFP. https://docs.microsoft.com/en-us/previous-versions/visualstudio/foxpro/ms917361(v=msdn.10)