读书人

JBoss 系列9: Bela Banamp;#39;s JGroup

发布时间: 2013-10-08 17:12:09 作者: rapoo

JBoss 系列九: Bela Ban's JGroups Manual 翻译 III - JGroups API
内容概要

如我们在前面所讲,JGroups是一个Java多播通信工具包,是对JDK的一种补充,所以本章主要讨论JGroups API,以及对API使用的简单示例。本章包括两部分,通道 API 及构建块 API,我们目的是通过本章的学习,使可以读者能够使用JGroups API构建自己的Java多播通信应用。

通道 API

这部分我们介绍构建可靠群组通信的主要类,我们主要集中于创建的使用通道。所有这些类位于 org.jgroups 包中。

工具类

org.jgroups.util.Util 包含许多实用的的方法,我们可以使用这些方法来简化我们的代码。

一条消息可以分为五个部分:

目的地址源地址标志符有效负载消息头

如下我们将对这五个部分依次做简单介绍。

目的地址

群组中接收成员的地址。如果为空,该消息将被发送到所有当前的群组成员。Message.getDest()返回消息的目的地地址。

源地址

发送者的地址。可以保留为空,如果为空,该字段将会由传输协议(如UDP)在将消息发送到网络上之前填写。

标识符

大小为一个字节。目前可识别的标志符有 OOB,DONT_BUNDLE,NO_FC,NO_RELIABILITY,NO_TOTAL_ORDER,NO_RELAY 和 RSVP。稍候我们将会做详细的讨论。

有效负载

实际的数据(以字节缓冲区的形式)。Message类包含方便的方法来设置一个序列化的对象,并检索了一遍,使用序列化将对象转换到/从一个字节缓冲区。如果缓冲区的子范围较大的缓冲区,一个消息会有一个偏移量和长度。

消息头

可以有一个队列的消息有连接到一个消息,任何不能够在有效负载中的信息可以作为消息头。方法putHeader(),getHeader()和removeHeader()的消息可以用于操纵控制消息头。需要声明,消息头是内部协议实现时做封装调运,应用程序代码不能够添加或删除消息头。

一条消息,是类似的一个IP包的有效载荷(一个字节缓冲器)和发送者和接收者(如地址)的地址组成。可以把网络上的任何消息路由到其目的地(接收地址),反馈消息可以返回到发送者的地址。

一条消息,通常并不需要填写发件人的地址发送邮件时,这是由协议栈将消息发送到网络上之前自动完成的。然而,可能存在这样的情况,当该消息的发送者希望得到一个从它自己的不同的地址,例如反馈消息发送到其他成员。

目标地址(接收器)可以是一个地址,表示一个成员的地址,例如确定从收到的消息,也可以是空的,这意味着该消息将被发送到该组的所有成员。一个典型的多播消息,发送字符串“Hello”的所有成员将看起来像这样:

当第一次创建一个通道,它是在未连接状态。如果通道在未连接状态执行某些特定方法(如发送/接收消息)会抛出异常。如果有客户端成功连接到通道,通道变为连接状态。在连接状态,通道可以接收/发送消息,同时也会收到通道中成员离开或新成员加入的通知消息。当通道断开,允许其返回到未连接状态。一个连接和未连接的通道都可以被关闭,这样设计也是为了通道的可重利用。当通道处于关闭状态,任何方法尝试操作通道都会抛出异常。当出于连接状态的通通执行关闭操作,首先通道变为未关闭状态,然后到关闭状态。

通道是构建可靠多播群组通信的最主要接口,接下来我们列出所有操作通道的方法,通过这些方法我们可以明细通道状态的变化。

创建通道

我们可以通过通道的构造方法创建一个通道。最被常用的方法如下:

    public interface RspFilter {          boolean isAcceptable(Object response, Address sender);          boolean needMoreResponses();      }  

isAcceptable()方法参数包括响应值和响应的发送者,并需要决定响应发送者是否添加到响应列表,响应发送者添加到响应列表返回true,否则返回false。 needMoreResponses()方法判断是否调用是否返回。

ReplicatedHashMap 与 ReplCache

JGroups 包中的 ReplicatedHashMap 与 ReplCache 位于 org.jgroups.blocks 包中,这两个类都是基于底层通道 API 来实现共享缓存的方案,具体前者在所有节点上共享资源,而后者是在指定个数的节点上共享资源。资源以键值对的方式保存在共享的缓存中,两个类都提供了 get(),put()等方法,集群中成员可以通过这些方法改变缓存。特别 ReplCache 提供分布式缓存相关的特性,它提供类似 put(K,V,R) 的方法,该方法中 R 表示 键值对资源在集群中保存几份,如果为 2 表示在集群中复制两份。

读书人网 >操作系统

热点推荐