- 浏览: 3506763 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wanglf1207:
EJB的确是个不错的产品,只是因为用起来有点门槛,招来太多人吐 ...
weblogic-ejb-jar.xml的元素解析 -
qwfys200:
总结的不错。
Spring Web Flow 2.0 入门 -
u011577913:
u011577913 写道也能给我发一份翻译文档? 邮件437 ...
Hazelcast 参考文档-4 -
u011577913:
也能给我发一份翻译文档?
Hazelcast 参考文档-4 -
songzj001:
DbUnit入门实战
目前项目中在克服JGroups初期使用的困难之后,已经使用比较稳定了。感觉比较烦琐和容易出错的还是JGroups配置。感觉中文的资源较少,现将自己总结的经验总结如下
Tim http://hi.baidu.com/jabber/blog/item/7e879852a23efd0f0cf3e3ea.html
JGroups 适合使用场合
服务器集群cluster、多服务器通讯、服务器replication(复制)等,分布式cache缓存
JGroups 简介
JGroups是一个基于Java语言的提供可靠多播(组播)的开发工具包。在IP
Multicast基础上提供可靠服务,也可以构建在TCP或者WAN上。主要是由Bela
Ban开发,属于JBoss.org,在JBoss的网站也有一些相关文档。目前在 SourceForge上还是比较活跃,经常保持更新。
JGroups 配置
PING: 发现初始成员
MERGE2: 将网络层切分的包重新合并。
FD_SOCK: Failure Dectection 错误检测,基于TCP
FD:Failure Dectection 错误检测,基于心跳
VERIFY_SUSPECT: 检查貌似失败的节点
pbcast.NAKACK: 应答,提供可靠传输
UNICAST: 可靠的UNICAST
pbcast.STABLE: 计算广播信息是否稳定
VIEW_SYNC: 定期广播view(成员名单)
pbcast.GMS: Group membership, 处理joins/leaves/crashes等
FC: 流量控制
FRAG2:Fragmentation layer,分包,将大的数据包分拆成适合网络层传输
以上一些是比较重要的配置,基本上不能少。如果要深入研究可以在 org.jgroups.protocols 里面查看源代码
JGroups使用例子, JGroups demo, Tim的hello world例子
Timreceiver.java
import org.jgroups.tests.perf.Receiver; import org.jgroups.tests.perf.Transport; import org.jgroups.util.Util; public class TimReceiver implements Receiver { private Transport transport = null; public static void main(String[] args) { TimReceiver t = new TimReceiver(); try { int sendMsgCount = 5000; int msgSize = 1000; t.start(); t.sendMessages(sendMsgCount, msgSize); System.out.println("########## Begin to recv..."); Thread.currentThread().join(); } catch (Exception e) { e.printStackTrace(); } finally { if (t != null) { t.stop(); } } } public void start() throws Exception { transport = (Transport) new TimTransport(); transport.create(null); transport.setReceiver(this); transport.start(); } public void stop() { if (transport != null) { transport.stop(); transport.destroy(); } } private int count = 0; public void receive(Object sender, byte[] data) { System.out.print("."); if (++count == 5000) { System.out.println("\r\nRECV DONE."); System.exit(0); } } private void sendMessages(int count, int msgSize) throws Exception { byte[] buf = new byte[msgSize]; for (int k = 0; k < msgSize; k++) buf[k] = 'T'; System.out.println("-- sending " + count + " " + Util.printBytes(msgSize) + " messages"); for (int i = 0; i < count; i++) { transport.send(null, buf); } System.out.println("######### send complete"); } }
TimTransport.java
import java.util.Map; import java.util.Properties; import org.jgroups.Address; import org.jgroups.JChannel; import org.jgroups.Message; import org.jgroups.ReceiverAdapter; import org.jgroups.tests.perf.Receiver; import org.jgroups.tests.perf.Transport; public class TimTransport extends ReceiverAdapter implements Transport{ private JChannel channel = null; private String groupName = "TimDemo"; private Receiver receiver = null; String PROTOCOL_STACK_UDP1 = "UDP(bind_addr=192.168.100.59"; String PROTOCOL_STACK_UDP2 = ";mcast_port=8888"; String PROTOCOL_STACK_UDP3 = ";mcast_addr=225.1.1.1"; String PROTOCOL_STACK_UDP4 = ";tos=8;loopback=false;max_bundle_size=64000;" + "use_incoming_packet_handler=true;use_outgoing_packet_handler=false;ip_ttl=2;enable_bundling=true):" + "PING:MERGE2:FD_SOCK:FD:VERIFY_SUSPECT:" +"pbcast.NAKACK(gc_lag=50;max_xmit_size=50000;use_mcast_xmit=false;" + "retransmit_timeout=300,600,1200,2400,4800;discard_delivered_msgs=true):" +"UNICAST:pbcast.STABLE:VIEW_SYNC:" +"pbcast.GMS(print_local_addr=false;join_timeout=3000;" + "join_retry_timeout=2000;" + "shun=true;view_bundling=true):" +"FC(max_credits=2000000;min_threshold=0.10):FRAG2(frag_size=50000)"; public Object getLocalAddress() { return channel != null ? channel.getLocalAddress() : null; } public void start() throws Exception { channel.connect(groupName); } public void stop() { if (channel != null) { channel.shutdown(); } } public void destroy() { if (channel != null) { channel.close(); channel = null; } } public void setReceiver(Receiver r) { this.receiver = r; } public Map dumpStats() { return channel != null ? channel.dumpStats() : null; } public void send(Object destination, byte[] payload) throws Exception { byte[] tmp = new byte[payload.length]; System.arraycopy(payload, 0, tmp, 0, payload.length); Message msg = null; msg = new Message((Address) destination, null, tmp); if (channel != null) { channel.send(msg); } } public void receive(Message msg) { Address sender = msg.getSrc(); byte[] payload = msg.getBuffer(); if (receiver != null) { try { receiver.receive(sender, payload); } catch (Throwable tt) { tt.printStackTrace(); } } } public void create(Properties config) throws Exception { String PROTOCOL_STACK = PROTOCOL_STACK_UDP1 + PROTOCOL_STACK_UDP2 + PROTOCOL_STACK_UDP3 + PROTOCOL_STACK_UDP4; channel = new JChannel(PROTOCOL_STACK); channel.setReceiver(this); } public void send(Object destination, byte[] payload, boolean oob) throws Exception { send(destination, payload); } }
JGroups 下载 download
http://www.jgroups.org/
发表评论
-
字符串分割--java中String.split()用法
2013-03-06 14:25 74155在java.lang包中有String.sp ... -
用 HttpServletResponseWrapper 实现 Etag 过滤器
2012-07-09 16:58 3764原文出处:http://blog.chenlb.com/200 ... -
Fitnesse使用
2012-05-05 13:27 23504Fitnesse 的使用 一,介绍 Fitnesse是一种 ... -
Customizing the new FitNesse parser
2012-05-05 13:13 2139FitNesse began its life using ... -
java application中内嵌ActiveX控件
2011-11-14 15:57 5528我这里用的是SWT/JFace开发application,SW ... -
Google Java Developer Tools Downloads
2011-08-09 00:04 2351WindowBuilder Pro原来叫WindowB ... -
Jalita
2011-08-06 00:49 1570Jalita (Java light terminal ada ... -
【转】用Java写字符终端界面
2011-07-29 13:13 2127终端界面GUI开源项目charva。 这个框架让你可以用开发 ... -
[转]mybatis下的分页,支持所有的数据库
2011-07-21 13:21 14844大 家都知道,mybatis的自带分页方法只是逻 ... -
Java framework for text- & console-based forms?
2011-07-21 01:06 1714charva jcurses JNA , ... -
JNA(Java Native Access)学习入门
2011-07-21 01:04 22656Java Native Access 项目 在 ... -
JAVA上加密算法的实现用例
2011-06-25 12:38 4887来源:www.ibm.com ... -
如何将GlassFish作为Windows服务运行
2011-05-18 23:21 2379本文档来自GlassFish官方网站,详细介绍了将 G ... -
JAVA UDP打洞必备知识点---NAT
2011-05-05 12:56 8713一、引言 RFCl631 ... -
Keystore概念,Keytool工具使用
2011-04-28 16:20 2909近来由于项目需要做Single Sign On, 研究了一 ... -
利用Eclipse Profile Plugin监控分析Tomcat性能
2011-04-18 16:14 3707目前新版本的Eclipse在启动应用服务器的时候有一个新的选 ... -
m2eclipse: Eclipse is running in a JRE, but a JDK is required
2011-02-04 23:43 2546Eclipse 安装了Maven插件,启动Eclipse ... -
利用JNative实现Java调用动态库
2010-10-18 00:43 2106由于项目要求,需要用J ... -
RHEL5支持大内存
2010-10-08 16:19 3014安装 RHEL 5 ,硬件为 4G 内存,安装完成 ... -
Windows Server 2003 和 Windows 2000 提供大内存支持
2010-10-08 16:19 1859本文介绍物理地址扩展 ...
相关推荐
- **协议栈(Protocol Stack)**: JGroups 使用协议栈来处理不同的任务,如组成员发现、消息传输和故障检测等。每个协议负责特定的职责,形成一个高效的通信链路。 2. **JGroups 的关键功能** - **成员发现...
- `jgroups-all.jar`:核心JGroups功能库,包括demo和junit应用程序。如果需要更小的JAR包,可以下载源代码并执行“jar”目标,生成大约1MB大小的`jgroups-core.jar`。 - `log4j.jar`(可选):日志库,JGroups也...
JGroups的协议栈可以根据不同的需求进行定制,例如,如果选择使用IP Multicast作为传输协议,可以在协议栈中添加NAKACK协议以防止报文丢失和重复,添加TOTAL协议以保证报文的顺序,添加Group Membership Service ...
Ehcache是一款高效、流行的Java缓存库,它允许应用程序快速访问经常使用的数据,从而提高性能和响应速度。在分布式环境中,为了实现数据共享和高可用性,Ehcache提供了集群功能。而Jgroups则是Java中一个强大的集群...
5. **可配置的协议栈**:JGroups提供了丰富的协议栈,用户可以根据应用需求自由组合和配置。这些协议涵盖了网络层、传输层、可靠传输、故障检测、选举等各个方面。 6. **安全特性**:JGroups支持加密和身份验证,...
JGroups完全用Java编写,因此可以无缝集成到任何Java应用中,无论是在企业级应用服务器、分布式数据库还是微服务架构中。 总的来说,JGroups是Java开发人员构建分布式系统时的强大工具,它简化了集群通信的复杂性,...
### JGroups:可靠的组通信 #### 概览与核心概念 **JGroups**是一个用于创建分布式应用程序的Java库,它提供了可靠、高效的组播通信功能。JGroups支持多种传输层协议,包括TCP、UDP和多播等,并允许开发人员自定义...
- **分布式缓存**: 如在使用Infinispan或Hazelcast等分布式缓存时,JGroups提供了底层的通信支持。 - **协作工具**: 在程序员的刷题软件中,JGroups可以实现实时的问题讨论、答案同步和协作解题等功能。 ### 5. ...
### 关于JGroups 2.5教程:安装与开发简易应用程序 #### 安装与配置JGroups **JGroups**是一款高性能、可扩展且高度可靠的群集通信库,旨在为分布式系统提供消息传递功能。本教程将深入探讨如何安装配置JGroups,...
该项目提供了一个 Dropwizard Bundle,将 JGroups 配置集成到标准配置文件中。 还提供了一个项目来演示如何使用该包。 用法 Maven 要使用此项目的快照,您需要在 POM 中包含 sonatype 存储库。 <enabled>...
jgroups-raft 项目是 JGroups 框架对 Raft 的实现。Maven:<groupId>org.jgroups <artifactId>jgroups-raft <version>0.2</version>Raft 是一个容易理解的共识算法。在容错和性能方面它相当于 Paxos(Google 的一致...
开发者可以通过查阅源码了解其实现细节,利用文档学习如何配置和使用JGroups,从而更好地集成到自己的项目中。 总结来说,JGroups作为一款强大的通信框架,不仅提供了丰富的功能,还具有高度可定制性,对于构建高...
5. **协议栈**:JGroups使用可配置的协议栈,用户可以根据实际需求选择或自定义协议,如TCP、UDP、TLS等,以满足不同性能和安全要求。 6. **API简单易用**:JGroups提供了一个简单直观的API,使得开发者可以轻松地...
jgroups-raft JGroups中RAFT [1]共识算法的实现。 对于设计,请查看doc 。 要生成手册,请执行ant manual (需要asciidoctor )。 关于设计和实现的讨论在[2]。 网页在这里:[3]。 #jgroups-raft上有一个IRC。 [1] ...
《深入解析JGroups开源框架:基于belaban-JGroups-19d7183源代码》 JGroups是一个用于构建高可用性集群的Java框架,它提供了可靠的消息传递、组成员管理和故障检测等功能,广泛应用于分布式系统中。本文将基于bela...
2. **文档**:可能包含API文档、用户手册和开发者指南,帮助理解如何使用和集成JGroups。 3. **示例**:一些示例程序展示了JGroups的基本用法和高级功能,便于快速上手。 对于计算机科学的学生和研究人员来说,...
总结来说,这个 JGroups 聊天小程序示例展示了如何使用 JGroups 建立分布式通信,包括节点之间的消息传递、视图管理和状态同步。通过这种方式,开发者可以构建出一个健壮的、容错的聊天系统,支持多个节点之间的实时...
JGroups使用灵活的协议栈,这也是JGroups最强大(the most powerful)的功能,它允许开发人员配置协议栈来适用于他们自己的应用需求和网络特征。这样做的好处在于,开发人员只需要关注他们使用到的协议。通过组合和...
- **路由选择**:JGROUPS使用组协议栈来决定消息的路由。组协议栈是由多个协议层组成的,如UDP、TCP、FRAG等,每个协议层都有特定的职责,如网络传输、消息分片或重传。 - **协议处理**:消息通过协议栈时,每个...