集群通信组件tribes之应用程序处理入口

简介:         Tribes为了更清晰更好地划分职责,它被设计成用IO层和应用层,IO层专心负责网络传输方面的逻辑处理,把接收到的数据往应用层传送,当然应用层发送的数据也是通过此IO层发送,数据传往应用层后必须要留一些处理入口供应用层进行逻辑处理,而考虑系统解耦,这个入口最好的方式是使用监听器模式,在底层发生各种事件时触发所有安装好的监听器,使之执行监听器里面的处理逻辑。

        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层,这两层通过监听器模式串联起来,优雅地将模块解耦。


点击订购作者《Tomcat内核设计剖析》



目录
相关文章
|
4月前
|
存储 前端开发 安全
跨页面通信的方式有哪些?
跨页面通信的方式有哪些?
49 0
|
5天前
组件间的通信
组件间的通信
|
4月前
|
存储 Web App开发 移动开发
跨页面通信有多少种技术方式可以实现?
跨页面通信有多少种技术方式可以实现?
63 0
|
8月前
|
Ubuntu Linux
应用程序及管理
应用程序及管理
72 0
|
11月前
|
设计模式 缓存 开发框架
「第二部:容器和微服务架构](10) API网关模式与客户端直接通信2
「第二部:容器和微服务架构](10) API网关模式与客户端直接通信2
|
11月前
|
消息中间件 开发框架 负载均衡
「第二部:容器和微服务架构](9) API网关模式与客户端直接通信
「第二部:容器和微服务架构](9) API网关模式与客户端直接通信
|
JSON JavaScript 小程序
【小程序】组件通信
【小程序】组件通信
168 0
【小程序】组件通信
|
存储 Kubernetes 安全
Linkerd 中 mTLS 保护应用程序通信
Linkerd 中 mTLS 保护应用程序通信
346 1
|
资源调度 前端开发 JavaScript
如何搭建一个内部组件共享平台
如今前端越来越趋于组件化的开发方式,最大的益处就是UI页面和逻辑的共用。 在开发者的眼里,如果你打开一个网站,组件化的开发方式会让你看起来像这个样子
675 0
如何搭建一个内部组件共享平台
|
监控 MySQL 关系型数据库