上面已經對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的可以交個朋友:
