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

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

}

}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-13 13:28:13

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

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

Tribes为了更清晰更好地划分职责.它被设计成用IO层和应用层,IO层专心负责网络传输方面的逻辑处理.把接收到的数据往应用层传送,当然应用层发送的数据也是通过此IO层发送,数据传往应用层后必需要留一些处理入口供应用层进行逻辑处理,而考虑系统解耦,这个入口最好的方式是使用监听器模式,在底层发生各种事件时触发全部安装好的监听器,使之运行监听器里面的处理逻辑.这些事件主要包括了集群成员的加入和退出.消息报文接收完毕等信息,所以整个消息流转过程被分成两类监听器.一类是跟集群成员的变化相关的监听器Mem

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

一个集群包括若干成员,要对这些成员进行管理就必需要有一张包括全部成员的列表.当要对某个节点做操作时通过这个列表能够准确找到该节点的地址进而对该节点发送操作消息.怎样维护这张包括全部成员的列表是本节要讨论的主题. 成员维护是集群的基础功能,一般划分一个独立模块或层完毕此功能,它提供成员列表查询.成员维护.成员列表改变事件通知等能力. 因为tribes定位于基于同等节点之间的通信,所以并不存在主节点选举的问题,它所要具备的功能是自己主动发现节点,即新节点增加要通知集群其它成员更新成员列表,让每一个节

集群通信框架Tribes之整体介绍

接下来一系列文章会对集群通信框架tribes进行源码级别的分析,欢迎讨论. 把若干机器组合成一个集群,集群为了能协同工作,成员之间的通信是必不可少的,当然可以说这也是集群实现中重点需要解决的核心问题,一个强大的通信协同机制是集群的基础. 简约地说,Tribes是一个具备让你通过网络向组成员发送和接收信息.动态检测发现其他节点的组通信能力的高扩展性的独立的消息框架.在组成员之间进行信息复制及成员维护是一个相对复杂的事情,因为不仅要考虑各种通信协议还要有必要的机制提供不同的消息传输保证级别,且成员关

集群通信应用开发吐槽(2014年)

在集群通信行业两家公司开发PC应用六年了,但在对开发的理解的道路上感觉还是挺孤独的,于是想写点东西发泄下郁闷,没想到只想了一两小时就写了几十条提纲.好话说在前面,文中的提到的现象可能不全面,甚至是误会的,文中的观点更是需要审视的看待. 产品越复杂(越多硬件)越能卖出好价钱 产品便携易用,越能解决客户问题,越给客户创造价值,才越值钱.产品成本和产品价值没有直接关系,iphone的成本如果只有1元钱,就没人花45千买了? 性能问题需要测试数据来证明 在讨论某个功能的整体设计时,做嵌入式开发的常常随意

SignalR循序渐进(三)简易的集群通讯组件

上一篇演示了泛型Hub的实现,微软于6月17日更新了SignalR 2.1.0,然后自带了泛型Hub,于是就不需要自己去实现了…(微软你为啥不早一个月自带啊…).不过没关系,SignalR出彩之处不在泛型Hub,本篇为各位观众带来了基于SignalR的简易集群通讯组件Demo,可用于分布式定时任务. 说到集群,自然想到了NLB啊Cluster啊HPC啊等等.NLB受制于成员数量,Cluster用数量堆高可用性,HPC太复杂.本着SignalR的双向异步通讯的特点,其实是可以用来玩弹性计算的.初始

用MPI_Send和MPI_Recv实现简单集群通信函数

本片博客总结自我<并行计算>MPI实验 在这里我用阻塞式消息传递函数MPI_Send.MPI_Recv和非阻塞式消息发送函数MPI_Isend实现了三个简单的集群通信函数: MPI_Bcast广播函数 MPI_Gather收集函数 MPI_Scatter散播函数 1.MPI_Bcast广播函数 (1)原型简介 void MPI_Bcast(void* address, int count, MPI_Datatype datatype, int root, MPI_Comm comm); MPI

隧道集群通信覆盖系统

隧道集群通信覆盖方案(北京恒星科通科技发展有限公司 http://www.bjhxkt.com 010-82565576)一.隧道集群通信覆盖系统概述隧道集群通信覆盖方案隧道集群通信覆盖系统包括150M调度对讲子系统.350M公安消防集群子系统和调频广播及应急广播子系统.调度对讲子系统主要用于隧道管理单位的内部通信,能让隧道内维修.巡逻等人员与控制室管理人员之间建立灵活的通信联络,满足内部管理.指挥.调度等的需要.350M公安消防集群子系统通过将隧道外的基站信号引入,满足交警.消防等单位在隧道内

RHCS集群 服务不能正常启动 解决方法

对于初次搭建 RHCS 集群 总是遇到 很多 意想不到的 trouble. 用 luci  管理 集群时 : 在  搭建  server group  服务  ,服务出现 disable  那是 常有的时.. 下面给出  我在 练习中 解决 方法.. 1.无 法 在 Fence 或 者 重 启 后 重 新 加 入 集 群 的 节 点:  重启 rgm anager 捕获应用程序 core 前,请移动或删除 / 目录中的所有旧 core 文件.应重启出现rgm anager 崩溃的集群节点,或者在

Redis3.0集群crc16算法php客户端实现方法(php取得redis3.0集群中redis数据所在的redis分区插槽,并根据分区插槽取得分区所在redis服务器地址)

数据分区        Redis集群将数据分区后存储在多个节点上,即不同的分区存储在不同的节点上,每个节点可以存储多个分区.每个分区在Redis中也被称为"hash slot",Redis集群中总共规划了16384个分区. 例如:当集群中有3个节点时,节点A将包含0-5460分区,节点B将包含5461-10922分区,节点C将包含10923-16383分区. 每个key将会存储到一个唯一的分区中,每个分区其实就是一组key的集合,两者对应关系为:key的CRC16校验码%16384=