如何在mule项目中使http请求排队

如何在mule项目中使http请求排队,mule,jira,cloudhub,Mule,Jira,Cloudhub,我正试图通过cloudhub应用程序将JIRA与Salesforce集成。我创建了一个mule软件项目(每次在JIRA中更新或创建工作日志时都会调用该项目),并将其部署在cloudhub中。从Jira开始,我正在使用WebHook实例,它在CloudHub中调用mule项目。我面临的问题是,当JIRA同时调用cloudhub应用程序时,项目流中的java类被JIRA的并行调用同时执行,变量被覆盖并产生冲突。如何在mule项目中一次处理一个HTTP请求?要在HTTP侦听器上设置线程,请使用: &l

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

要在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>

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

要解决并发问题,请尝试实现流,使其不必是单线程的:

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

  • 如果您确实实现了自定义java,请尝试消除共享状态的使用。这可以是静态变量的形式,也可以是实例变量的形式,如果您将Springbean与一起使用(这是默认情况)

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


  • 就性能而言,我认为您应该修复变量访问冲突,因为强制请求一次处理一个会影响性能。据我所知,您似乎在使用一个全局共享变量(可能通过静态变量或单例对象)。简单地创建非静态变量或原型对象应该可以避免这个问题。。在任何情况下,将其更新为一个线程都是最简单的修复方法(使用下面的Gabriel解决方案),根据,您仍然需要指定要等待的操作。否则,它就不会有效果。同意,我错过了这个。