【发布时间】:2013-08-16 15:42:18
【问题描述】:
我想构建一个流程,当在 Drupal 中创建一个节点(一篇文章)时,该节点的标题作为消息发布到 Facebook。将消息发布到 Facebook 没有问题,但我不知道如何获得在 Drupal 安装中创建新内容的事件。有什么建议吗?
【问题讨论】:
标签: events drupal drupal-7 mule mule-studio
我想构建一个流程,当在 Drupal 中创建一个节点(一篇文章)时,该节点的标题作为消息发布到 Facebook。将消息发布到 Facebook 没有问题,但我不知道如何获得在 Drupal 安装中创建新内容的事件。有什么建议吗?
【问题讨论】:
标签: events drupal drupal-7 mule mule-studio
从纯粹的 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 自定义。
【讨论】:
从 Drupal 方面,您可以编写一个简单的 custom module 并实现 hook_node_insert(),例如
function MYMODULE_node_insert($node) {
if ($node->type == 'article') {
push_article($node->title);
}
}
【讨论】: