Tribes为了更清晰更好地划分职责。它被设计成用IO层和应用层,IO层专心负责网络传输方面的逻辑处理。把接收到的数据往应用层传送,当然应用层发送的数据也是通过此IO层发送,数据传往应用层后必需要留一些处理入口供应用层进行逻辑处理,而考虑系统解耦,这个入口最好的方式是使用监听器模式,在底层发生各种事件时触发全部安装好的监听器,使之运行监听器里面的处理逻辑。这些事件主要包括了集群成员的加入和退出、消息报文接收完毕等信息,所以整个消息流转过程被分成两类监听器。一类是跟集群成员的变化相关的监听器MembershipListener,另外一类是跟集群消息接收发送相关的监听器ChannelListener。应用层仅仅要关注这两个接口即可了,写好各种处理逻辑的监听器加入到通道中即可。
以下是这两个监听器的接口,从接口定义的方法能够非常清晰地看到各个方法被调用的时机,MembershipListener类型中memberadd是有成员加入时调用的方法,memberDisappeared是成员退出时调用的方法,ChannelListener类型中accept用于推断是否接受消息,messageReceived用于对消息处理的方法,应用层把逻辑分别写到这几个方法就能够在相应时刻运行相应的逻辑。
public interface MembershipListener {
public void memberAdded(Member member);
public void memberDisappeared(Member member);
}
public interface ChannelListener {
public void messageReceived(Serializable msg, Member sender);
public boolean accept(Serializable msg, Member sender);
}
我们能够在应用层自己定义若干监听器而且加入到GroupChannel中的两个监听器列表中,GroupChannel事实上能够看成是一个封装了IO层的抽象容器,它会在各个适当的时期遍历监听器列表中的全部监听器并调用监听器相应的方法,即运行应用层定义的业务逻辑。至此完毕了数据从IO层流向应用层并完毕处理。两种类型的监听器给应用层提供了处理入口,应用层仅仅需关注逻辑处理,而其它的IO操作则交由IO层。这两层通过监听器模式串联起来,优雅地将模块解耦。