# antenna
**Repository Path**: v5uncode_admin/antenna
## Basic Information
- **Project Name**: antenna
- **Description**: Antenna——一款简单的点对点服务治理框架,同时它也可以作为一款灵活小巧的MVC开发框架。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 10
- **Created**: 2018-02-13
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
Antenna-框架介绍
====
# 简介
Antenna——一款简单的点对点服务治理框架,同时它也可以作为一款灵活小巧的MVC开发框架。
该框架总体逻辑架构如下:

自底向上分别为:数据层、服务层、配置层、接入层。
* 数据层:用于持久化配置、日志、分析数据、缓存等
* 服务层:提供业务逻辑等服务的实现,分为三大类:基础服务类、工具服务类、业务服务类。
* 配置层:本框架提供配置 对外暴露的接口、可调用的接口以及一些规则的配置,比如接口暴露策略、通讯协议、白名单、重试策略、加密策略、认证策略、日志框架、异常处理策略、接口路由配置。
* 接入层:本框架的暴露给外部的接口以及实现,包含接入和输出管理,同时也提供了容器的管理和支持,出口即接口调用,入口即接口受理。
# 功能介绍
* 统一的服务受理、服务调用抽象。
* 提供统一的传输认证和加密。
* 提供访问者并发控制。
* 统一的异步日志记录。
* 统一并封装了请求输入和输出。
* 对正在进行的访问可控。
* 针对调用者,提供重试机制。
* 提供统一的异常处理机制。
* 提供统一的请求过滤功能。
* 通过配置,提供灵活的功能扩展。
* 提供简单的监控功能,包括访问者进程、调用统计、日志跟踪等。
## 如果您的团队处在这种境况,那么本框架可能非常适合您!
* 线上存在多应用服务,同时多应用之间需要通过接口相互通讯,若引入dubbo、springcloud可能技术成本又太高,若想简单的进行服务治理,那么antenna可能是一个不错的选择。
* 线上存在多应用服务,同时多应用之间需要通过接口相互通讯,但通讯接口分布在不同的应用中,写法千差万别,处理方式层出不穷,质量得不到统一保障,也无法统一监控分析各个接口的运作成绩。
# 使用方法
## 通过maven依赖开发包
```xml
com.waspring.framework
antenna-access
1.0.0
```
# 提供者使用
## 若在j2ee容器中
### 那么在web.xml中添加监听器和服务受理servlet
#### 监听器
```xml
com.waspring.framework.antenna.access.servlet.AntennaListener
atennaConfigLocation
classpath://config.xml
atennaPropertyLocation
classpath://root.properties
```
* 参数atennaConfigLocation为为入口的配置文件,支持协议:classpath://,file://,http://
* 参数atennaPropertyLocation 为属性配置,主要是指定key,sercret,debug,logdir等参数。
* 若debug为true,那么传输认证和加密都不生效,即key,sercret配置无效。
### Servlet配置
```xml
antennaServlet
com.waspring.framework.antenna.access.servlet.AntennaServlet
containerId
antennaContainer
antennaServlet
/antenna
```
* containerId配置和配置文件中对应的容器ID
* 这里大家可能会问多个容器怎么办? 嗯,配置多个servlet对应!
* 接口访问地址:http://ip:port/servletname?action=providerID
## 若不在j2ee容器环境
### 系统启动申请applicaiton,代码如下:
```java
PropertiesUtil.loadConfig("classpath://root.properties");
IApplication application = ApplicationUtil.getApplication().setConfigFilePath("classpath://config.xml");
LifecycleUtils.init(application);
```
### 系统关闭的时候调用:
```java
LifecycleUtils.destory(application);
```
### 申请容器
```java
//注意:这里用到的容器名称即主配置文件配置的对应容器ID
IVisitorContainer container = ApplicationUtil.getApplication().applyContainer("antennaContainer");
```
### 随后获取提供者访问
```java
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创建request对象,同样action属性会去路由invoker。
//同时bean有要求,字段只有添加了RequestField注解,才会被映射到request。
IRequest request = ApplicationUtil.instanceClientRequest(container.getId(), new TestBean());
IVisitor visitor = null;
visitor = container.establishVisitor(request);
//获取结果
System.out.println(visitor.getResponse());
```
## 不在j2ee容器环境
那么需要在系统启动的时候执行:
```java
PropertiesUtil.loadConfig("classpath://root.properties");
IApplication application = ApplicationUtil.getApplication().setConfigFilePath("classpath://config.xml");
LifecycleUtils.init(application);
```
系统关闭的时候调用:
```java
LifecycleUtils.destory(application);
```
# 配置文件介绍
## antenna的必须配置文件两个,即上面我们看到的config.xml和root.properties,config.xml为容器配置;root.properties为系统初始化配置。
### 下面是一个config.xml的详细实例
```xml
```
#### 下面是一个root.properties配置的实例
```java
#通讯认证用到key
key=123501
#通讯认证用到的sercret
secret=RTUDUDO0232KDJDU1Ie33IIU3139I
#调试模式,设置为true通讯认证不会开启
debug=true
#默认通讯日志存储目录
logdir=logs
```
# 开发第一个demo
请移步 antenn-client 或者 antenn-monitor