先从下面这两行代码为进入点:
1. JChannel channel = new JChannel();
2. channel.connect("x");
第一行代码创建一个数据传输通道channel,第二行代码表示channel连接到一个名称为x的集群上。
先看 JChannel channel = new JChannel() 做了哪些动作。
1. 调用默认的构造函数
public JChannel() throws ChannelException {
this(DEFAULT_PROTOCOL_STACK);
}
说明:
DEFAULT_PROTOCOL_STACK为协议栈配置参数,是这样定义的:
public static final String DEFAULT_PROTOCOL_STACK="udp.xml";
2. 接着调用一个带有字符串参数的构造函数
public JChannel(String properties) throws ChannelException {
this(ConfiguratorFactory.getStackConfigurator(properties));
}
说明:properties为协议栈配置文件,默认为udp.xml
ConfiguratorFactory是一个协议栈配置工厂类,负责返回一个协议栈配置对象,协议栈对象解析协议,并负责创建协议对象。
3. 看ConfiguratorFactory.getStackConfigurator(properties)调用过程,
/**
* Returns a protocol stack configurator based on the provided properties
* string.
*
* @param properties an old style property string, a string representing a
* system resource containing a JGroups XML configuration,
* a string representing a URL pointing to a JGroups XML
* XML configuration, or a string representing a file name
* that contains a JGroups XML configuration.
*/
public static ProtocolStackConfigurator getStackConfigurator(String properties) throws ChannelException {
if (propertiesOverride != null) {
properties = propertiesOverride;
}
// added by bela: for null String props we use the default properties
if(properties == null)
properties=JChannel.DEFAULT_PROTOCOL_STACK;
checkForNullConfiguration(properties);
ProtocolStackConfigurator returnValue;
// Attempt to treat the properties string as a pointer to an XML
// configuration.
XmlConfigurator configurator = null;
try {
configurator=getXmlConfigurator(properties);
}
catch (IOException ioe) {
throw createChannelConfigurationException(ioe);
}
// Did the properties string point to a JGroups XML configuration?
if (configurator != null) {
returnValue=configurator;
}
else {
// Attempt to process the properties string as the old style
// property string.
returnValue=new PlainConfigurator(properties);
}
return returnValue;
}
从这段代码可以看出,先检查协议配置参数,通过则返回一个XML协议栈配置对象configurator。协议栈定义为一个接口
public interface ProtocolStackConfigurator
{
String getProtocolStackString();
ProtocolData[] getProtocolStack(); // ProtocolData对象包含协议名称,实现类等
}
下面重点瞧configurator=getXmlConfigurator(properties);
调用过程,负责解析XML文件:
/**
* Returns an XmlConfigurator based on the provided properties string (if
* possible).
*
* @param properties a string representing a system resource containing a
* JGroups XML configuration, a string representing a URL
* pointing to a JGroups ML configuration, or a string
* representing a file name that contains a JGroups XML
* configuration.
*
* @return an XmlConfigurator instance based on the provided properties
* string; <code>null</code> if the provided properties string does
* not point to an XML configuration.
*
* @throws IOException if the provided properties string appears to be a
*
- 大小: 13.8 KB
分享到:
相关推荐
《JGROUPS集群框架源码分析之消息发送、处理、接收》 JGROUPS是一款强大的开源通信框架,专为构建高可用性、高容错性的分布式系统而设计。它提供了集群内的消息传递功能,允许节点间可靠地交换信息。本文将深入探讨...
JGroups使用灵活的协议栈,这也是JGroups最强大(the most powerful)的功能,它允许开发人员配置协议栈来适用于他们自己的应用需求和网络特征。这样做的好处在于,开发人员只需要关注他们使用到的协议。通过组合和...
JGroups的灵活性在于它的协议栈,由多个协议层组成,每个协议层负责特定的功能。常见的协议包括: - **TP(Transport)**:基础传输层,如TCP或UDP。 - **PING**:用于节点发现。 - **MERGE2**:合并多个子集群。 -...
JGroups是一个用于建立可靠的组播通信的工具包,它提供了灵活的、可定制的协议栈,以满足不同的需求。JGroups支持多种传输协议,包括UDP、TCP和JMS等。在JGroups中,消息传输可以保证可靠性,即消息在传输过程中不会...
1. **Protocol Stack**:协议栈是JGroups的核心,由一系列协议构成,每个协议负责特定的任务,如传输层、拥塞控制、选举等。 2. **Transport Layer**:如TCP、UDP,负责底层数据包的发送和接收。 3. **Membership**...
配置文件定义了通信协议栈,包括传输层、可靠消息传递层等。 ##### 1.3 测试设置 为了验证JGroups是否正确安装和配置,可以通过运行内置的测试程序来检查。这些测试通常涉及网络连通性检查和基本的消息发送接收。 ...
Jgroups 是一种基于 IP 多播的可靠的组播中间件,UNICAST3 协议是 Jgroups 中的一种单播协议,旨在保持单播和 UNICAST2 的正面特征,而修正负面特征。 UNICAST3 协议的主要特点是: * 提供正确的连接管理(使用...
6. **可扩展性**:JGroups的设计允许用户自定义协议栈,以满足特定的性能和可靠性需求。 7. **安全性**:提供了安全协议,如加密和认证,保护群组通信不被窃听或篡改。 在JGroups-jgroups-5.3.4.Final目录下,通常...
JGroup是当前被广泛使用的可靠组间通信的工具之一。例如OSCache以及JBossTreeCache都是用的是JGroup。 JGroup功能十分强大,通过配置各种参数就可以充分利用它所提供的各项功能。JGroup最大的特点就是支持协议栈的...
其结构上设计灵活,提供了一种灵活兼容多种协议的协议栈,对于每个产品都有不同的可靠性需求。这种协议栈可以让用户定义的自己可靠性指标和性能指标。JGroups可以用来创建一个组,这个组中的成员可以给其他成员发送...
JGroups支持多种传输层和协议栈,允许开发者构建复杂的群集通信模式。它提供了丰富的API,用于创建通道、发送接收消息以及处理群集视图变化通知等。 ##### 创建通道与加入群集 首先,需要创建一个JGroups通道,这...
3. **Protocol Stack**: Jgroups的协议栈,由多个协议层组成,每个层负责特定的任务,如心跳检测、消息排序或故障检测。合理的配置可以优化集群性能和稳定性。 配置完成后,将Ehcache与Jgroups集成,主要涉及以下...
1. **协议栈**:JGroups的通信机制基于一系列可配置的协议,形成所谓的协议栈。每个协议处理特定任务,如堆栈顶部的协议负责组成员发现,中间的协议处理消息传输,底部的协议处理网络层操作。理解这些协议的工作原理...
2. **API使用**:研究源码中如何使用JGroups的API创建通道(Channel)、发送和接收消息,以及进行状态转移等操作。 3. **示例程序**:分析示例代码,了解如何初始化和管理JGroups集群,以及如何在实际应用中集成...
《JGroups:构建高效可靠的组通信系统》 JGroups是一个用Java编程语言编写的开源库,专注于实现基于IP组播的高效、可配置的组通信协议栈。它为分布式系统提供了一种健壮且灵活的方式来实现节点间的通信,是构建大...
5. **可配置的协议栈**:JGroups提供了丰富的协议栈,用户可以根据应用需求自由组合和配置。这些协议涵盖了网络层、传输层、可靠传输、故障检测、选举等各个方面。 6. **安全特性**:JGroups支持加密和身份验证,...
7. **可扩展性**:JGroups设计灵活,可以通过添加或替换协议栈来适应不同的网络环境和需求。 在`belaban-JGroups-2b52899`这个版本中,包含了JGroups的源代码,开发者可以深入学习其内部实现,理解各种通信协议的...
JGroups的通信能力依赖于其灵活的协议栈机制。每个协议负责处理特定的通信任务,如组成员发现、消息传输、心跳检测等。2.X版本中的协议栈包括了诸如PING、FD、MERGE2、STABLE、UNICAST2、BROADCAST、NAKACK2等,这些...
5. **协议栈**:JGroups使用可配置的协议栈,用户可以根据实际需求选择或自定义协议,如TCP、UDP、TLS等,以满足不同性能和安全要求。 6. **API简单易用**:JGroups提供了一个简单直观的API,使得开发者可以轻松地...