Эта статья является второй статьей серии Elasticsearch Sear Analyse Analyse. Из-за сложности технологии это не хорошо или неправильно, пожалуйста, укажите ^ _ ^ !!!
Исходный код основного модуля
дистрибутив: связан с упаковкой и дистрибутивом elasticsearch, является модулем различных пакетов дистрибутива (zip, deb, rpm, tar) elasticsearch. Конкретное использование заключается в следующем: выполнять в соответствующем модуле версии выпуска.publishToMavenLocalЭта задача, в случае успешного выполнения, будет находиться в путиbuild/distributionsСоответствующий дистрибутив создается следующим образом, и упакованный пакет можно запустить на рабочем сервере. Как показано ниже:
Core: Core Package, исходный код Elasticsearch является в основном в этом
buildSrc: Построение соответствующего кода elasticsearch
client: как клиентский код для подключения к elasticsearch, интерфейс выглядит следующим образом:
модули: В качестве необходимого кода, связанного с модулем для elasticsearch в дополнение к ядру, структура выглядит следующим образом:
plugins: Соответствующий код необходимых плагинов для elasticsearch, структура следующая:
загрузочная запись
в упомянутом выше модуле распределенияsrc/main/resources/binВы можете увидеть сценарий запуска elasticsearch по пути. Как показано ниже:
Сценарий сначала загружен в профиль JVM JVM.Options (файл конфигурации в нашей загрузке, расстегнут папку пакета выпуска)
ES_JVM_OPTIONS="$ES_PATH_CONF"/jvm.options
Затем загрузите параметры виртуальной машины, которые мы настроили в Run/Debug Configurations.
-Des.path.conf=D:\seymour\elasticsearch\elasticsearch-6.0.0-rc2
-Des.path.home=D:\seymour\elasticsearch\elasticsearch-6.0.0-rc2
-Dlog4j2.disable.jmx=true
последний стартorg.elasticsearch.bootstrap.Elasticsearchосновной метод в этом основном классе.
Метод main сначала добавляет хук выключения,
Затем настройте экспортер журналов,
Затем проверяются три параметра среды elasticsearch:
putSystemPropertyIfSettingIsMissing(settings, "path.data", "es.path.data");
putSystemPropertyIfSettingIsMissing(settings, "path.home", "es.path.home");
putSystemPropertyIfSettingIsMissing(settings, "path.logs", "es.path.logs");
Все проверки сделаны, передайте код на * org.elasticsearch.bootstrap.bootstrap * Метод класса init (), и это класс Bootstrap завершил начало Elasticsearch
Bootstrap.init(!daemonize, pidFile, quiet, initialEnv);
Класс Bootstrap
Давайте рассмотрим несколько важных методов в Bootstrap:
init
init(final boolean foreground,final Path pidFile,final boolean quiet,final Environment initialEnv) throws BootstrapException, NodeValidationException, UserException
Излишне говорить, что этот метод также знает, что он выполняет некоторую инициализацию перед запуском.
Подробное объяснение параметра
- передний план: определяет, запущен ли elasticsearch как фоновый демон,
- PIDFile: Полученные после анализа Args Parser, он на самом деле анализирует параметры командной строки по умолчанию (Verbose, E, Silent, версия, справка, тихие, демомозонные, PIDFile)
- Тихий: То же самое
- initialEnv: объект параметра среды, созданный Environment, который сохраняет некоторые параметры, такие как repoFile, configFile, pluginsFile, binFile, libFile и т. д.
Основная работа
- Сначала создайте экземпляр объекта Bootstrap
- Настройка экспортера журналов
- Создайте файл pid, который сохранит файл на диске, в котором записан pid приложения.
- Производительность журнала управления по параметрам переднего плана и тишина
- Вызовите метод настройки Bootstrap и метод запуска
setup
setup(boolean addShutdownHook, Environment environment)throws BootstrapException
Основная работа
-
Создайте локальный контроллер плагина через среду
-
Инициализировать локальные ресурсы
-
Инициализировать зонды перед установкой менеджера безопасности
-
Добавить закрывающий крючок
-
Проверить наличие дубликатов jar
-
Настройка вывода журнала перед установкой менеджера безопасности
-
Установить диспетчер безопасности
-
Создание экземпляра узла с параметром окружения
start
start() throws NodeValidationException
Основная работа
- Запустите уже созданный узел
- Запустите поток keepAliveThread, который создается при инициализации Bootstrap.Поток создает CountDownLatch со счетчиком 1. Цель состоит в том, чтобы успешно добавить перехватчик выключения после завершения запуска, и это предложение:
Это означает добавление закрытого крючка в JVM. Когда JVM закрывается, выполняется все крючки, добавленные в систему, уже установленную в системе, выполняются. Когда система выполняется, JVM закроется. Таким образом, эти крюки могут выполнять очистку памяти, разрушение объекта и т. Д. Когда JVM закрывается.
Вы можете видеть, что основное внимание при запуске уделяется методу установки, а после запуска это дело Node.
Класс узла
Node создается с помощью NodeBuilder и использует инжектор Google Guice's Injector для внедрения и получения экземпляров. Все компоненты в elasticsearch управляются модульно с использованием описанного выше метода.Elasticsearch инкапсулирует guice и создает модули elasticsearch через класс ModulesBuilder:
Запуск Node — это запуск каждого компонента в Node. Аналогичным образом, для запуска компонента вызываются различные методы запуска, как показано ниже.
Пока что elasticsearch запущен, и я продолжу объяснять детали elasticsearch позже, пожалуйста, поддержите ^ _ ^ !!!