Передача данных между C# и Java-приложениями
У меня есть API в C# .Net для загрузки файлов, размер которых варьируется от 10 B до 100 КБ. В секунду система получает около 5 таких звонков. Теперь я хочу передать этот файл процессу JAVA (поскольку он является производителем Kafka, и мы хотим, чтобы он основывался на JVM, а C# API является устаревшим). Оба собираются проживать на одной машине почти всегда. Каков наилучший способ сделать это?
Я читал о jni4net, IKVM для взаимодействия с Java из C#. Будут ли они лучше, или я должен сделать это на основе сокетов (Web API в Java принимает файлы), или я должен читать из локальной файловой системы, куда загружено приложение C#, или любой другой вариант, который мне не хватает?
3 ответа
В среде с высоким параллелизмом чтение из локальной файловой системы может быть не очень хорошей идеей.
Вы можете использовать файлы с отображением в памяти, которые поддерживает Java с FileChannel.
В зависимости от операционной системы, вы также можете использовать именованные каналы для IPC, вот статья, показывающая, как использовать каналы между.Net и Java:
http://v01ver-howto.blogspot.com/2010/04/howto-use-named-pipes-to-communicate.html
Все варианты рассмотрены, я бы пошел с розетками. Они портативны и просты в исполнении и, скорее всего, будут соответствовать вашим требованиям к производительности.
Вы также можете использовать очередь сообщений. Вы можете поместить двоичное сообщение, сериализовать файл или поместить местоположение файла в очередь, если вы храните файлы в файловой системе.
Решение с сокетами и очередями сообщений позволит вам иметь более распределенную архитектуру, т. Е. Не загружать один компьютер с чрезмерной нагрузкой.
Если вы действительно хотите использовать C# API из Java, возможно, вам стоит использовать мост. Это, вероятно, будет более эффективным, чем веб-API. Некоторые мосты также позволят вам запускать C# и Java в одном и том же процессе, который еще более эффективен.
В дополнение к мостам, которые вы упомянули, вы можете рассмотреть JNBridgePro. Вы можете найти больше информации на нашем сайте.
Раскрытие - я связан с JNBridge.