服务发现和代理实例的自动更新

1.服务发现的两种方式

  • StartFindService 方法

    • 这是一个在后台启动的连续 “FindService” 活动,当服务实例的可用性发生变化时,会通过回调通知调用者。

    • 它返回一个FindServiceHandle,可通过调用StopFindService来停止正在进行的监视服务实例可用性的后台活动。

    • 其第一个参数是一个用户提供的处理函数(具有特定签名std::function<void(ServiceHandleContainer<T>, FindServiceHandle)>),每当匹配的服务实例可用性改变时,就会调用该处理程序,并提供更新后的服务实例句柄列表。

  • FindService 方法

    • 这是一次性调用,使用实例标识符的不同有两种重载方式(使用 ara::com::InstanceIdentifier 或 ara::core::InstanceSpecifier)。

    • 它为匹配的服务实例返回一个句柄容器,如果当前没有匹配的服务实例,容器可能为空。

2.Auto Update Proxy instance 相关问题

  • 服务启停后的重用问题

    • 当服务实例停止运行后又重新运行时,ara::com的设计要求从绑定实现中解决服务消费者端代理实例的重用问题。

    • 例如在服务消费者应用程序从 FindService 返回的句柄实例化服务代理实例后,在服务实例关闭再出现的过程中,服务代理实例的通信管理会被通知并静默更新(如在 T3 阶段传输层部分颜色从蓝色更改为玫瑰色),使得服务方法调用在服务实例再次可用时能够成功(T4 阶段)。

  • 对开发者的好处

    • 这种设计使客户端应用程序的实现者无需通过 GetSubscriptionState () 对事件进行轮询(仅在服务实例已关闭时才需调用)、无需重新调用 FindService 获取新句柄、无需重新注册FindServiceHandler(回调)以及重新创建代理实例和重新进行事件订阅调用等操作。

  • 代码示例说明

    • 在给定的代码片段中,radarServiceAvailabilityHandler函数展示了在服务实例可用性变化的处理函数中,与现有 Proxy 实例进行交互的情况。当服务实例再次启动时,对代理实例的调用(如myRadarProxy->Calibrate("test"))不应导致服务实例不可达的异常,因为代理实例应该已经自动更新。

3.StartFindService方法的大致实现步骤:

3.1. 启动服务查找后台活动

  • 初始化操作:当调用 StartFindService() 方法时,首先在后台开启一个持续的服务查找进程,这个进程负责不断监测符合条件的服务实例的可用性。

  • 参数接收:接收用户提供的处理函数(具有std::function<void(ServiceHandleContainer<T>, FindServiceHandle)>签名)作为第一个特定参数,同时进行其他必要参数的初始化。

3.1.1 监测服务实例可用性

  • 绑定检测机制:通过特定的绑定检测机制来跟踪服务实例的状态变化。这些绑定是由服务接口部署形式的服务实例清单中的相应服务接口配置的技术绑定。

  • 状态变化检测:持续检测那些与StartFindService() 的调用相匹配的服务实例的可用性是否发生改变。

3.1.2 回调处理

  • 触发条件:每当绑定检测到服务实例的可用性发生改变时,触发回调操作。

  • 回调执行:调用用户提供的处理函数,将包含当前可用的服务实例的句柄的更新列表(以 ServiceHandleContainer 容器形式)以及 FindServiceHandle 参数传递给该处理函数。

  • 初始调用:在 StartFindService() 被调用后,即使在初始阶段没有服务实例可用性的变化,也会使用当前可用的服务实例(可能是空的句柄列表)来触发用户提供的处理函数,类似于一次性的 FindService() 方法的行为。

3.1.3 停止服务查找

  • 停止机制:用户可以通过调用 StopFindService() 方法(使用 StartFindService() 返回的 FindServiceHandle)来停止正在进行的监视服务实例可用性的后台活动。

  • 序列化处理:在整个过程中,由于处理者不必是可重入的,所以绑定实现者必须负责序列化对用户提供的处理函数的调用,确保操作的有序性和正确性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青草地溪水旁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值