上面已经对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);

}

}

}

喜欢java的可以交个朋友:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. FORM界面批量处理-全选框实现

    全选框实现方法多种多样,这里只介绍两种 方法一:触发器式,优点程序简单,缺点颜色单调不突出 1.      在数据块和控制块上分别创建check box 2.      设置check box选中与为 ...

  2. ScheduledExecutorService和timer的异同

    先来个传统的Timer的例子: package com.jerry.concurrency; import java.text.ParseException; import java.text.Sim ...

  3. Download all Apple open source OS X files at once

    While it is well known that Mac OS X contains open source code, how to access and download that sour ...

  4. Dynamics CRM2011 在Visual Studio中开启Javascript的Xrm.Page智能提示

    前面一篇博文:http://blog.csdn.net/vic0228/article/details/49512699 讲到了在Visual Studio中开启xml编辑的智能提示,本篇接着来讲下如 ...

  5. 对 jiffies 溢出、回绕及 time_after 宏的理解

    原文如下: 关于jiffies变量:     全局变量jiffies用来记录自启动以来产生的节拍的总数.系统启动时会将该变量初始化为0,此后,每当时钟中断产生时就会增加该变量的值.jiffies和另外 ...

  6. Cocos2D结合CoreGraphics实现RPG人物中空黑洞吸入效果

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 之前的博文中我们实现了RPG人物的复古效果. 现在我们再完点h ...

  7. html5配合css3实现带提示文字的输入框(摆脱js)

    来源:互联网 作者:佚名 时间:03-08 11:41:53 [大 中 小] webkit特有的一个css,可以控制里面的文字样式,配合css3的动画效果和伪类,我们就可以很容易做出一个带动画的输入框 ...

  8. 《java入门第一季》之集合框架(Collection小儿子Set集合)

    /*  * Collection主要的连个儿子:  * |--List  * 有序(存储顺序和取出顺序一致),可重复  * |--Set  * 无序(存储顺序和取出顺序不一致),唯一  *   * H ...

  9. Java进阶(三十二) HttpClient使用详解

    Java进阶(三十二) HttpClient使用详解 Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们 ...

  10. 使用Mediaplay类写一个播放器

    我们知道android本身播放视频的的能力是有限的..先来一个Demo 另附我的一个还未成熟的播放器,下载地址:http://www.eoemarket.com/soft/370334.html,正在 ...