【发布时间】:2015-12-17 18:57:50
【问题描述】:
这似乎是一个常见问题解答中的问题,但我无法说出这个问题来找到它的答案。
无论如何,我目前正在研究消息队列(在 ZeroMQ、RabbitMQ 教程上进行了介绍),我认为 MQ 非常适合转换数据流 - 在 Q1 上侦听 F1 格式的消息,转换为 F2 并将转换后的消息放在 Q2 上。如果转换本质上是双向的并且没有明确定义的消费者和生产者(例如yamljson 转换器?
据我了解,消息队列本质上是单向的,对于双向消息,我看到了两个“解决方案”:
- 有两个不同的输入输出队列,在本例中转换为 4:json.in、json.out、yaml.in、yaml.out;
- 将转换器连接到 JSON 队列的两端,以区分原始 json 和从 yaml 转换而来的消息,将消息包装在消息中,指定这是传入消息还是传出消息。但因此,转换器现在会收到大量消息,必须对其进行解析并重新插入队列 - 听起来效率极低。
前一个解决方案听起来像是一条路,除非后者以某种形式委托给 MQ 代理(例如消费者/生产者 ID:json.out, id = connect_produce("json", null); json.in = connect_consume("json", id);),并且如果消息是由同一个实体。据我了解,任何类型的过滤都归结为消息标记(RabbitMQ 中的主题交换),这需要多个队列。
所以我的问题是这在实践中是如何完成的?坚持使用多个队列还是某些框架实现了双向队列?或者我在这里遗漏了一些明显的东西?
【问题讨论】: