假设生产者得到的事件如下:
%{somedata: [], analyze: true, test: true}
我有两种不同类型的消费者。第一个只关注事件analyze: true
而另一个关注test: true
我可以从文档中了解如何将事件发送到1个分区(生产者),如果事件分析和测试都是真的,我可以发送给两者吗?如果两者都是假的,则为零。
其他选择是:向所有人广播并跳过消费者的工作,如果错误的类型,这听起来不是一个好主意 - 或者为不同类型的工作提供不同的制作人。
答案 0 :(得分:0)
我知道已经有一段时间了。有类似的问题,我使用GenStage.BroadcastDispatcher
解决了这个问题。
这个允许多个订阅者接收相同的消息。
但它允许使用:selector
选项进行路由逻辑。
请查看GenStage.BroadcastDispatcher
上的文档,详细了解其行为。
在订阅逻辑上,我使用以下代码,利用广播调度程序的:selector
选项。
鉴于我有3个消费者。 analyze_consumer
,test_consumer
和general_consumer
:
# this one will receive each message that has a value at :analyze
GenStage.sync_subscribe(analyze_consumer,
to: producer_pid,
selector: &(&1.analyze))
# this one will receive each message that has a value at :test
GenStage.sync_subscribe(test_consumer,
to: producer_pid,
selector: &(&1.test))
# this one will receive all messages
GenStage.sync_subscribe(general_consumer,
to: producer_pid)
希望这有帮助。