предисловие
В последнее время у меня много личных дел (переезд, смена работы, небольшой перерыв), поэтому я не успеваю следить за обновлениями блога, недавно получил письмо с напоминанием.
Также пришло время написать статью, чтобы рассказать об участии в проектах с открытым исходным кодом (и это действительно в последнее время вступает в период нехватки пера).
ps: я впервые получил такой подарок на Праздник середины осени, плюсDubbo
Активность сообщества и важность Али все еще выполняютсяPRC
Или друзья, выбравшие микросервисную технологию, могут рассмотретьDubbo
.
Участвуйте в открытом исходном коде
Теперь поговорим конкретно об участии в open source;
Почти все разработчики в повседневной жизни будут пользоваться удобством и даже преимуществами проектов с открытым исходным кодом.Из-за ограниченности среды в деятельности с открытым исходным кодом всегда доминировали иностранные разработчики еще десять или даже несколько лет назад.
Однако в последние годы отечественные интернет-компании постепенно расширили свое влияние на международном уровне и значительно повысили уровень нашего развития.BAT
Есть много отличных проектов с открытым исходным кодом под его руководством.
Теперь даже участие в проектах с открытым исходным кодом может найти другой способ получить большие заводыoffer
, так что на самом деле многие друзья хотят в нем участвовать, может быть, первое впечатление об этом деле непростое, поэтому он все еще застрял на первом шаге.
Конкретные шаги
Вот несколько шагов из моего личного опыта:
- Обнаруженные проблемы или саморекомендация
feature
. - исходный код форка.
- Локальная разработка, самотестирование.
- положить начало
pull request
. - в ожидании сообщества
Code Review
. - Следите за комментариями сообщества, чтобы изменить код.
- Утверждено, объединено в
master
филиал, чтобы завершить этот вклад.
Ниже я объединим самое последнее участиеDubbo
процесс, чтобы обсудить подробно.
Нашли проблему или порекомендовали функцию
Первый шаг — выяснить, каково содержание вашего вклада. Обычно для решения проблемы или отправки новогоfeature
; первый относительно легче.
Конечно, эта проблема может быть найдена в процессе использования, или это может быть проблема, которую нужно решить в списке проблем.
Взяв этот раз в качестве примера, это проблема, которую я обнаружил во время использования, и я также отправил соответствующуюIssueи написал статью, документирующую и решающую проблему:какие? Запуск службы Dubbo занимает два часа!
Стоит отметить, что перед отправкой проблемы лучше всего выполнить поиск по ключевым словам в списке проблем, чтобы увидеть, есть ли уже связанные проблемы, чтобы избежать повторения.
После отправки в то же время сообщество может продолжить и быть отмеченнымinvalid
Также возможно, что этикетка считает, что это не проблема, или что осанка неправильная.
исходный код форка, локальная разработка
Когда будет определено, что эту проблему необходимо исправить, можно начинать разработку.
Первый шаг — скопировать исходный код в собственный репозиторий.
Затем вам нужно только клонировать исходный код в свой собственный репозиторий для локальной разработки.
Позвольте мне рассмотреть проблему, с которой я столкнулся в первую очередь.
Проще говоря, начатьDubbo
Обслуживание очень медленное, после позиционированияmain
Поток блокируется при получении локального ip.
Поэтому решение, которое я предложил в то время, было: добавить тайм-аут при получении локального IP-адреса, выдать исключение или повторить попытку после истечения времени ожидания, но, по крайней мере, должен быть журнал, чтобы помочь пользователям найти проблему.
Проблема в том, что основной поток всегда будет блокироваться здесь.InetAddress.getLocalHost().getHostAddress()
, но вам нужно знать, как долго он блокируется, прежде чем вы сможете судить, истекло ли время ожидания.
Так что мы можем только открыть еще одну ветку и регулярно проверять ее.main
Выполнил ли поток свою задачу, ниже содержание моего первого пр.
Целью этого времени является не обсуждение конкретных технических деталей, поэтому кратко опишите следующие шаги:
- Объявляется пул потоков размера 1.
- еще одно заявление
volatile
Флаг используется для определения того, завершил ли основной поток задачу. - Объявите условие ожидания нового потока.
- В конце концов, нужно только запустить эту ветку, чтобы судить об этом флаге.
Как проверить себя
После завершения разработки следующим шагом является самотестирование.Поскольку этот тип проекта зависит от других проектов в качестве базового пакета для запуска, нам обычно приходится создавать новый проект для совместной работы со всем процессом тестирования (за исключением одиночного теста). ).
Я думаю, что здесь стоит отметить несколько небольших хитростей.
Первый — это номер версии; поскольку тестирование выполняется локально, вам нужно использоватьmvn clean install
Пакет должен быть установлен локально, прежде чем его можно будет использовать в других проектах для тестирования.
Но поскольку версии кода, которые мы вытащили из официального, были выпущены в центральный репозиторий maven (будь то релиз или снапшот), эти версии пакетов jar уже должны существовать в нашем локальном репозитории.
Как только мы выполнимmvn clean install
При локальной установке измененного кода велика вероятность, что возникнет проблема (возможно, моя позиция неверна), из-за которой вновь созданный проект не сможет опираться на вновь добавленный код.
Поэтому я обычно практикую изменение номера версии. Этот номер версии никогда официально не публиковался в центральном хранилище. Это может гарантировать, что вновь добавленный код будет установлен локально с новой версией, чтобы мы могли полагаться на эту версию для тестирование.
Однако при повторной отправке будьте осторожны, чтобы не отправить этот номер версии.
инициировать запрос на включение
После завершения самотестирования его можно запускатьpull request
Теперь не будьте беспечны, здесь есть еще одно место, на которое стоит обратить внимание, это проблема разрывов строк кода.
Как только новая строка несовместима с исходным репозиторием,git
будет думать, что эта модификация удалена и создана заново, что дастcode review
доставить огромные неприятности.
Точно так же, очевидно, количество строк, которые я изменил, невелико, ноgit
Подтверждается, что вы отменили и начали заново, чтобы ревизия не знала, что вы изменили.
Самый простой способ - настроить себяgit
Для глобальной конфигурации вы можете обратиться кздесь.
# 提交时转换为LF,检出时转换为CRLF
git config --global core.autocrlf true
# 提交时转换为LF,检出时不转换
git config --global core.autocrlf input
# 提交检出均不转换
git config --global core.autocrlf false
Убедившись, что проблем нет, вы можете щелкнуть здесь, чтобы инициировать запрос на вытягивание, а затем следовать инструкциям для выполнения.
Конечно, каждый проект будет иметь свой индивидуальный процесс внесения вклада, поэтому лучше всего ознакомиться с официальным руководством по внесению вклада.
Хироши Ватанабэ.apache.org/en-US/docs/…
Code Review
pr
После запуска вы можете дождаться рассмотрения сообществом.
В этом процессе вы должны полностью общаться с сообществом.Возможно, что ваш план и идеи сообщества не совпадают.
Например, как я в этот раз:
В итоге, благодаря общению и собственному размышлению, я почувствовал, что план сообщества легче и разумнее.После достижения договоренности сообщество слило этот пр в master.На самом деле, я думаю, что самое значимое во всем процессе этоcode review
В процессе мозгового штурма могут участвовать все желающие, и среди них много технических специалистов, и можно многому научиться, даже не подозревая об этом.
Аналогичный случай
Хотя мое предыдущее решение не было принято, все еще есть много подобных вариантов использования (один поток, контролирующий другие потоки), просто вDubbo
также используется в .
Это основной вызов службы.По умолчанию он выглядит как синхронный вызов для пользователя, то есть потребитель будет ждать выполнения PRC, прежде чем выполнять последующую логику.
Но на самом деле в основе лежитTCP
Процесс отправки сетевых пакетов,по своей сути асинхронный.
ТолькоDubbo
Сделайте асинхронную синхронизацию без вашего ведома, так что это выглядит как метод синхронизации.
Как показано в красной рамке,Dubbo
называл себяget()
Метод используется для синхронного получения возвращаемого результата поставщика услуг.
Логика на самом деле довольно проста, похожа на мой план выше, но здесьisDone()
Функция возвращает, было ли получено возвращаемое значение поставщика услуг.
Суммировать
На этот раз я резюмировал конкретные шаги для участия в open source, что на самом деле довольно просто; как сказал чиновник, даже поднятие вопроса или исправление опечатки считается участием, так что не думайте слишком много.
Наконец, также проводится краткий анализ процесса преобразования асинхронного в синхронный в процессе вызова Dubbo.Освоение этих операций также очень полезно для вашего ежедневного развития.
Ваши лайки и репост - лучшая поддержка для меня