一特点
1.不再需要维护一个中心服务器。
2.消息将发给集群中的所有节点。
3.一个节点宕机/加入时,其它节点会得到一个回调通知消息。
4.可维护一个集群范围内的共享状态(信息)。
二概要
1.JGroups主要通过JChannel来收发消息包括当前节点加入集群、其它节点加入/离开集群或正常的业务消息。
2.消息信息主要包括消息体、消息地址、消息目的端口。
3.所有的实例列表叫视图,所有的实例包含同样的视图。该列表按照实际加入集群的顺序排序,列表第一个即是时间最老的实例节点。
4.消息收发样例
package com.yangsj.test;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import org.jgroups.JChannel;
import org.jgroups.Message;
import org.jgroups.ReceiverAdapter;
import org.jgroups.View;
public class SimpleChat extends ReceiverAdapter
{
JChannel channel;
String user_name = System.getProperty("user.name", "n/a");
private void start() throws Exception
{
channel = new JChannel("udp.xml"); // use the default config, udp.xml
channel.connect("ChatCluster");
channel.setReceiver(this);
eventLoop();
channel.close();
}
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();
if (line.startsWith("quit") || line.startsWith("exit"))
break;
line = "[" + user_name + "] " + line;
Message msg = new Message(null, null, line);
channel.send(msg);
}
catch (Exception e)
{
}
}
}
public void viewAccepted(View new_view)
{
System.out.println("** view: " + new_view);
}
public void receive(Message msg)
{
System.out.println(msg.getSrc() + ": " + msg.getObject());
}
public static void main(String[] args) throws Exception
{
new SimpleChat().start();
}
}
三维护公共集群状态
1.维护公共状态主要是指数据集群间复制以达到集群间的数据一致性。比如HTT会话,当持有会话的服务器宕机后用户的会话信息仍能够获取到。
2.新节点加入集群时会发生公共数据传输。
3.新节点加入集群时获取公共数据样例
public void receive(Message msg) { String line=msg.getSrc() + ": " + msg.getObject(); System.out.println(line); synchronized(state) { state.add(line); } }
getState 方法由state provider
public void getState(OutputStream output) throws Exception { synchronized(state) { Util.objectToStream(state, new DataOutputStream(output)); } }
setState方法由state requester
public void setState(InputStream input) throws Exception { List<String> list; list=(List<String>)Util.objectFromStream(new DataInputStream(input)); synchronized(state) { state.clear(); state.addAll(list); } System.out.println(list.size() + " messages in chat history):"); for(String str: list) { System.out.println(str); } }
相关推荐
JavaEE源代码 jgroups-2.2.8JavaEE源代码 jgroups-2.2.8JavaEE源代码 jgroups-2.2.8JavaEE源代码 jgroups-2.2.8JavaEE源代码 jgroups-2.2.8JavaEE源代码 jgroups-2.2.8JavaEE源代码 jgroups-2.2.8JavaEE源代码 ...
JGroups - A Framework for Group Communication in Java ======================================================== March 3, 1998 Bela Ban 4114 Upson Hall Cornell University Ithaca, NY 14853 bba@...
jgroups-raft 项目是 JGroups 框架对 Raft 的实现。Maven:<groupId>org.jgroups <artifactId>jgroups-raft <version>0.2</version>Raft 是一个容易理解的共识算法。在容错和性能方面它相当于 Paxos(Google 的一致...
jgroups-2.2.7.jar jgroups-2.2.7.jar
JGroups(Java多播通讯框架)简介 JGroups是一个可靠的群组通讯Java工具包。它基于IP组播(IP multicast),但在可靠性,组成员管理上对它作了扩展。 JGroups的可靠性体现在: 1,对所有接收者的消息的无丢失传输...
JGroups是一个开源的纯java编写的可靠的群组通讯工具。其是一个可靠的组播通讯工具集(需要说明的是,这并不是说必须要使用IP Multicast,JGroups也可以使用TCP来实现)。其工作模式基于IP多播,但可以在可靠性和群组...
JGroups_集群.pdf
jgroups.part1
JGroups是一个开源的纯java编写的可靠的群组通讯工具。其是一个可靠的组播通讯工具集(需要说明的是,这并不是说必须要使用IP Multicast,JGroups也可以使用TCP来实现)。其工作模式基于IP多播,但可以在可靠性和群组...
jgroups-2.6.8.GA.jar jgroups-2.6.8.GA.jar
基于JGroups的共享电子白板系统的研究与实现
Jgroups是一款组播工具,基于IP多播的可靠的组播中间件
Ehcache通过使用Jgroups做集群配置,更改每一个不同的jgroups.xml文件的端口号和IP,如果一台机器就使用127.0.0.1即可。配置好之后,把每台机器起来,就可以测试了。
jgroups.part3
Java多播通讯框架 JGroups
jgroups-2.2.8.jar.........
jgroups-2.5.1-jdk14.jar,网络通信工具包,版本号2.5.1
jgroups源代码,想要学习jgroups开源框架的童鞋可以看看
JGROUPs 的重要用法全部都在里面了
介绍部分摘自XMPP Jabber即时通讯开发实践 http://hi.baidu.com/jabber/blog/item/7e879852a23efd0f0cf3e3ea.html<br>JGroups 适合使用场合 服务器集群cluster、多服务器通讯、服务器replication(复制)等,...