3

我正在尝试通过 cloudhub 应用程序将 JIRA 与 Salesforce 集成。我创建了一个 mule 软项目(每次在 JIRA 中更新或创建工作日志时都会调用它)并将其部署在 cloudhub 中。从 Jira 我使用 web hook 实例,它在云中心调用 mule 项目。我面临的问题是,当从 JIRA 到 cloudhub 应用程序同时调用时,项目流程中的 java 类被来自 JIRA 的并行调用同时执行,并且变量被覆盖并产生冲突。如何在 mule 项目中一次处理一个 HTTP 请求?

4

2 回答 2

0

要在 HTTP 侦听器上设置线程,请使用:

<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration">
    <http:worker-threading-profile maxThreadsActive="1" />
</http:listener-config>
于 2015-08-24T14:33:24.817 回答
0

您的问题对我来说意味着您正在使用自定义 java 类来转换您的 JIRA 数据,以便将其发送到 Salesforce,并且它具有静态变量或其他一些非线程安全的共享状态。

要解决您的并发问题,请尝试实现您的流程,以便它不需要是单线程的:

  1. 首先,如果可以的话,使用内置的 Mule 消息处理器和 Mule 表达式语言来实现转换逻辑。如果您使用的是 3.7+,我鼓励您尝试使用DataWeave。这些是隐式线程安全的。

  2. 如果您确实实现了自定义 java,请尽量避免使用共享状态。这可以是静态变量的形式,或者如果您使用具有Singleton 范围的 spring bean (这是默认值),它可能发生在实例变量中。

  3. 如果您需要在自定义 java 消息处理器中共享状态,请使用 Mule对象存储来存储状态,而不是 java 实例变量或静态变量。有一个连接器允许您直接从流中的对象存储中添加和检索数据。

于 2015-08-26T12:21:13.207 回答