上面已经对tribes的内部实现机制及原理进行了深入的剖析。在理解它的设计原理后看看怎样使用tribes。整个使用相当简单便捷,仅仅须要四步:

① 定义一个消息对象,因为这个消息对象是要在网络之间传递的,网络传输涉及到序列化。所以须要实现Serializable接口。

public class MyMessage implements Serializable {

private String message;

public String getMessage() {

return message;

}

public void setMessage(String message) {

this.message = message;

}

}

② 定义一个ChannelListener监听器。对消息的处理逻辑放在messageReceived方法中。

public class MyMessageListener implements ChannelListener{

public boolean accept(Serializable myMessage, Member member) {

return true;

}

public void messageReceived(Serializable myMessage, Member member) {

System.out.println(((MyMessage)myMessage).getMessage()+"  from  "+member.getName());

}

}

③ 定义一个MembershipListener监听器,对集群成员的增加及失效的逻辑处理。在memberAdded中对成员增加事件逻辑处理,在memberDisappeared中对成员失效事件逻辑处理。

public class MyMemberListener implements MembershipListener {

public void memberAdded(Member member) {

System.out.println(member.getName()+" Added");

}

public void memberDisappeared(Member member) {

System.out.println(member.getName()+" Disappeared");

}

}

④ 主程序。分别实例化ChannelListener、MembershipListener并增加到channel中,然后启动channel,因为集群通信须要启动几个节点才可实现,为方便操作这里引入args參数。当參数值为”r”时表示仅仅是启动一个节点并增加集群。而參数值为”s”时则表示启动节点增加集群后而且向集群全部成员发送Message,主程序使用循环睡眠是为了不让程序结束,一旦结束节点就不存在了。能够先带”r”參数执行两次,即意味着启动了两个节点,最后再带”s”參数执行,即第三个节点启动并向前两个成语节点发送消息,前两个节点分别输出了”hello  from  tcp://{169, 254, 75, 186}:4002”,而成员监听器则会在节点增加或失效时输出相似这种消息”tcp://{169, 254, 75, 186}:4002 Added”、”tcp://{169, 254, 75, 186}:4000 Disappeared”。

public class TribesTest {

public static void main(String[] args) throws ChannelException,InterruptedException {

Channel myChannel = new GroupChannel();

ChannelListener msgListener = new MyMessageListener();

MembershipListener mbrListener = new MyMemberListener();

myChannel.addMembershipListener(mbrListener);

myChannel.addChannelListener(msgListener);

myChannel.start(Channel.DEFAULT);

switch (args[0]) {

case ("r"):

while (true)

Thread.currentThread().sleep(1000);

case ("s"):

MyMessage myMsg = new MyMessage();

myMsg.setMessage("hello");

Member[] group = myChannel.getMembers();

myChannel.send(group, myMsg, Channel.SEND_OPTIONS_DEFAULT);

while (true)

Thread.currentThread().sleep(1000);

}

}

}

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

集群通信组件tribes之用法的更多相关文章

  1. 集群通信组件Tribes之整体介绍

    接下来一系列文章会对集群通信框架tribes进行源码级别的分析,欢迎讨论. 把若干机器组合成一个集群,集群为了能协同工作,成员之间的通信是必不可少的,当然可以说这也是集群实现中重点需要解决的核心问题, ...

  2. 集群通信组件tribes之使用方法

    上面已经对tribes的内部实现机制及原理进行了深入的剖析,在理解它的设计原理后看看如何使用tribes,整个使用相当简单便捷,只需要四步: ① 定义一个消息对象,由于这个消息对象是要在网络之间传递的 ...

  3. 集群通信组件tribes之集群的平行通信

    前面的集群成员维护服务为我们提供了集群内所有成员的地址端口等信息,可以通过MembershipService可以轻易从节点本地的成员列表获取集群所有的成员信息,有了这些成员信息后就可以使用可靠的TCP ...

  4. 集群通信组件Tribes之如何维护集群成员信息

    一个集群包含若干成员,要对这些成员进行管理就必须要有一张包含所有成员的列表,当要对某个节点做操作时通过这个列表可以准确找到该节点的地址进而对该节点发送操作消息.如何维护这张包含所有成员的列表是本节要讨 ...

  5. 集群通信组件tribes之集群的消息接收通道

    与消息发送通道对应,发送的消息需要一个接收端接收消息,它就是ChannelReceiver.接收端负责接收处理其他节点从消息发送通道发送过来的消息,实际情况如图每个节点都有一个ChannelSende ...

  6. 集群通信组件Tribes之怎样维护集群成员信息

    一个集群包括若干成员,要对这些成员进行管理就必需要有一张包括全部成员的列表.当要对某个节点做操作时通过这个列表能够准确找到该节点的地址进而对该节点发送操作消息.怎样维护这张包括全部成员的列表是本节要讨 ...

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

    Tribes为了更清晰更好地划分职责,它被设计成用IO层和应用层,IO层专心负责网络传输方面的逻辑处理,把接收到的数据往应用层传送,当然应用层发送的数据也是通过此IO层发送,数据传往应用层后必须要留一 ...

  8. 集群通信组件tribes之通道拦截器

    拦截器应该可以说是一个很经典的设计模式,它有点类似于过滤器,当某信息从一个地方流向目的地的过程中,可能需要统一对信息进行处理,如果考虑到系统的可扩展性和灵活性通常就会使用拦截器模式,它就像一个个关卡被 ...

  9. 【原创】强撸基于 .NET 的 Redis Cluster 集群访问组件

    Hello 大家好,我是TANZAME,我们又见面了.今天我们来聊聊怎么手撸一个 Redis Cluster 集群客户端,纯手工有干货,您细品. 随着业务增长,线上环境的QPS暴增,自然而然将当前的单 ...

随机推荐

  1. hpuoj--校赛--送给新生的礼物(水题)

    问题 A: 感恩节KK专场--送给新生的礼物 时间限制: 1 Sec  内存限制: 128 MB 提交: 631  解决: 187 [提交][状态][讨论版] 题目描述 学长KK要送给学弟学妹们礼物, ...

  2. 6. MongoDB——Java操作(增删改查)

    转自:https://blog.csdn.net/kai402458953/article/details/79626148 import java.net.UnknownHostException; ...

  3. POJ 3671 DP or 乱搞

    思路: 1.DP f[i][j]:前i个数 最后一个数是j的最小花费 f[i][j]=min(f[i][j],f[i-1][k]+(a[i]!=j));1<=k<=j 这种做法比较有普遍性 ...

  4. HD-ACM算法专攻系列(3)——Least Common Multiple

    题目描述: 源码: /**/ #include"iostream" using namespace std; int MinComMultiple(int n, int m) { ...

  5. hiho1515 - 数据结构 并查集

    题目链接 小Hi的学校总共有N名学生,编号1-N.学校刚刚进行了一场全校的古诗文水平测验. 学校没有公布测验的成绩,所以小Hi只能得到一些小道消息,例如X号同学的分数比Y号同学的分数高S分. 小Hi想 ...

  6. Ubuntu14.04下tensorflow安装

    自己电脑没装双系统,于是决定在虚拟机里装个tensorflow,以下是安装过程: 1.安装anaconda2 for Linux 官网下的话很慢,去清华的镜像网站下吧,我上一篇文章有网址 安装:bas ...

  7. caffe(7) solver及其配置

    solver算是caffe的核心的核心,它协调着整个模型的运作.caffe程序运行必带的一个参数就是solver配置文件.运行代码一般为 # caffe train --solver=*_slover ...

  8. Java导出csv修正时间格式

    处理前导出的日期格式为:yyyy-M-d HH:mm 正确的应该是:yyyy-MM-dd HH:mm:ss 处理方案是在 时间数据两边增加 "\t" 有问题欢迎交流. thanks ...

  9. php后端控制可跨域的域名,允许图片跨域上传

    跨域问题经常需要面对,前端需要做的比较直接要么选择ajax异步提交,XML或者jsonp,要么表单提交前端常见跨域解决方案 jsonp基本可以搞定大部分跨域问题,但问题也比较明显,只能通过get方式提 ...

  10. Java基础学习总结(21)——数组

    一.数组的基本概念 数组可以看成是多个相同类型数据组合,对这些数据的统一管理. 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量. 数组的元素可以是任何数据类型,包括基 ...