2009-02-04 3 views
0

У меня есть служба, которая принимает обратные вызовы от поставщика. Мотивация: Я не хочу НИКОГДА не потерять обратные вызовы (если, конечно, моя сеть не становится недоступной).Хранилище сохранения на постоянной основе. Какие у меня варианты?

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

Какие у меня варианты? Очереди, кеш в памяти?

ответ

1

Вы говорите, что получаете «обратные вызовы» - вы не уточнили, каковы они. Что такое протокол? Это по сети.

Если бы это был HTTP, то я бы сказал, что лучший способ заключается в том, что если ваше приложение не может записать данные в постоянное хранилище, оно должно вернуть ошибку («Повторите попытку позже», если это существует в протоколе), чтобы вызывающего, который должен попробовать позже.

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

Я работал с поставщиком платежей, где это было в случае (Paypal). Если вы не можете полностью обработать запрос, просто отправьте сообщение об ошибке обратно вызывающему абоненту.

+0

Да, провайдер будет вызывать мою услугу через HTTP. И да, они посылают финансовые транзакции, хотя это не Paypal. – ashitaka

0

Я рекомендую какой-то сервер очереди заданий. Я лично использую Старлинг и добился отличных результатов. Он поддерживает протокол memcache, поэтому его легко использовать в качестве постоянной очереди. Starling on Github

+0

Thanks FlipFlop. Я посмотрю на Старлинг. Гитуб становится очагом проектов. – ashitaka

0

Я поставил очередь в SQLite для этого раньше. Хотя, в моем случае, это защита от потери сетевой ссылки на сервер MySQL - данные были локально сгенерированы.

0

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

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