Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Spring消息侦听器(MDP)配置为在集群中拥有一个实例_Spring_Jms_Cluster Computing_Message_Mdp - Fatal编程技术网

如何将Spring消息侦听器(MDP)配置为在集群中拥有一个实例

如何将Spring消息侦听器(MDP)配置为在集群中拥有一个实例,spring,jms,cluster-computing,message,mdp,Spring,Jms,Cluster Computing,Message,Mdp,我有一个配置了 <bean id="processListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="concurrentConsumers" value="1"/> <property name="clientId" value="process-execute"/> <pro

我有一个配置了

<bean id="processListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
  <property name="concurrentConsumers" value="1"/>
  <property name="clientId" value="process-execute"/>
  <property name="connectionFactory" ref="topicConnectionFactory"/>
  <property name="destination" ref="processExecuteQueue"/>
  <property name="messageListener" ref="processExecuteListener"/>
</bean>
这在具有2个节点的群集上运行。我看到它是在为每个节点创建一个消费者,而不是为每个集群创建一个消费者。它们都使用上述xml进行了配置,因此它们具有相同的clientId。然而,当向队列发布两个通知时,两个侦听器都在运行,每个侦听器都会收到一个通知,并且都并行执行。这是一个问题,因为需要按顺序处理通知


我似乎无法找到如何使每个集群而不是每个节点只有一个消息侦听器。

我通过让jms队列阻止下一个消费者直到返回前一个消费者,解决了这个问题。这是我正在使用的weblogic服务器中的一个功能,称为顺序单位。文档中说,您只需要在我使用哈希的队列上启用它。但是,我发现我还需要在连接工厂上启用它,并设置一个默认名称。现在,我看到每个节点都有一个MDP,但1在处理之前等待2完成,反之亦然。这不是我想要的解决方案,但它是有效的。虽然oracle是特定的,但它实际上比单个MDP解决方案略好


注意:我没有在SpringJMStemplateProducer中设置订单单位名称,因为我不知道这是否可行。当生产者没有提供任何名称时,我让weblogic设置默认名称。

SpringBean是在1个节点上创建的。它不必知道关于另一个节点的任何信息。这就是为什么在两个节点上都可以看到消费者。如果需要按顺序进行处理,为什么集群中有2个节点要开始?仅在1个节点上处理而保持另一个理想状态实际上是在浪费第2个节点。群集用于自动故障转移,因此当节点1停机时,节点2上的空闲MDP将拾取并继续处理而不中断。此外,这只是应用程序中的一个小组件。我希望答案是MDP不能为每个集群指定一个: