JGroups是一个开源的可靠消息服务toolkit.它由来自瑞士的Bela Ban创建, 它的Github主页:JGroups。 它的代码量不大,非常小巧,它一开始是Bela Ban在康奈尔大学念博士后时写的一个小项目,开源后收到很多好评和采纳,还被JBoss用来做Multi Cluster,再后来JGroups就被JBoss收编了,而Bela Ban也进入JBoss工作,专职维护开发这个项目。这也算一个开源项目的美好归宿。
JGroups可以用来创建cluster, cluster里面的node可以互相收发信息。主要的功能包括:
1. 创建和删除cluster,cluster的node可以跨越LAN和WAN
2. 加入cluster和离开cluster
3. 当有node加入/离开/crash,可以detect和发notification。
4. 可以Detect已经crash的Node并移除它
5. 可以收发node-to-cluster的信息(point-to-multipoint)
6. 可以收发node-to-node信息(point-to-point)
JGroups最强大的功能是它实现了灵活的协议栈(protocol stack). JGroups附带很多协议(当然你可以实现自己的协议),如:
Transport protocol: UDP(IP Multicast) or TCP
Fragmentation of large messages
Reliable unicast and multicast message transmission. Lost messages are retransmitted
Failure detection: crashed nodes are excluded from the membership
Flow control to prevent slow receivers to get overrun by fast senders
Ordering protocols: FIFO, Total Order
Membership
Encryption
Compression
JGroups的API设计得非常简单,对采用的协议是透明的。 例如, 如果想收发信息,你只需要创建一个Channel。 Channel的属性在XML中指定,它将创建底层的协议栈。
JChannel channel=new JChannel("/home/eric/udp.xml"); channel.setReceiver(new ReceiverAdapter() { public void receive(Message msg) { System.out.println("received msg from " + msg.getSrc() + ": " + msg.getObject()); } }); channel.connect("MyCluster"); channel.send(new Message(null, "hello world")); channel.close();
我用JGroups来实现了一个简单的聊天工具,代码放在我的Github里:JGroups-Chat
请忽略丑爆的UI:
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于