предисловие
В Китае с открытым исходным кодом, интересно, заметили ли вы организацию с открытым исходным кодом Java — Dromara?
Эта организация была основана автором Apache ShenYu (ранее Soul Gateway), организации с открытым исходным кодом Java, в которой участвуют многие авторы открытого исходного кода Java.
В китайском сообществе открытого исходного кода многие авторы открытого исходного кода Java работают независимо и управляют проектами независимо. Организация Domara была создана для того, чтобы объединить возможности Java с открытым исходным кодом, создать сообщество, поделиться ресурсами и совместно продвигать разработку Java с открытым исходным кодом в Китае.
В настоящее время в сообществе Dromara есть 9 проектов GVP и несколько проектов с большим количеством звезд. Эти сообщества проектов с открытым исходным кодом очень активны, и каждое из них представляет собой бутиковую работу с открытым исходным кодом, которая может повысить эффективность работы. Давайте взглянем на четыре проекта с открытым исходным кодом в организации Dromara. Все это очень практичные инструменты, и их правильное использование значительно повысит эффективность вашего производства!
Sa-Token
Первое, что я хочу представить, — это Sa-Token, который, вероятно, является наиболее полной облегченной платформой аутентификации авторизации Java в истории.
Простое использование, богатые возможности и мощные функции, по какой причине вы должны отказываться?
Официальный сайт:sa-token.dev33.cn/
Размещенный Gitee репозиторий:git ee.com/д-р Омар А/sah-…
Размещенный на Github репозиторий:GitHub.com/д-р Омар А/СА-…
Sa-TokenЭто облегченная среда аутентификации разрешений Java, которая в основном решает:登录认证
,权限认证
,Session会话
,单点登录
,OAuth2.0
,微服务网关鉴权
И ряд вопросов, связанных с разрешениями.
Дизайн API Sa-Token очень прост, насколько он прост? Взяв в качестве примера аутентификацию при входе в систему, вам нужно всего лишь:
// 在登录时写入当前会话的账号id
StpUtil.login(10001);
// 然后在需要校验登录处调用以下方法:
// 如果当前会话未登录,这句代码会抛出 `NotLoginException` 异常
StpUtil.checkLogin();
На данный момент мы завершили аутентификацию входа с помощью Sa-Token!
В это время ваша головка может быть полна вопросительных знаков, неужели все так просто? Как насчет пользовательских Realms? А глобальные фильтры? Разве я не должен писать различные файлы конфигурации?
Правильно, в Sa-Token аутентификация входа настолько проста, что не требуется никаких сложных предварительных действий, только этот простой вызов API может завершить аутентификацию входа в сеанс!
Когда вам надоест Shiro, SpringSecurity и другие фреймворки, вы поймете, насколько прост и элегантен дизайн API Sa-Token по сравнению с этими традиционными старыми фреймворками!
Пример аутентификации разрешения (только сuser:add
Только сессия с разрешением может войти в запрос)
@SaCheckPermission("user:add")
@RequestMapping("/user/insert")
public String insert(SysUser user) {
// ...
return "用户增加";
}
Выключить учетную запись в автономном режиме (она будет отключена, когда другая сторона снова получит доступ к системе).NotLoginException
аномальный)
// 使账号id为 10001 的会话强制注销登录
StpUtil.logoutByLoginId(10001);
В Sa-Token большинство функций можноодна строка кодаЗаканчивать:
StpUtil.login(10001); // 标记当前会话登录的账号id
StpUtil.getLoginId(); // 获取当前会话登录的账号id
StpUtil.isLogin(); // 获取当前会话是否已经登录, 返回true或false
StpUtil.logout(); // 当前会话注销登录
StpUtil.logoutByLoginId(10001); // 让账号为10001的会话注销登录(踢人下线)
StpUtil.hasRole("super-admin"); // 查询当前账号是否含有指定角色标识, 返回true或false
StpUtil.hasPermission("user:add"); // 查询当前账号是否含有指定权限, 返回true或false
StpUtil.getSession(); // 获取当前账号id的Session
StpUtil.getSessionByLoginId(10001); // 获取账号id为10001的Session
StpUtil.getTokenValueByLoginId(10001); // 获取账号id为10001的token令牌值
StpUtil.login(10001, "PC"); // 指定设备标识登录,常用于“同端互斥登录”
StpUtil.logoutByLoginId(10001, "PC"); // 指定设备标识进行强制注销 (不同端不受影响)
StpUtil.openSafe(120); // 在当前会话开启二级认证,有效期为120秒
StpUtil.checkSafe(); // 校验当前会话是否处于二级认证有效期内,校验失败会抛出异常
StpUtil.switchTo(10044); // 将当前会话身份临时切换为其它账号
Даже если вы не запускаете тесты, вы можете ожидать использования подавляющего большинства API.
Чтобы узнать больше, см.:git ee.com/д-р Омар А/sah-…
Forest
Мощная клиентская среда Http, которая значительно освобождает вашу работу по доступу Http.
Протокол HTTP сложен? Это потому, что вы не использовали Forest, хотя в отрасли есть много других отличных Http-клиентов, но если вы пропустите Forest, вы пропустите большой элегантный и красивый лес.
Официальный сайт:forest.dtflyx.com
Размещенный Gitee репозиторий:git ee.com/Доктор Омар А/ Будда Ру…
Размещенный на Github репозиторий:GitHub.com/д-р Омар А/Будда…
Forest — это клиентская среда Java HTTP с открытым исходным кодом для доступа к интерфейсам RESTful сторонних служб.
Он может привязывать параметры HTTP-запроса к интерфейсу Java, после чего вызов интерфейса Java эквивалентен отправке HTTP-запроса. Все ориентировано на интерфейс.
Многим компаниям необходимо вызывать многие сторонние HTTP-интерфейсы в фоновом режиме Java, такие как WeChat Pay, Umeng и другие сторонние платформы.
В компании по-прежнему много сервисов, написанных на лучшем в мире языке, а вызывать интерфейс можно только через HTTP-интерфейс. Таким образом, со временем в Java-коде появилось множество различных интерфейсов вызовов HTTP, и методы вызова неоднородны.Некоторые написаны HttpClient, некоторые написаны OkHttp, а некоторые упакованы сами по себе.Это только упаковывается разными людьми. внутри компании есть два или три типа HTTP-инструментов.
Более того, URL-адрес в основном прописан в коде, который сложно поддерживать.Разные интерфейсы имеют разные методы передачи параметров, включая передачу GET, POST, передачу JSON и передачу XML. Когда есть интерфейс, который надо модифицировать, то полдня уйдет на то, чтобы найти, где находится код.
И Forest может помочь мне хорошо отделить HTTP-код от бизнес-кода, и вызывающей стороне запроса не нужно заботиться о деталях, связанных с HTTP.
Автоматическое объединение различных параметров HTTP
Параметры, включая URL, заголовок, тело и т. д., могут быть объявлены с помощью аннотаций Java.
Вот каштан высоконравственной карты, чтобы увидеть, как Forest элегантно объявляет интерфейс HTTP-запроса:
/**
* 高德地图服务客户端接口
*/
@BaseRequest(baseURL = "http://ditu.amap.com")
public interface Amap {
/**
* 根据经纬度获取详细地址
* @param longitude 经度
* @param latitude 纬度
* @return 详细地址信息
*/
@Get("/service/regeo")
Map getLocation(@Query("longitude") String longitude, @Query("latitude") String latitude);
}
... ...
Amap amp = Forest.client(Amap.class);
// 发送请求查询经纬度
Map locationInfo = amp.getLocation("32.1242832", "56.3290434");
Автоматическое преобразование JSON и XML
На самом деле, когда мы работаем с HTTP, помимо траты различных параметров запроса, большую часть времени тратится на сериализацию и десериализацию данных в различных форматах, таких как JSON и XML.
До использования HttpClient эту повторяющуюся механическую работу приходилось выполнять самому, что было очень хлопотно.
Намного удобнее использовать Forest, например, если вы хотите опубликовать объект JSON, просто повесьте @JSONBody напрямую, это так освежает.
// 直接将 MyUserInfo 转换成 JSON
// 将服务端响应返回的 JSON 数据转换成 Result<Boolean> 类对象
@Post("http://localhost:8080/user")
Result<Booelean> createUser(@JSONBody MyUserInfo user);
Сравнение с Retrofit и Feign
Я использовал эти две среды с открытым исходным кодом раньше, и они обе мощные, но у каждой есть свои преимущества и недостатки.
Основная проблема Retrofit в том, что он слишком привязан к OkHttp, а некоторые функции ограничены OkHttp.Например, мне сложно обрабатывать нестандартные HTTP-запросы типа Get-запросов на передачу данных Body, в то время как Forest может переключаться между OkHttp и OkHttp по желанию.HttpClient используется в качестве бэкенда, который следует использовать при необходимости.
Богатство аннотаций Retrofit также не так хорошо, как у Forest: например, для реализации сетевого HTTP-прокси нужно писать код самостоятельно, а Forest предоставляет аннотацию @HTTPProxy, что делается после его настройки.
Если вы хотите расширить пользовательские аннотации, все они основаны на перехватчиках OkHttp, что не особенно удобно, в то время как перехватчики Forest намного удобнее, чем OkHttp, предоставляя методы обратного вызова, такие как onInvoke, beforeExecute, onSccuess, onError и т. д., что эквивалентно освещению жизни и смерти запроса.
Проблема с Feign заключается в том, что он слишком сильно привязан к Spring. Многие функции должны выполняться Spring. Слишком много пакетов, связанных со Spring, слишком тяжелы.
Базовый пакет Forest в основном покрывает все функции и аннотации, необходимые для HTTP, не зависит от Spring, намного легче и удобнее.
Чтобы узнать больше, см.:git ee.com/Доктор Омар А/ Будда Ру…
LiteFlow
Сверхлегкий, быстрый, стабильный и управляемый компонентный механизм обработки/правил.
Артефакт разделения сложных систем! Если у вас есть головная боль при проектировании сложной системы, то LiteFlow — лучший выбор для вас со сверхнизкими затратами на обучение и мощными функциями оркестровки, делающими вашу систему более элегантной!
Официальный сайт:yomahub.com/liteflow
Размещенный Gitee репозиторий:git ee.com/Доктор Омар А/стерео…
Размещенный на Github репозиторий:GitHub.com/д-р Омар А/стерео…
Liteflow был создан для разделения сложной логики.Если вы хотите переписать или реорганизовать сложную бизнес-логику, liteflow является наиболее подходящим вариантом. Это легкая и быстрая платформа механизма процессов на основе компонентов, которая организует компоненты, помогая отделить бизнес-код и сделать каждый бизнес-сегмент компонентом.
С Liteflow вам нужно разделить сложную бизнес-логику на небольшие компоненты по фрагментам кода и определить конфигурацию процесса правил. Таким образом, все компоненты могут быть настроены в соответствии с вашими правилами для сложного потока. При этом Liteflow поддерживает горячую загрузку файлов правил, и модификация вступает в силу немедленно. И предоставьте различные способы сохранения расширений правил.
В LiteFLow тремя основными понятиями являются компоненты, правила и контекст.
Вам нужно определить свой компонент следующим образом
//这里普通组件
@LiteflowComponent(id = "a", name = "组件A描述")
public class ACmp extends NodeComponent {
@Override
public void process() {
//do your business
}
}
//这是条件组件
@LiteflowComponent(id = "b", name = "组件B描述")
public class BCondCmp extends NodeCondComponent {
@Override
public String processCond() {
//do your business
return "e";
}
}
Затем перейдите к определению ваших правил, LiteFlow поддерживает три формата xml, yml, json, вот пример формата xml
<?xml version="1.0" encoding="UTF-8"?>
<flow>
<chain name="chain1">
<then value="a,b(c|d|e)"/> <!-- c为路由组件,用来路由到c,d,e -->
<then value="sub_chain"/> <!-- 子流程 -->
</chain>
<chain name="sub_chain">
<when value="f,g,h"/> <!-- when代表并行 -->
<then value="j,k" /> <!-- then代表串行 -->
</chain>
</flow>
Таким образом, ваша система будет выполнять ваши бизнес-компоненты способом, определенным в файле правил. Разве это не просто.
Где определяется файл правил? LiteFlow не ограничивает источник вашего файла правил. Это может быть локальный файл, реестр или любая база данных. LiteFlow предоставляет очень бесплатный интерфейс для расширения, вы можете хранить его где угодно. Измените файл правил, чтобы обновить поток правил в режиме реального времени! Если вы хотите создать очень гибкую и масштабируемую систему, вам подойдет LiteFlow?
LiteFlow разрабатывает и подает заявку на слот для каждого запроса, вы можете понимать это как контекст, и все компоненты разделяют этот слот. Вы можете получить произвольные данные, обратившись к Slot в любом компоненте, а также можете хранить произвольные данные. Вы также можете расширить Slot, чтобы настроить свойства этого слота.
@LiteflowComponent(id = "a", name = "组件A描述")
public class ACmp extends NodeComponent {
@Override
public void process() {
Slot slot = this.getSlot();
//通过对slot的getData,setData,或者存取你自己扩展的slot属性
}
}
Именно благодаря наличию Slot сглаживаются различия между компонентами, благодаря чему нет сильной зависимости между каждым бизнес-компонентом. Такой дизайн может сделать вашу систему очень свободной, повторное использование компонентов и порядок замены компонентов могут быть легко реализованы!
LiteFlow также поддерживает доступ к двум языкам сценариев, в настоящее время поддерживаются Groovy и QLExpress. Вы можете определить сценарии в xml/yml/json, в качестве примера используется xml:
<?xml version="1.0" encoding="UTF-8"?>
<flow>
<nodes>
<node id="s1" name="普通脚本" type="script">
<![CDATA[
def a=3;
def b=2;
slot.setData("s1",a*b);
]]>
</node>
<node id="s2" name="条件脚本" type="cond_script">
<![CDATA[
count = slot.getData("count");
if(count > 100){
return "a";
}else{
return "b";
}
]]>
</node>
</nodes>
<chain name="chain1">
<then value="a,b,c,s1"/>
</chain>
<chain name="chain2">
<then value="d,s2(a|b)"/>
</chain>
</flow>
Итак, где вы определяете, какой язык скрипта используется?Скриптовая функция LiteFlow является реализацией механизма SPI.Какой пакет скриптов, на который вы полагаетесь, выполняется в каком режиме скрипта.
С поддержкой языков сценариев можно ли даже бизнес-код развертывать в горячем режиме? Он ароматный?
Функции LiteFlow гораздо шире.Если вы хотите узнать больше, перейдите на официальную документацию веб-сайта, чтобы проверить и понять. Поверьте, с LiteFlow вы будете чувствовать себя элегантно и сногсшибательно.
Чтобы узнать больше, см.:yomahub.com/liteflow
JPom
Простая и легкая онлайн-конструкция с низким уровнем вмешательства, автоматическое развертывание, ежедневная эксплуатация и обслуживание, программное обеспечение для мониторинга проекта.
Евангелие DevOps для малых и средних компаний! Легкий и мощный, не пробовали?
Официальный сайт:jpom.io/
Размещенный Gitee репозиторий:git ee.com/Dr Omar A/Jpo…
Размещенный на Github репозиторий:GitHub.com/д-р Омар А/Джпо…
Jpom - это простая и легкая онлайн-конструкция с низким уровнем вмешательства, автоматическое развертывание, ежедневная эксплуатация и обслуживание, программное обеспечение для мониторинга проектов.
существует中小公司或者团队
Распространенным методом для традиционных процессов развертывания, эксплуатации и обслуживания проектов в Китае является вход на сервер для загрузки нового пакета проекта, выполнение соответствующих команд управления и повторение вышеуказанных шагов при управлении несколькими проектами.
На рынке есть много программного обеспечения DevOps, но это программное обеспечение в основном сложно использовать, и на него в значительной степени полагаются. Jpom для中小公司或者团队
разработал один低侵入
,轻依赖
один из轻量级
Программное обеспечение DevOps.
Основные функции и особенности проекта
- Создание, изменение, удаление проектов, управление пакетами Jar
- Просматривайте журналы консоли, журналы резервного копирования, удаляйте журналы и экспортируйте журналы в режиме реального времени.
- Создайте проект онлайн и опубликуйте проект одним щелчком мыши.
- Многоузловое управление, многоузловое автоматическое распределение
- Онлайн-терминал SSH с журналами терминала и отключенными командами
- Мониторинг состояния проекта в режиме реального времени, ненормальная автоматическая сигнализация
- процессор, мониторинг оперативной памяти, экспорт информации о стеке, просмотр порта процесса проекта, мониторинг состояния сервера
- Многопользовательское управление, независимые права пользователей на проект (можно контролировать права на загрузку и удаление), идеальный журнал операций
- Режим белого списка системных путей, чтобы пользователи не могли ошибочно использовать файлы операционной системы.
- Онлайн-управление файлами конфигурации Nginx, файлами сертификатов ssl
Установка в один клик (Linux) (рекомендуется)
Сторона плагина
Если сервер также нуждается в управлении, плагин также должен быть установлен на сервере.
Путь установки находится в каталоге команд выполнения (каталоги хранения данных и журналов по умолчанию находятся в пути установки. Если вам нужно изменить эталонный файл конфигурации:
extConfig.yml
)
yum install -y wget && wget -O install.sh https://dromara.gitee.io/jpom/docs/install.sh && bash install.sh Agent
备用地址
yum install -y wget && wget -O install.sh https://cdn.jsdelivr.net/gh/dromara/Jpom/docs/install.sh && bash install.sh Agent
支持自动安装jdk环境
yum install -y wget && wget -O install.sh https://dromara.gitee.io/jpom/docs/install.sh && bash install.sh Agent jdk
После успешного запуска порт на стороне подключаемого модуля2123
Сервер
Путь установки находится в каталоге команд выполнения (каталоги хранения данных и журналов по умолчанию находятся в пути установки. Если вам нужно изменить эталонный файл конфигурации:
extConfig.yml
)Если вам нужно изменить пути хранения данных и журналов, см.
extConfig.yml
в файлеjpom.path
свойства конфигурации
yum install -y wget && wget -O install.sh https://dromara.gitee.io/jpom/docs/install.sh && bash install.sh Server
备用地址
yum install -y wget && wget -O install.sh https://cdn.jsdelivr.net/gh/dromara/Jpom/docs/install.sh && bash install.sh Server
支持自动安装jdk环境
yum install -y wget && wget -O install.sh https://dromara.gitee.io/jpom/docs/install.sh && bash install.sh Server jdk
支持自动安装jdk和maven环境
yum install -y wget && wget -O install.sh https://dromara.gitee.io/jpom/docs/install.sh && bash install.sh Server jdk+mvn
После успешного запуска порт сервера2122
Посетите страницу администратора, например.http://localhost:2122/
Специальное напоминание: при установке в один клик обратите внимание, что команда выполнения не может находиться в одном и том же каталоге, то есть серверная часть и агент не могут быть установлены в один и тот же каталог.
Если вы не можете получить доступ, проверьте, включен ли брандмауэр
systemctl status firewalld
, если статус отображается зеленым цветомActive: active (running)
Временно отключите брандмауэрsystemctl stop firewalld
, затем перезапустите брандмауэрfirewall-cmd --reload
(Рекомендуется использовать его только в тестовой среде и с осторожностью использовать в производственной среде) Если вы по-прежнему не можете получить доступ после отключения брандмауэра и используете облачный сервер, вам нужно перейти в фон управления облачным сервером, чтобы отключить брандмауэр.
Чтобы узнать больше, см.:git ee.com/Dr Omar A/Jpo…
Наконец
Рекомендованные выше проекты с открытым исходным кодом — это всего лишь 4 из них в сообществе Dromara Java, и в сообществе Dromara есть еще много отличных проектов с открытым исходным кодом. Каждый проект воплощает в себе тяжелую работу и самоотверженность каждого автора днем и ночью.
Мы стремимся сиять, чтобы освещать других, но также и самих себя.
В то же время я также надеюсь, что больше авторов Java с открытым исходным кодом смогут присоединиться к сообществу Dromara, собрать силы нашего поколения, собрать достижения всех королей, преодолеть трудности и помогать друг другу в одной лодке.
Наконец, когда вы увидите эту детскую обувь, ставьте лайк, делитесь ею и смотрите!