This commit is contained in:
wentch
2016-01-26 17:20:37 +08:00
parent 79e596c62f
commit e465e86706
8 changed files with 46 additions and 48 deletions

View File

@@ -24,11 +24,11 @@
</section>
<section class="main-content">
<h3><a id="convert_intro" class="anchor" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>Convert 组件介绍</h3>
<h3><a id="convert_intro" class="anchor" href="#" aria-hidden="true"></a>Convert 组件介绍</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Convert 是一个比较独立的组件仅依赖于util包。提供Java对象的序列化与反序列化功能。支持JSON(JavaScript Object Notation)、BSON(Binary Stream Object Notation)两种格式化。 两种格式使用方式完全一样其性能都大幅度超过其他JSON框架。同时JSON内置于HTTP服务中BSON也是SNCP协议数据序列化的基础。<br/></p>
<h3><a id="convert_study" class="anchor" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>Convert 快速上手</h3>
<h3><a id="convert_study" class="anchor" href="#" aria-hidden="true"></a>Convert 快速上手</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;本介绍仅以JSON为例(BSON与JSON使用方式雷同)。其操作类主要是JsonConvert配置类主要是JsonFactory、ConvertColumn。JsonFactory采用同ClassLoader类似的双亲委托方式设计。</br></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JsonConvert 序列化encode方法</p>
@@ -394,7 +394,7 @@
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由上可以看出Convert的自定义配置完全符合面向对象思想提倡在JavaBean内部去自定义非常规的构造函数或Decode、Encode方法通过Factory显式配置的方式通常用于非自己定义的数据类(如 java.io.File)。</p>
<br/>
<h3><a id="convert_bson_struct" class="anchor" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>BSON的协议格式</h3>
<h3><a id="convert_bson_struct" class="anchor" href="#" aria-hidden="true"></a>BSON的协议格式</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BSON类似Java自带的Serializable 其格式如下: <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1). 基本数据类型: 直接转换成byte[] <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2). SmallString(无特殊字符且长度小于256的字符串): length(1 byte) + byte[](utf8); 通常用于类名、字段名、枚举。 <br/>

View File

@@ -25,45 +25,39 @@
<section class="main-content">
<h3>
<a id="welcome-to-github-pages" class="anchor" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>RedKale 介绍</h3>
<a id="welcome-to-github-pages" class="anchor" href="#" aria-hidden="true"></a>RedKale 介绍</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RedKale (中文名: 红菜苔,湖北武汉的一种特产蔬菜) 是基于Java 8全新的微服务框架 包含HTTP、WebSocket、TCP/UDP、数据序列化、数据缓存、依赖注入等功能。
其功能相当于 Tomcat + Mina + Struts + Spring + Hibernate + RMI + JSON + Memcached 的综合体。 <br/>
本框架致力于简化集中式和微服务架构的开发,在增强开发敏捷性的同时保持高性能。<br/>
RedKale 有如下主要特点: <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、大量使用Java 8新特性接口默认值、Stream、Lambda、JDk8内置的ASM <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、提供HTTP服务同时内置JSON功能与限时缓存功能 <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3、TCP层完全使用NIO.2并统一TCP与UDP的接口 <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4、提供分布式与集中式部署的无缝切换 <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5、提供类似JPA功能并包含数据缓存自动同步与简洁的数据层操作接口 <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6、功能强大 但体积不到1.5M,且不依赖任何第三方包 <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、大量使用Java 8新特性接口默认值、Stream、Lambda、JDk8内置的ASM <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、提供HTTP服务同时内置JSON功能与限时缓存功能 <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3、TCP层完全使用NIO.2并统一TCP与UDP的接口 <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4、提供分布式与集中式部署的无缝切换 <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5、提供类似JPA功能并包含数据缓存自动同步与简洁的数据层操作接口 <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6、可以动态修改已依赖注入的资源。 <br/>
</p>
<h3>
<a class="anchor" href="#designer-templates" aria-hidden="true"><span class="octicon octicon-link"></span></a>亮点一. 轻量级HTTP</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RedKale 的HTTP是基于异步NIO.2实现的所提供的HttpResponse的输出接口也是异步的因此并不遵循JSR 340规范(Servlet 3.1)且也没有实现Jsp规范。 HTTP只提供四个对象HttpContext、HttpRequest、HttpResponse、HttpServlet。 传统Session则由数据层实现。RedKale提倡http+json接口(无论网站、PC客户端、APP移动端、第三方接口都可使用统一接口) 因此HTTP层内置了json解析与序列化接口同时内置http缓存机制。</p>
<h3><a class="anchor" href="convert.html" target="_blank" aria-hidden="true">亮点一. 序列化与反序列化</a></h3>
<h3>
<a class="anchor" href="#creating-pages-manually" aria-hidden="true"><span class="octicon octicon-link"></span></a>亮点二. 分布式WebSocket</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Convert包是RedKale内一个独立的组件 用于数据的序列化与反序列化。包分三块基本包、JSON包、BSON(Binary Stream Object Notation)包。基本包可以用于扩展其他序列化格式(如: XML)其JSON性能是其他任何JSON框架不能媲美的对于非常规的POJO类也提供了方便的自定义接口。BSON用于数据的二进制序列化与反序列化支持很复杂的泛型数据是SNCP协议的基础。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RedKale 的WebSocket接口不同于JSR 340(Servlet 3.1) 除了提供基本的WebSocket功能 还提供分布式与集中式部署, 当部署多个WebSocket进程时通过配置文件可以实现WebSocket之间连接信息的数据同步。</p>
<h3>
<a class="anchor" href="#authors-and-contributors" aria-hidden="true"><span class="octicon octicon-link"></span></a>亮点三. SNCP协议</h3>
<h3><a class="anchor" href="net.html#net_http" target="_blank" aria-hidden="true">亮点二. 轻量级HTTP</a></h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SNCP(Service Node Communicate Protocol)是RedKale独有的协议 类似RMI与WebService的功能结合主要用于进程间的数据传输。使用者通过配置文件可以轻易的将Service由本地模式变成远程模式。远程模式的Service使用SNCP协议与其他进程的Service通信。使用者无需对远程通信接口使用类似mina的第三方包自行开发。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RedKale 的HTTP是基于异步NIO.2实现的所提供的HttpResponse的输出接口也是异步的因此并不遵循JSR 340规范(Servlet 3.1)且也没有实现JSP规范。 HTTP只提供四个对象HttpContext、HttpRequest、HttpResponse、HttpServlet。 传统Session则由数据层实现。RedKale提倡HTTP+JSON接口(无论网站、PC客户端、APP移动端、第三方接口都可使用统一接口) 因此HTTP层内置了JSON序列化与反序列化接口同时内置HTTP缓存机制。<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RedKale 的<a href="net.html#net_ws" target="_blank">WebSocket服务</a>接口不同于JSR 340(Servlet 3.1) 除了提供基本的WebSocket功能 还提供分布式与集中式部署, 当部署多个WebSocket进程时通过配置文件可以实现WebSocket之间连接信息的数据同步。</p>
<h3>
<a class="anchor" href="#support-or-contact" aria-hidden="true"><span class="octicon octicon-link"></span></a>亮点四. DataSource</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RedKale提供DataSource类对数据层进行操作其功能类似JPA+Memcached。与JPA相比各有优缺点。 <br/>
优点: <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、Datasource中的内存缓存会自动与其他同服务的进程之间同步。 <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、简易的查询接口即时复杂的过滤查询都无需写SQL语句。 <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3、可以DataSource与业务逻辑层分开 独立成类似Memcached的内存数据源。 <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4、读写分离。动态切换数据库连接配置。 <br/>
缺点: <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、不提供复杂的关联表操作与查询。 </p>
<h3><a class="anchor" href="net.html#net_sncp" target="_blank" aria-hidden="true">亮点三. SNCP协议</a></h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SNCP(Service Node Communicate Protocol)是RedKale独有的协议 类似RMI与WebService的功能结合主要用于进程间的数据传输。使用者通过配置文件可以轻易的将Service由<a href="service.html#service_local" target="_blank">本地模式</a>变成<a href="service.html#service_remote" target="_blank">远程模式</a><a href="service.html#service_remote" target="_blank">远程模式Service</a>使用SNCP协议与其他进程的Service通信。使用者无需对远程通信接口使用类似Mina的第三方包自行开发。SNCP是RedKale的核心功能其微服务架构都是基于<a href="service.html#service_local" target="_blank">本地模式Service</a><a href="service.html#service_remote" target="_blank">远程模式Service</a></p>
<h3><a class="anchor" href="source.html#source_datasource" target="_blank" aria-hidden="true">亮点四. DataSource</a></h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RedKale提供DataSource类对数据层进行操作其功能类似JPA+Memcached。最大程度的简化数据层的操作免去SQL/JPQL语句的编写。同时提供过滤查询与JavaBean的结合、读写分离、数据库热切换、本地/远程部署、进程间缓存自动同步等功能。</p>
<footer class="site-footer">
<span class="site-footer-owner"><a href="https://github.com/wentch/redkale">RedKale</a> © <a href="https://github.com/wentch">wentch</a> &nbsp;&nbsp;&nbsp;&nbsp;欢迎加入RedKale技术交流QQ群: 527523235</span>

View File

@@ -24,10 +24,10 @@
</section>
<section class="main-content">
<h3><a id="net_intro" class="anchor" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>Net 组件介绍</h3>
<h3><a id="net_intro" class="anchor" href="#" aria-hidden="true"></a>Net 组件介绍</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Net 组件是基于AIO(NIO.2)的一套TCP/UDP的网络框架且只提供异步接口。org.redkale.net 是所有网络协议服务的基础包。RedKale内置HTTP和远程模式Service依赖的SNCP(Service Node Communicate Protocol)协议的实现包。RedKale启动的<b>&lt;server&gt;</b>节点服务都是基于Net组件实现的协议。下面详细介绍 <a href="#net_http">HTTP服务</a><a href="#net_sncp">SNCP协议</a></p>
<h3><a id="net_http" class="anchor" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>HTTP 服务</h3>
<h3><a id="net_http" class="anchor" href="#" aria-hidden="true"></a>HTTP 服务</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RedKale自实现的HTTP服务接口并不遵循Java EE规范JSR 340(Servlet 3.1)RedKale提倡的是HTTP+JSON的服务接口方式因此没有实现JSP规范HTTP+JSON服务接口几乎适合所有类型的客户端(PC应用程序、PC Web、微信H5、移动APP、移动Web)开发。其与JSR 340(Servlet 3.1)的主要区别如下:<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、内置参数的JSON反序列化和响应结果的序列化接口。<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、对数值型的参数和header值提供简易接口。<br/>
@@ -639,7 +639,7 @@
<span class="o">}</span>
<span class="o">}</span></pre></div>
<h3><a id="net_sncp" class="anchor" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>SNCP 协议</h3>
<h3><a id="net_sncp" class="anchor" href="#" aria-hidden="true"></a>SNCP 协议</h3>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SNCP(Service Node Communicate Protocol)协议是RedKale独有的一种传输协议用于进程之间的通信即请求方的<a href="service.html#service_remote" target="_blank">远程模式Service</a>与响应方的Service之间的通信。可以看成是RMI(远程接口调用)的同款主要区别在于RedKale里SNCP几乎是透明的写一个普通的Service通过配置即可实现远程调用而不需要专门针对远程写接口。SNCP服务的配置与HTTP差不多只是SNCP不需要ServletSncpServlet是通过Service动态生成的。<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SNCP的数据包分包头和包体。包头描述请求的Service信息请求包的包体描述参数的<a href="convert.html#convert_bson_struct" target="_blank">BSON值</a>,响应包的包体描述回调的参数对象和结果对象的<a href="convert.html#convert_bson_struct" target="_blank">BSON值</a><br/>
@@ -660,7 +660,7 @@
&nbsp;&nbsp;&nbsp;&nbsp;包体数据结构为 ([参数序号][参数BSON值])* N + [0][结果对象BSON]。 其中参数序号从1开始只有当Service的方法存在<a href="service.html#service_dyncall" target="_blank">@DynCall回调</a>才会有参数<a href="convert.html#convert_bson_struct" target="_blank">BSON值</a>序号为0表示为结果对象的<a href="convert.html#convert_bson_struct" target="_blank">BSON值</a>。若方法为<font color="blue">void</font>返回类型,则不存在结果对象<a href="convert.html#convert_bson_struct" target="_blank">BSON值</a>
</p>
<h3><a id="net_diy" class="anchor" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>自定义协议</h3>
<h3><a id="net_diy" class="anchor" href="#" aria-hidden="true"></a>自定义协议</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;协议的网络框架包含五种对象: <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Context &nbsp;&nbsp;&nbsp;&nbsp;: 协议上下文对象 <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Request &nbsp;&nbsp;&nbsp;: 服务请求对象 <br/>

View File

@@ -24,7 +24,7 @@
</section>
<section class="main-content">
<h3><a id="redkale_start" class="anchor" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>RedKale 功能</h3>
<h3><a id="redkale_start" class="anchor" href="#" aria-hidden="true"></a>RedKale 功能</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RedKale虽然只有1.xM大小但是麻雀虽小五脏俱全。既可作为服务器使用也可当工具包使用。作为独立的工具包提供以下功能<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、convert包提供JSON的序列化和反序列化功能类似Gson、Jackson。 <br/>
@@ -35,7 +35,7 @@
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6、ResourceFactory提供轻量级的依赖注入功能 类似Google Guice。 <br/>
</p>
<h3><a id="redkale_server" class="anchor" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>RedKale 服务器</h3>
<h3><a id="redkale_server" class="anchor" href="#" aria-hidden="true"></a>RedKale 服务器</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RedKale作为服务器的目录如下: <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>bin</b>&nbsp;&nbsp;&nbsp; 存放启动关闭脚本(start.sh、shutdown.sh、start.bat、shutdown.bat) <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>conf</b>&nbsp; 存放服务器所需配置文件:<br/>
@@ -63,7 +63,7 @@
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6、启动进程本身的监听服务。 <br/>
</p>
<h3><a id="redkale_dev" class="anchor" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>基于RedKale的开发与调试</h3>
<h3><a id="redkale_dev" class="anchor" href="#" aria-hidden="true"></a>基于RedKale的开发与调试</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;基于RedKale创建一个Java应用程序工程(即使是Web项目也不要创建Java-Web工程)引用redkale.jar 并创建RedKale所需的几个目录和文件。一个普通的Web项目只需要编写业务层的Service和接入层的HttpServlet的代码。数据库DataSource通过配置文件进行设置。<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;编写完代码可以通过启动脚本进行调试, 也可以在IDE设置项目的主类为 org.redkale.boot.Application 或者工程内定义主类进行启动调试:
</p>
@@ -83,7 +83,7 @@
<span class="o">}</span></pre></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.singleton 运行流程与通过bin脚本启动的流程基本一致区别在于singleton运行时不会启动Server和Application自身的服务监听。RedKale提倡接入层(Servlet)与业务层(Service)分开Service在代码上不能依赖于Servlet因此调试Service自身逻辑时不需要启动接入层服务(类似WebSocket依赖Servlet的功能除外)。 </p>
<h3><a id="redkale_deploy" class="anchor" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>RedKale 架构部署</h3>
<h3><a id="redkale_deploy" class="anchor" href="#" aria-hidden="true"></a>RedKale 架构部署</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通常一个系统会分为三层接入层、业务层、数据层。对应到RedKale的组件是 Servlet、Service、Source。大部分系统提供的是HTTP服务为了方便演示RedKale从集中式到分布式的变化以一个简单的HTTP服务作为范例。<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;开发一个极简单的小论坛系统。包含三个模块: <br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用户模块 &nbsp;&nbsp;&nbsp;UserSerivice: &nbsp;&nbsp;&nbsp;&nbsp;提供用户注册、登录、更新资料等功能, UserServlet作为接入层。<br/>
@@ -428,7 +428,7 @@
</p>
<br/>
<h3><a id="redkale_confxml" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>appplication.xml 配置说明</h3>
<h3><a id="redkale_confxml" href="#" aria-hidden="true"></a>appplication.xml 配置说明</h3>
<div class="highlight"><pre><span class="cp">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span>
<span class="c">&lt;!-- </span>
<span class="c"> 文件说明:</span>

View File

@@ -24,7 +24,7 @@
</section>
<section class="main-content">
<h3><a id="service_intro" class="anchor" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>Service 组件介绍</h3>
<h3><a id="service_intro" class="anchor" href="#" aria-hidden="true"></a>Service 组件介绍</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Service 是RedKale最核心的组件依赖于Convert、SNCP协议、Resource依赖注入。Service主要处理业务逻辑和操作数据层是微服务架构中的单一原子服务。每一个Service实例分两种模式: <b>本地模式</b><b>远程模式</b>。其模式由 conf/application.xml 文件来配置。使用者在调用过程中通常不需要区分当前Service实例是哪种模式。<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为了能确保本地模式与远程模式自由切换对Service的实现类有一定的约束: <br/>
@@ -33,7 +33,7 @@
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RedKale进程启动时扫描可加载的Service实现类根据配置文件配置的模式采用JDK 8内置的ASM技术动态生成相应的Service临时类进行实例化并注册到ResourceFactory同其他Service、Servlet依赖注入。
</p>
<h3><a id="service_local" class="anchor" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>Service 本地模式</h3>
<h3><a id="service_local" class="anchor" href="#" aria-hidden="true"></a>Service 本地模式</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以一个简单的UserService类范例来说明动态生成的两种模式临时类。UserService提供查询用户、注册、登陆、修改用户名功能:</br></p>
<div class="highlight"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">UserService</span> <span class="kd">implements</span> <span class="n">Service</span> <span class="o">{</span>
@@ -171,7 +171,7 @@
</pre></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如上配置若当前进程所在IP是192.168.10.111则UserService采用本地模式加载。执行register方法时 先本地执行超类的register然后远程执行同组的进程(192.168.10.112、192.168.10.113),最后远程执行异组的进程(192.168.20.121、192.168.20.122、192.168.30.131、192.168.30.132)。若当前进程所在IP是192.168.10.100则UserService采用远程模式加载。需要注意的一点是每个IP所在的服务必须开通SNCP协议服务以便能接收远程的调用请求。</p>
<h3><a id="service_remote" class="anchor" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>Service 远程模式</h3>
<h3><a id="service_remote" class="anchor" href="#" aria-hidden="true"></a>Service 远程模式</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;动态生成的远程模式UserService</p>
<div class="highlight"><pre><span class="nd">@Resource</span><span class="o">(</span><span class="n">name</span> <span class="o">=</span> <span class="s">&quot;&quot;</span><span class="o">)</span>
<span class="nd">@SncpDyn</span><span class="o">(</span><span class="n">remote</span> <span class="o">=</span> <span class="kc">true</span><span class="o">)</span>
@@ -284,7 +284,7 @@
</pre></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;生成远程模式Service时发现参数带有@DynCall注解的方法在远程调用返回结果时会进行回调处理。</p>
<h3><a id="service_async" class="anchor" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>Service 异步调用</h3>
<h3><a id="service_async" class="anchor" href="#" aria-hidden="true"></a>Service 异步调用</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;远程模式不仅对@DynCall注解进行处理而且对方法含有 <b>java.nio.channels.CompletionHandler</b> 的参数也进行异步特殊处理。异步调用对远程模式非常有意义可以减少同步方式对当前线程的占用时间。也给Source组件的异步调用提供了基础。</p>
<div class="highlight"><pre> <span class="nd">@Override</span>
<span class="kd">public</span> <span class="o">&lt;</span><span class="n">T</span><span class="o">&gt;</span> <span class="kt">void</span> <span class="nf">update</span><span class="o">(</span><span class="kd">final</span> <span class="n">CompletionHandler</span><span class="o">&lt;</span><span class="n">Void</span><span class="o">,</span> <span class="n">T</span><span class="o">[]&gt;</span> <span class="n">handler</span><span class="o">,</span> <span class="nd">@DynAttachment</span> <span class="kd">final</span> <span class="n">T</span><span class="o">...</span> <span class="n">values</span><span class="o">)</span> <span class="o">{</span>

View File

@@ -24,11 +24,11 @@
</section>
<section class="main-content">
<h3><a id="source_intro" class="anchor" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>Source 组件介绍</h3>
<h3><a id="source_intro" class="anchor" href="#" aria-hidden="true"></a>Source 组件介绍</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Source 主要为数据源提供简易的操作接口,使底层的具体数据源(传统数据库、文件系统、内存数据库、Memcached/Redis缓存)对上层是透明的。其提供两种类型的数据源DataSource 和 CacheSource。DataSource 为数据库或内存数据库提供类似JPA、Hibernate的接口与功能。CacheSource 为缓存数据提供类似Memcached、Redis的接口和功能。两者也提供了异步接口(基于<a href="service.html#service_remote" target="_blank">远程模式Service</a>)。<br/></p>
<h3><a id="source_datasource" class="anchor" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>DataSource 入门</h3>
<h3><a id="source_datasource" class="anchor" href="#" aria-hidden="true"></a>DataSource 入门</h3>
<p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JPA虽然已经提供了简洁成熟的数据库操作接口但当数据、业务量很庞大的时候就显得捉襟见肘与JPA相比DataSource有以下几个特点<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、简易的过滤查询接口但仅支持简单的表关联查询。 <br/>
@@ -146,7 +146,7 @@
</pre></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如上@FilterGroup 的value 必须是[OR]或者[AND]开头,没有标记@FilterGroup的字段等价于标记了@FilterGroup(value = "[AND]")。[AND]、[OR]后面的字符串为GROUP_NAME默认的GROUP_NAME为空字符串。如上"[OR]a"可以直接使用"[OR]",有多个[OR]或者[AND]则需要加上不同的NAME。</p>
<h3><a id="source_cachesource" class="anchor" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>CacheSource 入门</h3>
<h3><a id="source_cachesource" class="anchor" href="#" aria-hidden="true"></a>CacheSource 入门</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CacheSource同Memcached类似像一个带有过期功能地Map容器存放key-value数据。常见的使用场景就是存放HTTP的Session信息。RedKale把用户会话信息数据当做业务数据处理而不是接入层的数据。WebSocket的连接态数据也是用CacheSource存储。key为WebSocket的groupidvalue为WebSocket服务端节点的IP地址列表。</p>
<div class="highlight"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">UserService</span> <span class="kd">implements</span> <span class="n">Service</span> <span class="o">{</span>
@@ -179,7 +179,7 @@
<span class="o">}</span></pre></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以上是个简单的范例用于用户模块存放sessionid。</p>
<h3><a id="source_confxml" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>persistence.xml 配置说明</h3>
<h3><a id="source_confxml" href="#" aria-hidden="true"></a>persistence.xml 配置说明</h3>
<div class="highlight"><pre><span class="c">&lt;!-- 其配置算是标准的JPA配置文件的缩略版 --&gt;</span>
<span class="nt">&lt;persistence&gt;</span>
<span class="c">&lt;!-- 系统基本库 --&gt;</span>

View File

@@ -16,6 +16,10 @@ a {
text-decoration: none;
}
.anchor {
color: #90139E;
}
a:hover {
text-decoration: none;
}

View File

@@ -25,7 +25,7 @@
<section class="main-content">
<h3>
<a id="welcome-to-github-pages" class="anchor" href="#welcome-to-github-pages" aria-hidden="true"><span class="octicon octicon-link"></span></a>Watch 组件介绍</h3>
<a id="welcome-to-github-pages" class="anchor" href="#welcome-to-github-pages" aria-hidden="true"></a>Watch 组件介绍</h3>
<p>敬请期待…… <br/>
</p>