Быстрое и грязное решение для коммуникации между процессами в различных [закрытых] машинах

Попробуйте это

CONVERT(DATETIME, DTO_Created, 1) >= '2017-05-01 00:00:00.000' AND CONVERT(DATETIME, DTO_Created, 1) <= '2017-05-01 23:59:59.999'

ИЛИ это

cast(DTO_Created as datetime) >= '2017-05-01 00:00:00.000' AND cast(DTO_Created as datetime) <= '2017-05-01 23:59:59.999'
5
задан casperOne 1 May 2012 в 11:55
поделиться

9 ответов

Java RMI (интерфейс удаленного метода)

6
ответ дан 18 December 2019 в 14:52
поделиться

Принятие машин имеет адреса друг друга (получение упомянутых адресов является другим вопросом), я думаю, что Ваш лучший выбор является дистанционной работой Spring. У Вас есть интерфейс передачи данных, объект области, который инкапсулирует данные, которые Вы хотите передать, и сервис дистанционной работы, реализовывая тот интерфейс на каждой стороне. После этого Ваш код рассматривает удаленный сервис как просто другой сотрудник. Дешевый, легкий, быстро, и можно использовать любой транспорт, который Вы любите (RMI, HTTP, Гессиан, Мешковина и т.д.).

Обычно мне требуются приблизительно 10 минут (самое большее) для представления существующего интерфейса/сервиса как сервиса дистанционной работы, хотя первый раз возьмет немного дольше.

2
ответ дан 18 December 2019 в 14:52
поделиться

То, что Вы описали, является быстрым (и не действительно настолько быстрое) и грязный путь. Единственные другие способы выполнить задачу настраивают процессы, чтобы послушать и отправить данные через сокеты (быть, что реализованный непосредственно Вами - в Java это очень легко, просто Google, и Вы найдете, или как часть библиотеки - вероятно, необходимый для чего-либо более сложного),

Таким образом, каждый процесс имел бы слушателя на определенном порте и время от времени отправит данные через тот порт.

1
ответ дан 18 December 2019 в 14:52
поделиться

Вы могли бы найти, что Терракота была очень простым способом сделать это. Терракота позволяет Вам кластеризировать часть своей "кучи" (например, HashMap) и видеть содержание той карты на всех узлах. Установка этого довольно тривиальна.

1
ответ дан 18 December 2019 в 14:52
поделиться

Я буду второй, идея наличия Ваших процессов связывается через сокеты и упоминает, что пакет Apache MINA делает такую вещь очень простой и устойчивой, а также масштабируемой без издержек большей системы как RMI или JMS. Это также содержит некоторую хорошую поддержку кодирования и декодирования сообщений. Я использовал очень успешно в системе среднего масштаба.

Этот вид коммуникации имеет тенденцию быть довольно легким к краткому обзору, также. Используете ли Вы MINA, после того как Вам настраивали классы для обработки установления/разрыва вниз соединения и движущиеся данные через соединения, они, вероятно, будут очень допускающими повторное использование.

1
ответ дан 18 December 2019 в 14:52
поделиться

JMS по Брокеру ActiveMQ очень легок. Его доступное здесь. Следующее является быстрым и грязным псевдо кодом для отправки сообщения, но поскольку Вы видите его минимальный код. Рассмотрите два приложения Java, издателя и подписчика.

  1. Создайте брокера в одном из Вашего издателя:

    BrokerService broker = new BrokerService();    
    broker.addConnector("tcp://localhost:61616");    
    broker.setPersistent(false);    
    broker.start();
    
  2. Соединения установки в обоих приложениях (Примечание: подписчик заменит локальный хост адресом машины, выполняющей брокера):

    final ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");    
    TopicConnection connection = factory.createTopicConnection();    
    Session session = connection.createSession(false,Session.DUPS_OK_ACKNOWLEDGE);    
    
  3. Отправьте данные в приложении публикации:

    Topic topic = session.createTopic("Quick and dirty topic");
    MessageProducer producer = session.createProducer(topic);    
    ObjectMessage message = session.createObjectMessage();    
    message.setObject((Serializable) "Object you want to send");    
    producer.send(message);
    
  4. В Вас подписывающий приложение (который должен реализовать javax.jms. MessageListener), следующая установка необходима:

    Destination dest = session.createTopic("Quick and dirty topic");    
    MessageConsumer consumer = session.createConsumer(dest);    
    consumer.setMessageListener(this);
    
  5. Подписывающееся приложение onMessage(Message arg0) метод (который это имеет, потому что это - MessageListener) будет уведомлен относительно опубликованных объектов.

2
ответ дан 18 December 2019 в 14:52
поделиться

Вопрос не ясен. Вы ищете API или библиотеку для использования? Эти две машины знают адрес друг друга для начала, или они должны обнаружить друг друга?

Можно использовать JMS для большей части связи, но все машины должны быть знакомы с "процессом брокера", который работает отдельно.

0
ответ дан 18 December 2019 в 14:52
поделиться

Я полностью соглашаюсь с дистанционной работой GaryF Spring, наилучший вариант, это быстро и чисто. Если Вы не знакомы вообще с Spring, Вам может потребоваться немного времени сначала. Но верьте мне это полностью стоящий того.

0
ответ дан 18 December 2019 в 14:52
поделиться

Я нахожу, что RMI является несколько раздражающим. Необходимо определить 3 файла для единственного удаленного объекта, и необходимо изучить материал, который это вне нормального процесса разработки, если Вы уже не знаете, как использовать его (я полагаю, что существует отдельный включенный шаг компилятора).

Могут быть инструменты, чтобы заставить его работать, но я мог бы предложить просто открыть простой сокет? Они достаточно близки к тривиальному для использования.

Единственный протест состоит в том, что необходимо быть осторожны относительно определения что потоки между компьютерами.

0
ответ дан 18 December 2019 в 14:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: