【问题标题】:How to receive/send vm:// mule messages from a spring bean?如何从 spring bean 接收/发送 vm:// mule 消息?
【发布时间】:2015-10-10 14:04:39
【问题描述】:

我想实例化一个 bean 并向流发送/接收 vm:// 消息。我关注了this,但被覆盖的方法没有收到任何消息。我是否需要实例化一个 VM 连接器并将其引用传递给首先实现 MuleSubscriptionEventListener 的 bean?

【问题讨论】:

    标签: java spring mule mule-component


    【解决方案1】:

    VM 在许多情况下都完全有效,尤其是在具有 HA 集群的 Mule EE 中。

    如果您需要从 spring 引用的 java 组件发送到 vm,您可以考虑两个选项:

    【讨论】:

    • 能否添加一些代码来演示 MuleClient 的使用或提供更多细节?
    • 参见下面的代码,了解如何在 Spring 引用的 java 类中使用 mule 客户端来触发 VM:@Override public Object onCall(MuleEventContext eventContext) throws Exception { MuleContext context=eventContext.getMuleContext(); MuleClient 客户端=(MuleClient) context.getClient(); eventContext.getMessage().setPayload("恭喜,mule 客户端类"); MuleMessage message=client.send("vm://testVmpath",(MuleMessage) eventContext.getMessage());
    • Victor 说得对,如果您将 VM-Endpoints 建模到流中,流将从集群中的一个节点跳转到另一个节点。问题只是:这样做不会提高你的表现!它只会从一个节点跳转到另一个节点。如果您的流程跳过多个节点以处理单个执行,则可能会使阅读日志变得非常困难。如果您想控制集群的负载,您应该使用一些平衡节点的代理。流引用提供了类似的“处理策略”,例如 VM-Endpoints(同步、同步、多线程等)
    • 确实如此。 HA 代表高可用性而不是高性能。
    • 感谢 sn-p。它应该可以发送,但我如何订阅接收 VM 消息?
    【解决方案2】:

    通常,Mule 鼓励开发人员不要再使用 vm-endpoints,例如参见 Mule VM docs

    引用:

    VM 传输通常用于实现复杂的集成 由多个应用程序组成。 Mule 3 的改进消除了 在许多情况下需要VM。您可以直接使用流引用 从另一个流中引用一个流,中间没有传输。

    我真的会考虑流引用,它们要好得多。对于 VM-Endpoints,Mule 创建了一个完全不同的东西(在消息有效负载的标头中传递变量)等等。

    VM 端点仅在您希望从外部调用某些子流时才有意义,例如从单元测试中调用。

    我认为您链接的文档中描述的实现非常复杂。为什么不简单地将 Java 组件放入链接到 Spring bean 的 Mule 流中?这样你就可以完全控制从 Mule 到 Spring 的调用。它可以是 Java 转换器或 Java 组件。我认为到目前为止 Java Component 听起来更像你需要的:

    见:https://docs.mulesoft.com/mule-user-guide/v/3.6/using-spring-beans-as-flow-components

    【讨论】:

    • 我的目标是拥有一个可重用的组件,我可以插入并配置其他流向它发送消息或接收它们。我考虑了流引用,但是 VM 更适合我的情况,因为拥有不同类型的队列将帮助我区分消息并根据收到的消息的队列采取一些特定的操作。如果我要使用流引用,我将不得不设置一些消息属性,这会使流变得混乱。
    猜你喜欢
    • 2017-01-19
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 2016-04-13
    • 2015-07-28
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    相关资源
    最近更新 更多