1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/felly822-antenna

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Antenna-logoВведение в фреймворк Antenna

Обзор

Antenna — это простой фреймворк управления сервисами по принципу точки-к-точке, который также может служить гибким и компактным фреймворком для разработки приложений MVC.
Общая логическая архитектура этого фреймворка следующая:
Архитектура фреймворка
Снизу вверх слои представлены следующим образом: слой данных, слой сервисов, конфигурационный слой и слой доступа.

  • Слой данных: используется для хранения конфигураций, журналов, аналитических данных, кэширования и т.д.
  • Слой сервисов: предоставляет реализацию бизнес-логики сервисов, разделённых на три категории: базовый сервисный класс, сервисный класс инструментов и бизнес-сервисный класс.
  • Конфигурационный слой: этот фреймворк предоставляет конфигурируемые внешние интерфейсы, вызываемые интерфейсы и некоторые правила конфигурации, такие как стратегия экспонирования интерфейсов, протокол связи, белый список, политика повторной попытки, стратегия шифрования, стратегия аутентификации, фреймворк журналирования, стратегия обработки исключений и конфигурация маршрутизации интерфейсов.
  • Слой доступа: внешние экспонируемые интерфейсы и их реализация в этом фреймворке, включающая управление входом и выходом, а также управление контейнерами и поддержку. Выход относится к вызовам интерфейсов, а вход — к принятию запросов интерфейсов.

Введение в функциональность

  • Единое обслуживание запросов и абстракция вызова сервисов.

  • Предоставляет единое аутентификационное и шифровальное обеспечение передачи.

  • Предоставляет контроль за параллелизмом посетителей.

  • Единое асинхронное записывание журналов.

  • Единое и упакованное обеспечение ввода и вывода запросов.

  • Управление текущими соединениями.

  • Для вызывающих сторон предоставляется механизм повторной попытки.

  • Предоставляет единую систему обработки исключений.

  • Предоставляет единую функцию фильтрации запросов.

  • Через конфигурацию предлагается гибкая расширяемость функциональности.

  • Предоставляет простые мониторинговые функции, включая мониторинг процессов посетителей, статистику вызовов, трассировку журналов и т.д.## Если ваша команда находится в одной из этих ситуаций, то этот фреймворк может оказаться очень подходящим для вас!

  • У вас есть несколько приложений, работающих онлайн, и эти приложения должны взаимодействовать друг с другом через интерфейсы. Введение Dubbo или Spring Cloud может привести к слишком высоким техническим затратам; если вам просто нужно эффективно управлять службами, то Antenna может стать отличным выбором.

  • У вас есть несколько приложений, работающих онлайн, и эти приложения должны взаимодействовать друг с другом через интерфейсы, но эти интерфейсы распределены по различным приложениям с разными методами и подходами к обработке данных, что делает трудной задачей обеспечение единообразного качества и унифицированного мониторинга анализа производительности различных интерфейсов.

Способ использования

Добавление зависимости через Maven

<dependency>
    <groupId>com.waspring.framework</groupId>
    <artifactId>antenna-access</artifactId>
    <version>1.0.0</version>
</dependency>

Использование для предоставляющих сторон

В случае использования в j2ee контейнере

Нужно добавить слушатель и сервисный servlet в web.xml

Слушатель

<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>
  • Настройка containerId и соответствующий ей контейнер в конфигурационном файле
  • Здесь могут возникнуть вопросы о том, как настроить несколько контейнеров? Да, просто настройте несколько сервлетов!
  • Адрес доступа к интерфейсу: http://ip:port/servletname?action=providerID## В случае отсутствия J2EE контейнера

При запуске системы создается заявка на приложение, код приведен ниже:

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());

Вне контейнера J2EE

Для запуска системы требуется выполнить следующее при старте:

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 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/felly822-antenna.git
git@api.gitlife.ru:oschina-mirror/felly822-antenna.git
oschina-mirror
felly822-antenna
felly822-antenna
master