2021SC@SDUSC
目录
二、MasterServer与MasterServerRegisterationImpl的关系
一、写在前面
在上一篇博客中,我们学写了MasterServer的组成部分Node、Topic与Service的层次结构并分析了三者相关信息类的源码.本篇博客将重点分析Topic与Service的注册注销服务与MasterServer在高层次进行注册注销的逻辑.
二、MasterServer与MasterServerRegisterationImpl的关系
在MasterServer中,有一个对象MasterServerRegistrationImpl负责管理注册的Topic、Service与Node,MasterServer主要负责接收注册注销信息并保证这些动作的有序进行.简而言之,MasterServer的注册与注销等功能主要是为了提供一个的花名册供各Node了解到目前能够提供的服务并注册自己的服务通过MasterServer让其他Node获知.在实际的系统运行中,各个Node的功能调用是peer-to-peer的,MasterServer在这个层面上仅提供名称管理的功能.
三、MasterServer
public void registerService(GraphName nodeName, URI nodeSlaveUri, GraphName serviceName,
URI serviceUri) {
synchronized (masterRegistrationManager) {
masterRegistrationManager.registerService(nodeName, nodeSlaveUri, serviceName, serviceUri);
}
}
public boolean unregisterService(GraphName nodeName, GraphName serviceName, URI serviceUri) {
synchronized (masterRegistrationManager) {
return masterRegistrationManager.unregisterService(nodeName, serviceName, serviceUri);
}
}
1、
registerService接收node名称、nodeURI、service名称、serviceURI作为参数,使用synchronized关键字获取masterRegistrationManager对象上的锁,此对象就是前文中提到的实际执行注册注销功能的对象.在进入互斥区后调用manager的registerService方法并传递参数组.
unregisterService方法接收与上一个方法相同的参数,在进入互斥区后调用manager的同名方法并将参数组传递.
在上篇博客中提到过,无论是service还是topic都是node不同功能根据其特点的分类,因此service与topic均是依附于node的,在注册注销service与topic时都要指明其存在的node.这一点也会在我们后续分析MasterServerRegistrationImpl对应的方法时得到进一步证实.
public List<URI> registerSubscriber(GraphName nodeName, URI nodeSlaveUri, GraphName topicName,
String topicMessageType) {
if (DEBUG) {
log.info(String.format(
"Registering subscriber %s with message type %s on node %s with URI %s", topicName,
topicMessageType, nodeName, nodeSlaveUri));
}