java - 如何在 Aeron 库中创建多目标转换

标签 java low-latency aeron

我正在尝试使用 Multi-Destination-Cast 交通,但我不知道如何配置它, 我正在尝试实现解释的示例 URI here使用SimplePublisher.javaSimpleSubscriber.java

我有一个发布者和两个订阅者。

对于携带 SimplePublisher.java 和 SimpleSubscriber.java 的默认 aeron 参数,我已更改:

来自 SimplePublisher.java

final String channel = "aeron:udp?control=192.168.0.3:4050|control-mode=manual";

来自 SimpleSubscriber.java:

我复制了 SimpleSubscriber1.java 和 SimpleSubscriber2.java 类,并更改了以下配置:

简单订阅者1:

final String channel = "aeron:udp?endpoint=192.168.0.4:4051"

简单订阅者2:

final String channel = "aeron:udp?endpoint=192.168.0.5:4052"

发布者和订阅者收到的错误几乎相同:

对于发布者:

Publishing to aeron:udp?control=192.168.0.3:4050|control-mode=manual on stream Id 10
io.aeron.exceptions.ChannelEndpointException: RuntimeException : Channel error: Cannot assign requested address: bind : aeron:udp?control=192.168.0.3:4050|control-mode=manual
at io.aeron.ClientConductor.onChannelEndpointError(ClientConductor.java:196)
at io.aeron.DriverEventsAdapter.onMessage(DriverEventsAdapter.java:77)
at org.agrona.concurrent.broadcast.CopyBroadcastReceiver.receive(CopyBroadcastReceiver.java:100)
at io.aeron.DriverEventsAdapter.receive(DriverEventsAdapter.java:56)
at io.aeron.ClientConductor.service(ClientConductor.java:660)
at io.aeron.ClientConductor.doWork(ClientConductor.java:151)
at org.agrona.concurrent.AgentRunner.doDutyCycle(AgentRunner.java:233)
at org.agrona.concurrent.AgentRunner.run(AgentRunner.java:159)
at java.lang.Thread.run(Thread.java:748)
Failed to connect to subscriber

并且,对于订阅者:

Subscribing to aeron:udp?endpoint=192.168.0.4:4051 on stream Id 10
io.aeron.exceptions.ChannelEndpointException: RuntimeException : Channel error: Cannot assign requested address: bind : aeron:udp?endpoint=192.168.0.4:4051
at io.aeron.ClientConductor.onChannelEndpointError(ClientConductor.java:187)
at io.aeron.DriverEventsAdapter.onMessage(DriverEventsAdapter.java:77)
at org.agrona.concurrent.broadcast.CopyBroadcastReceiver.receive(CopyBroadcastReceiver.java:100)
at io.aeron.DriverEventsAdapter.receive(DriverEventsAdapter.java:56)
at io.aeron.ClientConductor.service(ClientConductor.java:660)
at io.aeron.ClientConductor.doWork(ClientConductor.java:151)
at org.agrona.concurrent.AgentRunner.doDutyCycle(AgentRunner.java:233)
at org.agrona.concurrent.AgentRunner.run(AgentRunner.java:159)
at java.lang.Thread.run(Thread.java:748)

如果您需要,我可以为您提供更多详细信息。

PD:我正在运行 MediaDriver LowLatencyMediaDriver,这不是问题

提前谢谢

最佳答案

配置如下:

发布者:

aeron:udp?control=<publisher-ip>:<publisher-port>|control-mode=dynamic

订阅者:

aeron:udp?endpoint=<subscriber-ip>:<subscriber-port>|control=<publisher-ip>:<publisher-port>|control-mode=dynamic

MDC 的默认控制模式是动态的(并且可以省略)。每个订阅都将通过控制 channel 注册自身,并随后在指定的端点上接收消息。

另一种方法是使用“手动”控制模式,其中发布者使用 addDestination 手动添加订阅。/removeDestination .

至于您收到的错误:

Cannot assign requested address: bind : aeron:udp?endpoint=192.168.0.4:4051 at io.aeron.ClientConductor.onChannelEndpointError(ClientConductor.java:187)

您收到该消息的原因可能是该端口上已有某些内容正在监听,或者该主机上不存在该接口(interface)。

关于java - 如何在 Aeron 库中创建多目标转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49303796/

相关文章:

拍摄大快照时 Aeron 集群被阻塞

java - 运输基准的不同结果

java - 使用 BouncyCaSTLe 将签名/认证属性添加到 CMS 签名

java - 使用 JaVers 进行异步审核

core-audio - Core Audio 中的亚毫秒级延迟

audio - Liquidsoap + JACK延迟

Java分割字符串来获取值

java - 秒表基准测试是否可以接受?

java - Memcache 延迟时间太长?