【问题标题】:React to event "Creating a Node" in Drupal with MuleStudio使用 MuleStudio 对 Drupal 中的“创建节点”事件做出反应
【发布时间】:2013-08-16 15:42:18
【问题描述】:

我想构建一个流程,当在 Drupal 中创建一个节点(一篇文章)时,该节点的标题作为消息发布到 Facebook。将消息发布到 Facebook 没有问题,但我不知道如何获得在 Drupal 安装中创建新内容的事件。有什么建议吗?

【问题讨论】:

    标签: events drupal drupal-7 mule mule-studio


    【解决方案1】:

    从纯粹的 Mule 角度来看,没有对 Drupal 进行任何更改,您可以轮询 Drupal 连接器 http://mulesoft.github.io/drupal-connector/mule/drupal-config.html#index-nodes 的 index-nodes 操作

    <poll frequency="60000">
        <drupal:index-nodes startPage="1" pagesize="10">
            <drupal:fields>
                <drupal:field>nid</drupal:field>
                <drupal:field>type</drupal:field>
                <drupal:field>title</drupal:field>
            </drupal:fields>
        </drupal:index-nodes>
    </poll>
    

    然后,您必须以某种方式在持久对象存储中保留一个标记,例如最后修改日期或最后一个页码,以便可以在下一次轮询时读取它,以便您知道哪些节点已被处理或要处理哪个页面从...开始。如果您使用的是 Mule 3.5……那么针对该特定类型的功能有一个新的“水印”功能。这里有一些关于水印的信息:https://www.mulesoft.org/jira/browse/MULE-6861

    然而,更好的轮询解决方案是使用诸如 ActiveMQ 或 RabbitMQ 之类的消息队列,例如 Drupal 可以通过 Stomp 向其发布消息,Mule 可以通过 JMS 入站端点或 AMQP 入站端点获取它 -取决于您使用的消息。这种方式消息是推送而不是拉取,但确实需要 Drupal 自定义。

    【讨论】:

    • 这也是一个很好的观点。我已经用一个索引所有节点的流来做到这一点,将 ID 保存在一个变量中并再次调用自己。然后流程将实际有效负载与变量进行比较,并寻找新的 ID。如果有新节点,流程会调用另一个流程来处理数据。
    【解决方案2】:

    从 Drupal 方面,您可以编写一个简单的 custom module 并实现 hook_node_insert(),例如

    function MYMODULE_node_insert($node) {
      if ($node->type == 'article') {
        push_article($node->title);
      }
    }
    

    【讨论】:

    • 我用你建议的 hook_node_insert 编写了一个模块,在钩子内我执行 php cURL 执行并使用参数调用 localhost:port ?title=$title&nid=$nid。因此 Mule 将这些信息作为入站属性获取。这是一个非常好的主意,但我接受了另一个答案,因为我只想用 Mule 的功能来解决这个问题。
    猜你喜欢
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多