2012-05-23 4 views
0

Я проектирую распределенную сеть чувствительного устройства. Эти устройства будут генерировать журналы и отправлять их в центральную базу данных. Я использую 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 в этом случае? Должен ли я разрабатывать собственный протокол уровня сокета для отправки сообщений?

ответ

1

EDIT

Есть ли служба сообщений, как это или я должен написать релейную службу самому?

Как правило, эти услуги ретрансляции вы должны кодировать самостоятельно, если только вы не можете найти программное обеспечение, которое делает именно то, что вы хотите. В таких случаях это не является чем-то необычным.

В этом случае это хорошо использовать JMS?

Да, JMS - очень хорошее решение для использования в качестве промежуточного программного обеспечения. Вы можете подключить много клиентов к JMS и отправлять ему сообщения. Хотя у вас есть серверная программа, которая просматривает сообщения с JMS и обрабатывает их и обрабатывает сетевые проблемы, если они есть. Также в качестве бонуса серверная программа и отправка сообщений клиенту в случае полного сбоя.

Должен ли я разрабатывать собственный протокол уровня сокета для отправки сообщений?

Я до сих пор не знаю, какие сообщения вы хотите отправить. Если вы используете стандартный транспорт, такой как SMTP или SMS или HTTP, или что-то в этом роде, есть библиотеки, которые помогут вам отправлять и проверять доставку. Если вам нужно отправить с использованием настраиваемого протокола, вам придется написать собственный код уровня сокета.

Просматривая примеры кода, я показываю, что вы хотите узнать, успешно ли ваш клиент отправил свое сообщение в JMS. Если он не был отправлен, сохраните его на диск и повторите попытку позже.

JMS-сервер автоматически подтвердит, если сообщение получено. Вы можете проверить это из сообщения JMS, или если он сбой, вы получите исключение JMSException. Если вы сохраняете сообщения на диске, вам нужно будет знать, когда их повторно отправить. Вам потребуется таймер или повторная отправка следующего сообщения для отправки.

+0

проверить обновление. Надеюсь, теперь вопрос ясен. –

+0

Спасибо, что яснее. Служба ретрансляции находится между клиентом и сервером JMS? или есть другой сервер между ними? –

+0

Да, служба ретрансляции находится между клиентом JMS и сервером. Единственное его использование - доставлять сообщения от имени клиента и позволять клиенту выполнять свою работу как можно быстрее. Я не написал никакого кода (я нахожусь в архитектуре). Фактическое сообщение - всего 6 'длинных' целых чисел. это все. –

Смежные вопросы