2.1.4      可靠的传输协议

    JGroups 栈里的可靠传输协议(reliable delivery protocols)确保数据包按正确的顺序(FIFO)正确地递送到目的节点。可靠的信息递送的基础是肯定和否定的递送确认(delivery acknowledgments)(ACK NAK)。在 ACK 模式下,发送者重新发送信息直到收到接收者的确认。在 NAK 模式下,当接收者发现一个间断时,它会请求重新传送。

2.1.4.1        UNICAST

    UNICAST 协议用于单播信息。它使用 ACK。它被配置成 JGroups Config 元素下的一个子元素。这里有一个配置UNICAST 协议的例子。
<UNICAST timeout="100,200,400,800"/>
UNICAST 元素里只有一个可配置属性。
  timeout 指定重新传送的超时时间(毫秒数)。例如,如果这个超时时间是 "100,200,400,800",如果发送者在 100 毫秒后还没有接到 ACK,它会重新发送信息,第二此重发会在 200 毫秒后,以此类推。

2.1.4.2        NAKACK

    NAKACK 协议用于多点传送信息。它使用 NAK。在这个协议下,每个信息用一个序列号标识。接收者根据这个序列号来按顺序递送信息。当检测到序列号存在一个间断时,接收者会要求发送者重新传送丢失的信息。NAKACK 协议被配置为 JGroups Config 元素下的 pbcast.NAKACK 子元素。这里有一个配置示例。
<pbcast.NAKACK
max_xmit_size="8192"
use_mcast_xmit="true"
retransmit_timeout="600,1200,2400,4800"/>
下列是pbcast.NAKACK 元素的可配置属性。
  retransmit_timeout 指定重发的超时时间(毫秒数)。它和 UNICAST 协议里的 timeout 属性是一样的。
  use_mcast_xmit 决定发送者是否应该重发给整个群集而不只是请求的节点。这在发送者取消数据包时很有用 - 我们不需要对每个节点都重发。
  max_xmit_size 指定当多个数据包丢失时,捆绑在一起的重发的最大规模。
  discard_delivered_msgs 指定是否丢弃接收节点上的递送信息。在缺省情况下,我们保存所有的递送的信息。然而,如果我们只需要发送者重发信息,我们就可以启用这个选项来丢弃递送的信息。

2.1.5      其他的配置选项

    除了协议栈以外, Config 元素中你也可以配置JGroups网络服务。

2.1.5.1        组成员资格

    JGroups 栈里的组成员资格(group membership)服务维护一个活动节点的列表。它处理加入和离开群集系统的请求。它也处理故障检测协议(failure detection protocols)发送的可疑(SUSPECT)信息。当组成员资格有变动时,它通知群集系统里的所有节点,负载平衡系统(load balancer)和客户端拦截器(client side interceptors)。组成员资格(group membership)服务可以在 JGroups Config 元素下的 pbcast.GMS 子元素里配置。这里是一个配置示例。
<pbcast.GMS print_local_addr="true"
join_timeout="3000" down_thread="false" join_retry_timeout="2000" shun="true"/>
下列是pbcast.GMS元素里的可配置属性。
  join_timeout 指定了等待新节点 JOIN 请求成功的最长时间(毫秒数)。 然后再试。
  join_retry_timeout 指定 JOIN 失败后重新递交JOIN前所等待的时间(毫秒数)。
  print_local_addr 指定是否在启动时输出节点自己的地址。
  shun 指定如果收到指明自己并非成员节点的群集视图,节点是否剔除(shun)自己。
  disable_initial_coord 指定是否阻止这个节点成为群集控制点(cluster coordinator)。

2.1.5.2        流程控制

    流量控制(flow control)服务试图在节点间控制发送和接收数据传输率。如果一个节点发送的过快,它可能会使接收节点难以负荷,导致数据包的丢失而且不得不重新发送。在 JGroups 里,流量控制通过基于信用值(credit-based)的系统来实现。发送和接收节点具有相同的初始信用值(credits)(字节数)。发送者减去所发送信息的字节数,而接收者积累它接收到的信息的字节数。当发送者的信用值减少至某一极限时,接收者将把一些信用值发送给发送者。如果发送者的信用值被用光了,发送者将暂停,直到它收到接收者的信用值为止。流量控制服务在 JGroups Config 元素下的 FC 子元素里配置。下面是一个配置示例。
<FC max_credits="1000000" down_thread="false"
min_threshold="0.10"/>
下列是 FC 元素的可配置属性。
  max_credits指定最大的信用值(字节数)。这个值应该小于 JVM heap size
  min_credits 指定发送者的极限信用值,如果低于这个值,接收者就应该发送更多的信用值给发送者。
  min_threshold 指定极限值的百分比。它可以覆盖 min_credits 属性。

2.1.5.3        状态转移

    状态迁移服务从一个现有的节点(例如., 集群协调者) 传输状态到一个新加入的节点。它的配置在JGroups Config 元素之下的pbcast.STATE_TRANSFER sub-element. 它没有一些配置属性.这是一个配置实例.
<pbcast.STATE_TRANSFER down_thread="false" up_thread="false"
/>

2.1.5.4        分布式的垃圾回收

    在一个JGroups集群里, 所有的节点不得不存放收到的所有消息,为了万一出现故障的潜在重发。可是, 如果我们永远存储所有的消息, 我们将用完内存。所以, JGroups中的分布式的碎片收集服务周期性的,从我们能看到的所有节点的各自的内存中清理消息。分布式碎片收集配置在JGroups Config元素之下的 pbcast.STABLE sub-element 。这是一个配置实例.
<pbcast.STABLE stability_delay="1000" desired_avg_gossip="5000" down_thread="false" max_bytes="250000"/>
pbcast.STABLE 元素里的配置属性如下.
  desired_avg_gossip 指定碎片收集运行的时间间隔(单位是毫秒). 当值设置成0时,将禁用此服务。
  max_bytes 指定在集群触发一个碎片收集运行之前,收到的字节的最大数量. 当值设置成0时,将禁用此服务。
  max_gossip_runs指定在一些修改之前最大碎片收集运行。
这个数值到达之后,直到这个消息被接收,否则没有碎片收集。
注意 
   当你有一个高效的通信群集的时候设置 max_bytes 属性.

2.1.5.5        合并

    当一个网络出现错误的时候,集群可以被分割为几个不同的分区。JGroups有一个MERGE 服务,允许协调者在分区中互相通话。and form a single cluster back again. flow 控制服务配置在JGroups Config元素之下的MERGE2 sub-element 里面。这有一个实例配置。
<MERGE2 max_interval="10000" min_interval="2000"/>
FC元素里可配置的属性如下。
  max_interval指定发送一个MERGE消息的最大时间,单位是毫秒。
  min_interval指定发送一个MERGE消息的最小时间,单位是毫秒。
JGroups min_interval max_interval之间选择一个随机的数值来发送MERGE消息。
注意
   在一个合并里集群的状态是不合并的。这需要应用程序来完成。