我正在使用一个目录,我想向同一 JVM 进程中的监听器广播一条消息。我不知道感兴趣的各方是谁,因为他们在出现时自行注册:我的 JVM 进程中的服务集取决于配置。
多播似乎不是我想要的,因为我不知道在路由构建时将消息发送到哪里。
除了使用队列方案(ActiveMQ、RabbitMQ),还有其他方案吗?
最佳答案
除了队列解决方案(JMS/ActiveMQ 和 RabbitMQ)之外,您还可以使用 VM用于内部 JVM 通信的组件。 VM 是 SEDA 的扩展零件。与只能用于单个 Camel 上下文中不同路由之间通信的 SEDA
相比,VM
可用于在不同上下文中运行的路由之间进行通信。
发送消息:
final ProducerTemplate template = context.createProducerTemplate();
template.sendBody("vm:start", "World!");
使用 multipleConsumers=true
可以模拟发布-订阅消息传递,即可以配置多个消费者:
from("vm:start?multipleConsumers=true")
.log("********** Hello: 1 ************");
from("vm:start?multipleConsumers=true")
.log("********** Hello: 2 ************");
这打印:
route1 INFO ********** Hello: 1 ************
route2 INFO ********** Hello: 2 ************
但是,相对于JMS/ActiveMQ和RabbitMQ,消息不能离开JVM。并且消息不会保留。这意味着消息丢失,a) 如果在发送消息时没有启动消费者,b) 如果 JVM 在消息被消费之前崩溃。
关于apache-camel - 如何使用 Camel 在同一个 JVM 进程中广播消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23996421/