为什么当操作系统选择端口时,aeron 间谍订阅不适用于动态 MDC 发布?



在创建动态控制模式的MDC发布时,为了让操作系统选择端口(设置了ssc=true),将控制端点端口设置为0,导致没有镜像可用于间谍订阅。

复制步骤:

  • 创建出版物aeron:udp?control=localhost:0|control-mode=dynamic|ssc=truestreamId=0
  • 通过localSocketAddresses方法检索localAddr出版物
  • streamId=0创建订阅aeron-spy:aeron:udp?control=<localAddr>|control-mode=dynamic

期望图像可以用于订阅,但它没有发生。

如果将端口设置为静态值而不是0或从订阅中删除前缀aeron-spy:,则完全相同的代码可以工作。

这是我的代码重现的问题

这个问题的简单答案是发布uri和间谍uri实际上并不匹配。假设绑定的端口是32456

publication: aeron:udp?control=localhost:0|control-mode=dynamic|ssc=true
spy: aeron:udp?control=localhost:32456|control-mode=dynamic|ssc=true

给定OP的代码,端口恰好在一段时间内匹配,但是如果关闭发布并再次打开,这种关联很容易被破坏,因为端口将不同。

当使用通配符端口时,推荐使用一种方法。如果你想引用另一个发布(例如从一个间谍)或创建多个订阅到同一个通配符端口,那么使用标签是合适的解决方案:

publication: aeron:udp?control=localhost:0|control-mode=dynamic|ssc=true|tags=1001
spy: aeron-spy:aeron:udp?tags=1001

相关内容

  • 没有找到相关文章

最新更新