EMQ使用Tag来实现多读者--“Multiple Receivers”功能。
所谓“Multiple Receivers”,即某个Queue逻辑上的多个Receiver(消息接收/处理者)。 对于单读者来说,一个Message如果被一个接收者接收后,在不可见时间内,就不会被其他接收者接收到. 而对于多读者, 各个Receiver之间完全独立,并且都希望接收Queue中的全量Message(设置了filter的Receiver除外), 即对于某条Message来说, 不管有没有其他人接收/处理过这条消息, 各个Receiver都要至少接受/处理一次这条消息.
这里需要强调,“Multiple Receivers”与“多并发”有着根本上的不同。 一个Receiver在具体实现上,可能存在多个receiver并发(多线程或多进程),以提高吞吐。 一个Receiver的所有并发接收到的Message组合在一起,才构成全量数据。