apache-camel - 如何使用 Camel 在同一个 JVM 进程中广播消息?

标签 apache-camel

我正在使用一个目录,我想向同一 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/

相关文章:

java - Camel doCatch 和 onException 优先级

java - 使用 Apache Camel 和 ActiveMQ 时如何处理系统崩溃

java - 在类路径中找不到 Camel 属性文件

rabbitmq - Camel RabbitMQ 连接器在使用之前会读取数千条消息

apache-camel - Apache camel cxf 端点 - 指定 http(s) 代理?

java - 将 jaxb xml 消息转换为 apache camel 中的基本类型(java)

java - 执行 get 后 Apache Camel header 设置为 null

error-handling - Apache camel 错误处理如何处理多播和事务

apache-camel - 如何提高 Seda 队列的性能?

apache-camel - Fuse 中 Camel 类型转换失败