JGroups应用

1.jgroups下载地址:

http://jaist.dl.sourceforge.net/project/javagroups/JGroups/3.3.0.CR2/jgroups-3.3.0.CR2.jar

2.源码示例下载

https://codeload.github.com/belaban/JGroups/zip/master

3.jgroups简介

JGroups是一个可靠的组间通讯工具,进程可以加入一个通讯组,给组内所有的成员或单独的成员发送消息,同样,也可以从组中的成员处接收消息。
系统会记录组的每一个成员,在新成员加入或是现有的成员离开或是崩溃时,会通知组内的其他成员。

4.jgroups简单示例

Receive接收代码:

View Code
package ceshi;

import org.jgroups.JChannel;
import org.jgroups.Message;
import org.jgroups.ReceiverAdapter;
import org.jgroups.View;

/**
 * 接收收据包
 * 
 * @author chenhaibin
 */
public class Receive extends ReceiverAdapter {
    JChannel channel;
    String user_name = System.getProperty("user.name", "n/a");

    private void start() throws Exception {
        // 创建一个通道
        channel = new JChannel();

        // 创建一个接收器
        channel.setReceiver(this);

        // 加入一个群
        channel.connect("ChatCluster");
    }

    public static void main(String[] args) throws Exception {
        // 接收收据端
        new Receive().start();
    }

    // 覆盖父类的方法
    @Override
    public void receive(Message msg) {
        System.out.println(msg.getSrc() + "  发过来的数据是:  " + String.valueOf(msg.getObject()));

    }

    @Override
    public void viewAccepted(View new_view) {
        System.out.println("** view: " + new_view);
    }

}

Send接收代码:

View Code
package ceshi;

import java.io.BufferedReader;
import java.io.InputStreamReader;

import org.jgroups.JChannel;
import org.jgroups.Message;

/**
 * 发送数据包
 * 
 * @author chenhaibin
 */

public class Send {
    JChannel channel;
    // 得到本机电脑的 用户名字
    String user_name = System.getProperty("user.name", "n/a");

    private void start() throws Exception {
        // 创建一个通道
        channel = new JChannel();
        // 加入一个群
        channel.connect("ChatCluster");
        // 循环事件
        eventLoop();
        // 关闭通道
        channel.close();
    }

    /**
     * 主要 是从控制台输入内容,如果输入的内容为quit 或者 exit 那么就退出
     */
    private void eventLoop() {
        // 控制台输入内容
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        while (true) {
            try {
                System.out.print("> ");
                System.out.flush();
                String line = in.readLine().toLowerCase();
                // 如果输入的内容为quit 或者 exit 那么就退出
                if (line.startsWith("quit") || line.startsWith("exit")) {
                    break;
                }
                // 接受的内容
                line = "[" + user_name + "] " + line;

                // Message(arg1,arg2,arg3)三个参数
                // 第一个参数是::: 是目的地址 如果为null,表示发给群里所有的人(包括本机) 如果有ip地址,那么只发给一个人
                // 第二个参数是::: 本机的地址
                // 第三个参数是::: 参数
                Message msg = new Message(null, null, line);
                channel.send(msg);
            } catch (Exception e) {
            }
        }
    }

    public static void main(String[] args) throws Exception {
        // 开始
        new Send().start();
    }

}
原文地址:https://www.cnblogs.com/hzcxy/p/3062601.html