RuleTiminUpdateTask()).start(); — это код на языке Java, который запускает задачу RuleTiminUpdateTask.
去监视文件,然后读取配置文件中的内容到内存中 — это описание процесса мониторинга файла и последующего чтения его содержимого в память из конфигурационного файла.
3. В сообщении обработчика согласно собственным потребностям получают соответствующие правила для ключевых слов, затем судят и возвращают; — это процесс обработки сообщений с использованием правил, соответствующих ключевым словам.
RuleTiminUpdateTask.rules.get(keyword);
String type = rule.getType();
— это фрагмент кода на языке Java, где происходит получение правила по ключевому слову и определение его типа.
4. Более подробное описание можно найти в разделе RuleTiminUpdateTask — это указание на то, что более подробное описание находится в другом месте документа.
2.7 Основные моменты, на которые следует обратить внимание в рамках данной структуры
-
initConfig.xml — файл конфигурации, в котором настраиваются необходимые параметры.
-
InMessageProcessingHandler — интерфейс, который должен быть реализован при разработке приложения. Здесь реализуется бизнес-логика и различные сервисы. Пример простого сообщения можно найти в DefaultInMessageProcessingHandler.
3. Часто задаваемые вопросы о данном SDK
-
Q: Проект запускается, но появляется сообщение об отсутствии jar-файла.
- A: Это может быть связано с несовместимостью версий jar-файлов в проекте. Необходимо добавить недостающие jar-файлы.
-
Q: Если появляется сообщение о том, что токен не существует.
- A: Скорее всего, это связано с тем, что в конфигурации лидера отсутствует информация о приложении.
-
Q: Что делать, если токен или билет истек?
- A: Используйте WebResetZkData для обновления данных на сервере ZooKeeper.
-
Q: При использовании возникает ошибка в классе XMLParaser.
- A: Откройте путь сборки Java (Java build path) и переместите JRE в начало списка порядка и экспорта (order and export).
-
Q: В процессе использования, особенно в Linux, веб-сервис может регистрировать временные каталоги несколько раз или веб-контейнер может останавливаться, но временный каталог не удаляется.
- A: Возможные причины:
- Несоответствие времени сервера ZooKeeper и системного времени.
- Проблемы с конфигурацией Tomcat.
- Некорректное завершение работы Tomcat.
4. Разработка и поддержка SDK: рекомендации и стратегии
При разработке и поддержке SDK необходимо соблюдать следующие соглашения:
- Каждый модуль не должен зависеть друг от друга.
- В случае ошибки в запросе HTTPClient должно быть выдано исключение ReqException.
- Если в ответе API есть ошибка, она должна быть обработана через WxException. SDK может проверять только соответствие протокола. Другие бизнес-исключения не должны обрабатываться SDK.
- Собственные исключения SDK должны быть обработаны через SdkException.
- Строго следовать структуре SDK.
Также рекомендуется использовать следующие стратегии:
- Для поддержки нескольких публичных аккаунтов предоставляется HTTPClient по умолчанию. Он создаёт сертификаты для всех публичных аккаунтов при инициализации.
- Поддерживается только фиксированный список токенов или билетов для публичных аккаунтов в распределённой среде.
- Динамическое добавление публичных аккаунтов возможно, но требует ручного сброса данных на сервер ZooKeeper. После этого необходимо перезапустить сервер.
- Стратегия обновления данных основана на создании очереди задач с задержкой.
- Конфигурация и инициализация контекста будут обновлены в будущем для динамического изменения данных без перезапуска.
5. Нерешённые проблемы
В настоящее время существуют нерешённые проблемы, такие как:
- Отсутствие обработки событий сканирования и запуска.
- Необходимость дальнейшей абстракции жизненного цикла и улучшения безопасности.
- Повторное абстрагирование класса ZooKeeperMaster.
6. Требования
- Дальнейшая абстракция кода инициализации и улучшение безопасности.
- Обработка событий сканирования и запуска.
- Повторная абстракция класса ZooKeeperMaster.
7. Обновления
Информация об обновлениях включает в себя описание изменений и исправлений ошибок. zk客户端的 master-стратегия поддерживается и обновляется.
Проведена попытка запуска, корневой каталог интегрирован внутрь. Используется клиентская часть фреймворка для поддержки и снижения вероятности ошибок.
2016.04.19
- Добавлена поддержка типа outMsg для передачи сообщений при переключении на несколько операторов.
2016.03.23
- При инициализации распределённого zk, метод init перемещён из конструктора наружу. Это должно предотвратить некоторые странные проблемы (например, когда родительский класс ещё не сконструирован, но уже вызывает некоторые свойства дочернего класса, хотя проблема уже решена, но в будущем будет проведена более детальная отладка).
2016.02.23
- В API для получения Ticket и Token добавлен атрибут последнего модификатора (в распределённой среде это позволяет определить, какая машина обновила данные).
2016.02.22
- Изменён способ ведения журнала в распределённых задачах tick и token.
2016.1.14
- Модифицированы некоторые уровни журнала.
- Поддержка сеанса openid для веб-проектов.
2015.11.20
- Простое добавление файла схемы XSD для проверки. Снижение уровня проверки в программе.
2015.11.18
- Конфигурационный файл содержит элемент конфигурации httpClientClassName, который можно динамически заменять реализацией (подкласс IHttpClient используется для управления реализацией).
2015.11.16
- Замена базовой логики SDK, поддержка многопользовательских платёжных функций, HTTP-клиент / SSL-сертификат, теперь управляется подклассом IHttpClient.
- Рефакторинг классов исключений:
- SdkException — верхний уровень исключения, используется для бизнес-правил в SDK, все объекты этого класса будут выброшены. Код, используемый для создания исключения, находится в SdkGlobalCode.
- ReqException — исключение, возникающее при запросе HTTP-клиента, используется при возникновении исключений во время запроса, включая недоступность удалённого сервера и другие сообщения об ошибках.
- WxException — все исключения протокола, возвращаемые в результате вызова API, генерируются этим объектом. Например, ошибки синтаксического анализа XML, невозможность использования токена и т. д.
2015.10.23
- Предоставлен интерфейс IHttpClient, который используется во всём SDK для удалённых вызовов. Интерфейс предоставляется для настройки пользовательского обработчика запросов.
- Предоставляется реализация по умолчанию DefeatHttpClient, которая использует AsyncHttpClient в качестве основы.
2015.10.23
- Новый тестовый класс решает проблему случайного истечения срока действия токена/билета (обычно это происходит при повторном включении zk-сервера и обновлении нескольких проектов одного и того же публичного аккаунта). Используйте следующим образом: в тестовом пакете: updateZk.Client.main(); запустить вручную.
2015.10.20
- Проблема с безопасностью инкапсуляции при инициализации и присвоении значений частным статическим константам была решена. Метод отображения setter был удалён.
2015.10.12
- Новые параметры оплаты на стороне приложения.
2015.10.10
- Унификация ведения журнала, предыдущая версия имела ошибку.
- Изменение местоположения некоторых классов, предыдущая документация не отображалась.
- Новая функция отправки шаблонов сообщений, добавлена поддержка уведомлений о финансовых/банковских транзакциях.
- Обработка сообщений добавляет обработку событий успеха или неудачи после отправки шаблона сообщения.
2015.10.08
- Стратегия ожидания 5 секунд для обновления основных токенов и билетов в режиме ожидания.
- ZkDistributedSingleNodeExecutor изменил суперкласс, чтобы решить проблему нулевого указателя, вызванную первым отправленным сообщением, которое не было выполнено до построения блока.
- Инициализация стратегии изменена: перед инициализацией билета будет предпринята попытка получить локальный токен, и будет записан журнал (как правило, причина отсутствия доступного токена заключается в том, что конфигурация каждой машины не согласована. Вы можете использовать количество доступных токенов на локальной машине и количество попыток получения для определения некоторых подсказок).
- Изменить механизм жизненного цикла задачи: динамическое добавление и изменение общедоступных номеров токенов в качестве подготовки к динамическому добавлению. Каждый раз, когда данные получаются, список задач обновляется (на основе списка zk), то есть динамическое увеличение количества публичных аккаунтов перед добавлением требует ручного запуска обновления на zk. Если в будущем возникнет такая необходимость, вы можете написать небольшой инструмент (текущая реализация использует DelayQueue для сбора просроченных данных, а DelayQueue сбрасывается каждый раз после истечения времени). Таким образом, обновление списка задач имеет задержку, и только когда истечёт время, очередь будет обновлена. При разработке небольших инструментов необходимо учитывать эту проблему (1. Не разрешается изменять учётную запись публичного аккаунта, если это необходимо, её можно удалить из zk и дождаться обновления лидера, прежде чем добавлять её снова).
2015.9.29
- Добавлено jssdk ticket для поддержки распределённого жизненного цикла.
- Решение проблемы с несколькими потоками в ZkDistributedSingleNodeExecutor.
- Временное решение проблемы реализации ZkDistributedSingleNodeExecutor, которая приводит к тому, что конструктор родительского класса сначала отправляет данные firstRefresh, вызывая проблему с пользовательскими параметрами конструкции, которые не были созданы.
- Поскольку билет распределён для поддержания жизненного цикла, он вызвал: локальный токен не имеет данных, вызывается билет, и используется стратегия инициализации базового токена zk service, и он спит в течение 2 секунд перед выполнением инициализации билета.
- Операция getAccesstoken, поскольку существует разница во времени между первым обновлением данных до локального, добавляется стратегия: если данные не могут быть получены, максимальное количество попыток составляет 10 раз, и каждая попытка спит в течение 500 миллисекунд.
- Добавление журнала log4j для облегчения отладки (не удалось решить проблему печати сообщений по индивидуальному шаблону).
2015.9.23
- Первоначальная реализация ZkDistributedSingleNodeExecutor для обеспечения отказоустойчивости одного узла.
- Часть предыдущей конфигурации перенесена в initConfig.xml, и конфигурация sdk использует конфигурацию или класс конфигурации для инициализации необходимых параметров.
2015.9.23~ранее
- Начато преобразование в независимый модуль. ### Внешние пакеты с наибольшим использованием на стороне клиента:
Этот пакет инкапсулирует все запросы интерфейса и услуги в данном модуле.
Обычно клиентам нужно использовать только класс услуг в этом классе.
Платёжные функции, предоставляемые внешним интерфейсом:
Web:
Здесь находятся API-функции, связанные с WеChat JSSDK.
Common:
Общие операции, включая управление жизненным циклом билетов и управление жизненным циклом accessToken в диалоге; генерацию ссылок для авторизации веб-страниц WeChat и т. д.
Handler:
Вспомогательные операции обработки данных, обеспечивающие проверку параметров API платёжного интерфейса.
Protocol:
Пакеты данных протокола, сущности req и res разделены в соответствии с WeChat API. Здесь находятся протоколы ответов на запросы API, связанные с платежами.
Service:
Внешние пакеты с наибольшим использованием на стороне клиента: этот пакет инкапсулирует все запросы интерфейса и услуги в данном модуле. Обычно клиентам нужно использовать только класс услуг в этом классе.
Здесь предоставляются функции авторизации JSSDK, OpenID и получения платёжных параметров JSSDK и др.
Комментарии ( 0 )