Выполнение заказа в Сиддхи на wso2cep

Я новичок в Stackoverflow, даже если я решил много проблем с вашими подсказками. Теперь у меня проблема, решения которой я не нашел. Я разрабатываю службу отправки с использованием WSO2 CEP и GCM. CEP обрабатывает запросы на подписку / отказ от подписки и push-события. Ключи подписок хранятся на моем собственном сервере с использованием MySQL вместе с другой информацией. Мои проблемы связаны с этапом подписки. Этот шаг должен обрабатывать либо новые подписки (вставка), либо существующую подписку (обновление). Чтобы упростить операцию, я решил нормализовать две операции, удалив и вставив записи (даже если запись уже может быть в БД). Чтобы справиться с этим, я разработал план выполнения, используя Сиддхи. План определяет 2 потока: поток событий и поток таблицы, связанный с таблицей MySQL. В плане выполнения сначала выполняется удаление с использованием ключа, взятого из события, а после вставки новой записи с использованием информации, содержащейся в событии. Но похоже, что последовательность операций (удаление и вставка) различается, поэтому иногда я обнаруживал на своем сервере две или более записей с одним и тем же ключом GCM. Я применил обходной путь, добавив уникальное ограничение для таблицы, но мне хотелось бы знать, есть ли способ исправить детерминированный порядок операций Сиддхи.

С Уважением

Мишель де Роса


person Michele de Rosa    schedule 25.02.2016    source источник
comment
Добро пожаловать на SO.com. Возможно, вы захотите прочитать эту тему на meta.SE.com.   -  person martijnn2008    schedule 25.02.2016


Ответы (1)


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

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

Надеюсь это поможет!!

Спасибо тишан

person Tishan    schedule 07.03.2016
comment
Большое спасибо за подсказку. На самом деле я использую CEP 4.0.0 и видел, что перезапись вставки идет с CEP 4.1.0, поэтому я, вероятно, буду использовать ее в ближайшем будущем. На данный момент у меня есть некоторые проблемы (пока не решенные) с импортом конфигурации доверенного сертификата для работы в HTTPS. Очень скучный выпуск !!! - person Michele de Rosa; 08.03.2016
comment
Установите для своего клиентского хранилища доверенных сертификатов ‹CARBON_HOME› /repository/resources/security/client-truststore.jks, который является хранилищем доверенных сертификатов по умолчанию для продуктов WSO2. Если у вас возникли проблемы с импортом собственного сертификата, попробуйте docs.wso2.com/display/Carbon444/ - person Tishan; 09.03.2016
comment
Я попробовал выполнить операцию перезаписи вставки, но, похоже, в моем случае она не работает. Я использую только один атрибут потока, чтобы решить, применять ли вставку или обновление. Кажется, что вставка перезаписи работает, если вы используете весь набор атрибутов потока. Пожалуйста, дайте мне знать, правильно ли это. - person Michele de Rosa; 21.03.2016