参考资料:
1.
http://blog.sina.com.cn/s/blog_4fe227ba0100jsx5.html
一个小例子:
1.分为客户端和 服务器端! ,先启动服务器端 ,他会启动一个udp(阻塞),绑定在本地的一个随机端口上,并且绑定一个集群
2.在启动客户端发送一个消息,客户端和服务器端都会跟新 集群里面的成员,并且服务器端 收到了集群成员发发送的消息,
3.客户端发送完消息,自动退出,我们可以看到服务器端 有集群成员退出的日志。
4. 可以在启动一个服务器端 只要加入到相同的集群中,我们可以在其他的 服务器端的日志中看到 有新的成员加入,并且客户端发送消息到集群上,所有的成员都成收到!!
服务器端:
package com.platform.test; import org.jgroups.JChannel; import org.jgroups.Message; import org.jgroups.ReceiverAdapter; import org.jgroups.View; /** * 接收收据包 * */ public class Receive extends ReceiverAdapter { JChannel channel; String user_name = System.getProperty("user.name", "n/a"); public static void main(String[] args) throws Exception { //接收收据端 new Receive().start(); } private void start() throws Exception { //创建一个通道 channel = new JChannel(); //创建一个接收器 channel.setReceiver(this); //加入一个群 channel.connect("ChatCluster"); } //覆盖父类的方法 @Override public void receive(Message msg) { //具体参见msg的参数 String receiveData=(String)msg.getObject(); System.out.println(" 发过来的数据是: " +receiveData); } @Override public void viewAccepted(View new_view) { System.out.println("** view: " + new_view); } }
客户端:
package com.platform.test; import org.jgroups.ChannelClosedException; import org.jgroups.ChannelNotConnectedException; import org.jgroups.JChannel; import org.jgroups.Message; /** * 发送数据客户端 * */ public class Send { JChannel channel; //得到本机电脑的 用户名字 String user_name=System.getProperty("user.name", "n/a"); private void start() throws Exception { /** * 参数里指定Channel使用的协议栈,如果是空的,则使用默认的协议栈, * 位于JGroups包里的udp.xml。参数可以是一个以冒号分隔的字符串, * 或是一个XML文件,在XML文件里定义协议栈。 */ //创建一个通道 channel=new JChannel(); //加入一个群 channel.connect("ChatCluster"); //发送事件 sendEvent(); //关闭通道 channel.close(); } /** * 主要发送事件 */ private void sendEvent() { try { String str="2222";//发送的字符串 //这里的Message的第一个参数是发送端地址 //第二个是接收端地址 //第三个是发送的字符串 //具体参见jgroup send API Message msg=new Message(null, null, str); //发送 channel.send(msg); } catch (ChannelNotConnectedException e) { e.printStackTrace(); } catch (ChannelClosedException e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { //开始发送事件 new Send().start(); } }
如果这个例子过于简单 我们可以去 下载 group的源码,实验 源码包里的例子
下载地址:
https://github.com/belaban/JGroups
官方demo javacode 包名:
org.jgroups.demos
我们可以实验 下一个 swing 的小例子 ,在两个swing 窗体中同步 内容
运行draw.java 两次,会出现两个 swing 窗体,在其中的一个 按住鼠标左键不放 画图 ,数据会同步到另外一个窗体中,这效果也是运用的jgroup的 组播特性!
还有好多的小例子,我们可以看看 官方的代码是如何写的,把他们运用到 自己的 需求中去!