百度Apollo系统学习-Cyber RT 通信-服务发现

解析百度Apollo CyberRT框架中的服务发现模块,探讨其如何监测通信节点存活、通知节点变化,以及管理三张拓扑网(Node、Channel、Service)的机制。

前言

在这一章开始前,默认读者已经读完了专栏中有关cyberRT的注册启动以及通信部分的内容,在通信部分的最后我们遗留了一个问题,那就是在ReaderWriter初始化的时候会调用到一个JoinTheTopology函数,这个函数具体在做什么事情,也是我们这一章主要回答的问题。

基本概念

服务发现模块不负责具体消息的传递,而主要负责监测cyber中通信节点的存活情况,并且提醒已有节点有新节点加入并作出相应动作(比如某个channel多了一个读者,那么对应的写者就需要激活合适的Transmitter)。
NodeServer/Client/Writer/Reader的容器,Server/Client/Writer/Reader(注意Server在代码里其实是Service类,下面提到的Service是概念Service而不是代码里的Service)是有向图的顶点,ChannelWriterReader的边缘,ServiceServerClient的边缘。cyber中把WriterServer称作Upstream,另外两个是Downstream

TopologyManager

整个服务发现系统是一个全局的管理体系,每个process都有一个单例TopologyManagercyber/service_discovery/topology_manager.h),提供三个拓扑网的管理器NodeManagerChannelManagerServiceManager。所有的NodeNodeManager中被管理;所有的Channel以及ReaderWriter都在ChannelManager里;所有的Services以及ServerClient都在ServiceManager。目前从代码上看,其实TopologyManager的作用是监视网络中是否有参与者Participant退出或意外退出,而新参与者的加入是下属的三个管理器负责通知的。

  • TopologyManager里的消息是通过通信模式中的RTPS模式来进行通信的,也就是说通信系统实际上不依赖于服务发现系统,服务发现系统实际上是一个更高层面的管理。
  • 成员有一个RTPS中的参与者,在TopologyManager::Init()时会被创建,参与者的名字(不光是TopologyManager,整个服务发现网络的所有参与者名字都是这样组成的)由全局变量中的HostName()ProcessId()组成,监听的端口是11511(组件通过RTPS模式通信时的名字组成和这个一样,但端口是11512,具体见专栏里通信底层介绍的博客)。随之创建的还有该参与者的监听器(ParticipantListener,底层由fast-rtps实现)在该参与者发生变化的时候会调用,这
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值