RibbonFilter
说明
负载均衡插件,根据配置的servers=ip1:port,ip2: port属性,实现负载均衡。其中多个ip之间通过逗号隔开,当配置的交易请求第一个ip的服务,如果交易处理成功,则成功;如果交易处理失败则交易请求第二个ip的服务,以此类推,实现负载均衡。
配置实例
下面以请求http服务为例
客户端请求的配置
<transaction id="ribbonTest" version="2.0">
<step id="1">
<filter ref="publicFilter" type="in">
<field tag="servers" value="127.0.0.1:10004,127.0.0.2:10004"/>
<field tag="reqmap" type="map"/>
<field value="${reqmap.put('interface','test')}"/>
<field value="${reqmap.put('transaction','httpClient')}"/>
<field value="${reqmap.put('server',servers)}"/>
<field value="${reqmap.put('rootUrl','/')}"/>
<field value="${reqmap.put('mapping','test')}"/>
<field value="${reqmap.put('body','我是body里的数据')}"/>
<field value="${reqmap}" scope="this"/>
</filter>
<!--负载均衡-->
<filter ref="ribbonFilter" type="in"/>
<!--请求响应-->
<filter type="in" ref="publicFilter">
<field tag="msg" value="${this}"/>
<field tag="content" value="${msg.content}"/>
<log value="请求响应============${content}"/>
</filter>
</step>
</transaction>
其中servers是服务的配置,多个服务之间用逗号隔开;interface和transaction分别是请求服务的接口名和交易名,也就是请求服务的逻辑应该写在此交易中;以上三项为ribbonFilter必填项,其他的参数为处理服务的交易所需要的参数。上面所配置的rootUrl和mapping以及body是交易httpClient所需的参数。
httpClient交易配置
该交易主要实现http请求,如果此交易失败则会使用第二个ip端口重新调起交易,以此类推
<transaction id="httpClient" version="2.0">
<step id="1">
<filter type="in" ref="publicFilter">
<!--接收参数-->
<field tag="reqmap" value="${this[0]}"/>
<field tag="ip" value="${reqmap.get('ip')}"/>
<field tag="port" value="${reqmap.get('port')}"/>
<field tag="rootUrl" value="${reqmap.get('rootUrl')}"/>
<field tag="mapping" value="${reqmap.get('mapping')}"/>
<log value="发起HTTP/POST请求,ip=${ip},port=${port},mapping=${mapping}"/>
<field value="${reqmap}" scope="this"/>
</filter>
<connection ref="httpConnectionBetter" type="out">
<property name="server" value="${ip}:${port}"/>
<property name="rootUrl" value="${rootUrl}"/>
<property name="mapping" value="${mapping}"/>
<property name="charset" value="UTF-8"/>
<property name="method" value="post"/>
</connection>
</step>
</transaction>
http服务端配置
接收http客户端请求
<service id="httpServer" state="on" type="http">
<property name="port" value="10004"/>
<property name="uri" value="/test"/>
<property name="class" value="classes.CowsRecvServlet"/>
<property name="interfaceName" value="test"/>
<property name="transactionName" value="becall"/>
</service>
http服务端交易配置
处理http服务端接收的数据的交易
<!--服务端处理交易-->
<transaction id="becall" version="2.0">
<step id="1">
<filter type="in" ref="publicFilter">
<field tag="request" value="${this[0]}"/>
<field tag="response" value="${this[1]}"/>
<field tag="msg" value="${IOUtils:toString(request.getInputStream(),'#{KCMS_ENCODING}')}"/>
<log value="接收的参数:${msg}"/>
<!--组装发送的数据-->
<field tag="common_tmp" type="map"/>
<field value="${common_tmp.put('rtncode','00000')}"/>
<field value="${common_tmp.put('body','请求成功')}"/>
<field value="${common_tmp}" scope="this"/>
</filter>
</step>
</transaction>
效果展示
首先启动http服务 service.bat
然后执行 client.bat test ribbonTest
服务端处理交易中的日志:
请求交易中的日志: