Я проектирую распределенную сеть чувствительного устройства. Эти устройства будут генерировать журналы и отправлять их в центральную базу данных. Я использую JMS для транспортировки сообщений журнала. Основной сервер базы данных будет запускать MDB (Message Driven Bean) для обработки входящих сообщений. Клиенты отправляют данные с GPRS. Проблема в том, что я не хочу, чтобы мои клиенты обрабатывали сетевые проблемы. Мне нужно некоторое ретрансляционное обслуживание, которое выполняется локально на клиентской машине и немедленно получает сообщение от клиента, не блокируя его, и попробуйте от его имени (если сеть не работает, попробуйте отправить через некоторое время).служба сообщений с поведением реле
сообщения является простым Java объект:
public class Message {
public int x;
public int y;
public int z;
}
клиент:
Message msg = new Message();
while (True) {
/* sense data */
msg = get_data_from_environment();
/* send data to local relay service
* This is non blocking call */
relay_service.send(msg);
}
местные службы реле:
while (True) {
/* get message from local client */
msg = get_message_from_local_client();
result = send_msg_to_JMS_server(msg);
/* if not successful, persist it on a local queue and try some other time */
if (result.is_sent() != True)
store_msg_on_disk(msg);
}
Есть ли служба сообщений, как это или я должен написать реле обслуживание себя?
это хорошо использовать JMS в этом случае? Должен ли я разрабатывать собственный протокол уровня сокета для отправки сообщений?
проверить обновление. Надеюсь, теперь вопрос ясен. –
Спасибо, что яснее. Служба ретрансляции находится между клиентом и сервером JMS? или есть другой сервер между ними? –
Да, служба ретрансляции находится между клиентом JMS и сервером. Единственное его использование - доставлять сообщения от имени клиента и позволять клиенту выполнять свою работу как можно быстрее. Я не написал никакого кода (я нахожусь в архитектуре). Фактическое сообщение - всего 6 'длинных' целых чисел. это все. –