Antenna — это простой фреймворк управления сервисами по принципу точки-к-точке, который также может служить гибким и компактным фреймворком для разработки приложений MVC.
Общая логическая архитектура этого фреймворка следующая:
Снизу вверх слои представлены следующим образом: слой данных, слой сервисов, конфигурационный слой и слой доступа.
Единое обслуживание запросов и абстракция вызова сервисов.
Предоставляет единое аутентификационное и шифровальное обеспечение передачи.
Предоставляет контроль за параллелизмом посетителей.
Единое асинхронное записывание журналов.
Единое и упакованное обеспечение ввода и вывода запросов.
Управление текущими соединениями.
Для вызывающих сторон предоставляется механизм повторной попытки.
Предоставляет единую систему обработки исключений.
Предоставляет единую функцию фильтрации запросов.
Через конфигурацию предлагается гибкая расширяемость функциональности.
Предоставляет простые мониторинговые функции, включая мониторинг процессов посетителей, статистику вызовов, трассировку журналов и т.д.## Если ваша команда находится в одной из этих ситуаций, то этот фреймворк может оказаться очень подходящим для вас!
У вас есть несколько приложений, работающих онлайн, и эти приложения должны взаимодействовать друг с другом через интерфейсы. Введение Dubbo или Spring Cloud может привести к слишком высоким техническим затратам; если вам просто нужно эффективно управлять службами, то Antenna может стать отличным выбором.
У вас есть несколько приложений, работающих онлайн, и эти приложения должны взаимодействовать друг с другом через интерфейсы, но эти интерфейсы распределены по различным приложениям с разными методами и подходами к обработке данных, что делает трудной задачей обеспечение единообразного качества и унифицированного мониторинга анализа производительности различных интерфейсов.
<dependency>
<groupId>com.waspring.framework</groupId>
<artifactId>antenna-access</artifactId>
<version>1.0.0</version>
</dependency>
<listener>
<listener-class>com.waspring.framework.antenna.access.servlet.AntennaListener</listener-class>
</listener>
<context-param>
<param-name>atennaConfigLocation</param-name>
<param-value>
classpath://config.xml
</param-value>
</context-param>
<context-param>
<param-name>atennaPropertyLocation</param-name>
<param-value>
classpath://root.properties
</param-value>
</context-param>
atennaConfigLocation
указывает на конфигурационный файл входа и поддерживает протоколы: classpath://
, file://
, http://
.atennaPropertyLocation
используется для конфигурации свойств, таких как ключ, секрет, отладка, директория логов и т. д.* Если значение параметра debug установлено в true, то аутентификация и шифрование не будут применяться, следовательно, значения key и secret будут игнорированы. ### Конфигурация сервлета <servlet>
<servlet-name>antennaServlet</servlet-name>
<servlet-class>com.waspring.framework.antenna.access.servlet.AntennaServlet</servlet-class>
<init-param>
<param-name>containerId</param-name>
<param-value>antennaContainer</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>antennaServlet</servlet-name>
<url-pattern>/antenna</url-pattern>
</servlet-mapping>
PropertiesUtil.loadConfig("classpath://root.properties");
IApplication application = ApplicationUtil.getApplication().setConfigFilePath("classpath://config.xml");
LifecycleUtils.init(application);
LifecycleUtils.destroy(application);
// Обратите внимание: здесь используется имя контейнера, указанное в основном конфигурационном файле
IVisitorContainer container = ApplicationUtil.getApplication().applyContainer("antennaContainer");
IRequest request = ApplicationUtil.instanceServerRequest(container.getId(), request); // Здесь request также можно создать самостоятельно, установив параметр isServer=true
IVisitor visitor = null;
visitor = container.establishVisitor(request);
// Получение ответа
System.out.println(visitor.getResponse());
```# Использование вызывающей стороны
## Использование в J2EE контейнере
```java
IVisitorContainer container = ApplicationUtil.getApplication().applyContainer("antennaContainer");
// Через bean создается объект запроса, аналогично свойство action будет использоваться для маршрутизации invoker.
// Также bean имеет требования, поля должны быть помечены аннотацией RequestField, чтобы были отображены в запросе.
IRequest request = ApplicationUtil.instanceClientRequest(container.getId(), new TestBean());
IVisitor visitor = null;
visitor = container.establishVisitor(request);
```## Получение ответа
```java
System.out.println(visitor.getResponse());
Для запуска системы требуется выполнить следующее при старте:
PropertiesUtil.loadConfig("classpath://root.properties");
IApplication application = ApplicationUtil.getApplication().setConfigFilePath("classpath://config.xml");
LifecycleUtils.init(application);
При завершении работы системы вызывается:
LifecycleUtils.destroy(application);
```# Описание конфигурационных файлов
## Антенна требует двух обязательных конфигурационных файла - `config.xml` и `root.properties`. Конфигурация `config.xml` предназначена для контейнера, а `root.properties` — для начальной настройки системы.
### Пример детального содержимого файла `config.xml`
См. подробное описание [конфигурации](https://github.com/fellyvon/antenna/blob/master/doc/configGruid.md)
#### Пример конфигурации файла `root.properties`
```properties
# Ключ для аутентификации связи
key=123501
# Секрет для аутентификации связи
secret=RTUDUDO0232KDJDU1Ie33IIU3139I
# Отладочная модель, если установлено значение true, то аутентификация связи не будет активирована
debug=true
# По умолчанию папка хранения логов связи
logdir=logs
Перейдите в каталоги antenn-client
или antenn-monitor
.# Улучшение фреймворка
В настоящий момент этот фреймворк слабо поддерживает управление сервисами; он поддерживает только точечное обнаружение сервисов и зависит от локальных конфигураций сервисов.
Чтобы повысить параллелизацию обработки запросов, каждый раз при обращении через visitor создаётся новый объект provider или invoker с помощью рефлексии, что снижает производительность и увеличивает потребление памяти. Мы можем использовать подход, аналогичный servlet, где обрабатывающий процесс создаётся один раз, а методы доступа гарантируют потокобезопасность.
В настоящее время многие ошибки просто игнорируются и не передаются дальше, хотя можно отслеживать их через журнал; мы хотим, чтобы большинство ситуаций с ошибками можно было распознать непосредственно на стороне пользователя.
В настоящее время конфигурация принимателей и вызывающих сторон осуществляется через XML, а также требуется указание контейнера при запуске приложения, что делает процесс довольно трудоёмким. Мы хотим упростить этот процесс с использованием аннотаций.> Кроме того, текущая реализация не поддерживает динамическое изменение конфигурации, которое можно было бы реализовать с помощью третьих сторон для обеспечения глобальной согласованности.
Настоящий фреймворк поддерживает аутентификацию и шифрование, но имеет два недостатка: во-первых, эффективность очень низкая при больших объемах передаваемых данных; во-вторых, механизм аутентификации зависит от локальных конфигураций сторон, что значительно снижает безопасность и удобство использования. В настоящее время эти проблемы могут быть решены путем расширения объекта запроса, например, используя центр аутентификации третьей стороны.
По умолчанию журнал коммуникаций в этом фреймворке хранится в локальном файле с использованием асинхронной очереди. В реальных условиях мы обычно используем сторонние службы хранения данных. Это можно реализовать через расширение IQueueTaskHandler.
Реализация механизма повторной попытки основана на стороннем фреймворке guava-retrying, который был немного упакован, что сделал использование проще, но способность к расширению была снижена.
Здесь компенсация относится к ситуации, когда после неудачного вызова происходит перезапуск сервиса, и вопрос стоит ли делать повторную попытку.В настоящее время этот механизм не поддерживается фреймворком. Можно рассмотреть варианты предварительной записи запросов и других решений! Для подробной информации о разработке см. :Руководство разработчика
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )