Вода
一站式分布式服务治理中台。Простая работа, ранний уход с работы.
Java-сервис разработки и управления, предоставляющий комплексное решение (можно понимать как поддержку пакета микросервисной архитектуры). Разработан на основе фреймворка Solon и поддерживает полный стандарт Solon Cloud; работает в производственной среде уже 4 года.
Функции аналогичны: consul + rabbitmq + elk + prometheus + openFaas + quartz + и т. д., а также органично объединены. Или примерно равны: nacos + rocketmq + PlumeLog + prometheus + magic-api + xxl-job + и др.
Дружелюбен к k8s, поддерживает миграцию IP-адресов, поддерживает сопоставление k8s svc (через восходящую конфигурацию, можно напрямую сделать обнаружение службы как адрес службы k8s).
Компонент | Описание |
---|---|
org.noear:water.client | Фреймворк: клиент Water |
org.noear:water-solon-cloud-plugin | Фреймворк: клиент Water for solon (также может использоваться для проектов Spring Boot) |
org.noear:waterapi | Сборка: сервер Water |
org.noear:watersev | Сборка: фоновый сервис Water (мониторинг работоспособности; мониторинг данных; рассылка сообщений; планирование задач и т.д.) |
org.noear:wateradmin | Сборка: консоль управления Water (поддерживает вход в систему LDAP) |
org.noear:waterfaas | Сборка: сервис FaaS Water, предоставляет облегчённые сервисы FaaS |
org.noear:xwater | Сборка: помощник Water |
Адрес: http://water.noear.org (учётная запись: demo; пароль: demo)
Ключевое описание персистентности:
Адрес: https://gitee.com/noear/marsh
[Water Урок 2] Опыт разработки с использованием Solon Coud + Water
[Water Урок 3] Water — это комплексная платформа управления услугами, давайте узнаем больше
[Water Урок 4] Конфигурация приложений служб и ключевые дизайнерские идеи
[Water Урок 5] Применение сервиса журналов и дизайн лёгкого и быстрого клиента
[Water Урок 6] Применение общей шины сообщений и общий обзор внутренней архитектуры
[Water Урок 7] Практическое применение FaaS
[Water Урок 8] Мониторинг услуг и количественный мониторинг
[Water Урок 9] Управление несколькими учётными записями и настройка разрешений, а также конфигурация входа в систему LDAP
[Water Урок++] Развёртывание и запуск на основе исходного кода
<!-- Клиентская версия -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>water.client</artifactId>
<version>2.15.1</version>
</dependency>
<!-- Интеграция с Solon cloud (также можно использовать в проектах Spring Boot) -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>water-solon-cloud-plugin</artifactId>
<version>3.0.3</version>
</dependency>
solon.app:
name: "wateradmin"
group: "water"
solon.cloud.water:
server: "waterapi:9371" #WATER сервис адрес
config:
load: "test.yml" #По умолчанию загруженная конфигурация
log:
default: "water_log_admin" #По умолчанию регистратор
public class DemoApp {
public void
``` Данный текст написан на языке Java.
**main(String[] args)** {
SolonApp app = Solon.start(DemoApp.class, args);
// Мониторинг службы: добавление интерфейса для записи производительности (обычно этот фильтр записывается как отдельный класс)
Logger log = LoggerFactory.getLogger(DemoApp.class);
app.filter((ctx, chain) -> {
// 1. Начало отсчёта времени (для расчёта продолжительности ответа)
long start = System.currentTimeMillis();
try {
chain.doFilter(ctx);
} catch (Throwable e) {
// 2. Также регистрируем исключение
log.error("{}",e);
} finally {
// 3. Получаем продолжительность ответа интерфейса
long milliseconds = System.currentTimeMillis() - start;
CloudClient.metric().addMeter(Solon.cfg().appName(), "path", ctx.pathNew(), milliseconds);
}
});
}
@Configuration
public class DemoConfig {
@Bean
public DataSource db1(@CloudConfig("demoDb") HikariDataSource ds) {
// Конфигурирование источника данных
return ds;
}
@Bean
public I18nBundleFactory i18nBundleFactory(){
// Переключение на облачный интерфейс для международных услуг
return new CloudI18nBundleFactory();
}
}
@Slf4j
@Controller
public class DemoController{
@CloudConfig(name = "demoDb", autoRefreshed = true) // Настройка функций сервиса (аннотированный режим)
DbContext demoDb;
@NamiClient // Обнаружение RPC-сервиса (аннотированный режим)
RockService rockService;
@Mapping("/")
public void test(){
// Сервис журнала: запись журнала
log.info("你好,日志服务"); //(content)
TagsMDC.tag0("demo");
log.error("{}\r\n{}","test","你好,日志 службы"); //(tag,summary,content)
// Конфигурация сервиса: использование контекста базы данных конфигурации для запроса
Map map = demoDb.table("water_reg_service").limit(1).selectMap("*");
// Служба сообщений: отправка сообщения
CloudClient.event().publish(new Event("demo.test", "{\"order_id\":1}")); //(非注解模式)
// RPC-обнаружение сервиса: вызов RPC-интерфейса
AppModel app = rockService.getAppById(12);
}
}
// Подписка на сообщения: подписка и обработка сообщений (подписка по теме)
@Slf4j
@CloudEvent("demo.test")
public class Event_demo_test implements CloudEventHandler {
@Override
public boolean handle(Event event) throws Exception {
// Обработка сообщения...
log.info("Я получил сообщение: " + event.content());
return true;
}
}
// Конфигурация подписки: отслеживание обновлений конфигурации в реальном времени
@CloudConfig("demoDb")
public class TestConfigHandler implements CloudConfigHandler {
@Override
public void handle(Config config) {
}
}
// Распределённая задача
@CloudJob(name = "demo_test", cron7x = "0 1 * * * ?")
public class Job_test implements CloudJobHandler {
@Override
public void handle(Context ctx) throws Throwable {
// Выполнение задачи...
log.info("Меня запланировали");
}
} Функции вычисления
<img src="https://gitee.com/noear/water/raw/master/preview/f1.png" height="300"/>
<img src="https://gitee.com/noear/water/raw/master/preview/f2.png" height="300"/>
<img src="https://gitee.com/noear/water/raw/master/preview/f5.png" height="300"/>
<img src="https://gitee.com/noear/water/raw/master/preview/fx.png" height="300"/>
Помощник в разработке
<img src="https://gitee.com/noear/water/raw/master/preview/h1.png" height="300"/>
<img src="https://gitee.com/noear/water/raw/master/preview/h2.png" height="300"/>
<img src="https://gitee.com/noear/water/raw/master/preview/h3.png" height="300"/>
<img src="https://gitee.com/noear/water/raw/master/preview/h4.png" height="300"/>
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.