天天看點

叢集通信元件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);

繼續閱讀