我有一个带有2个节点的HornetQ独立群集,并且Mule ESB配置为连接HornetQ群集发现组。
我写了一个Mule Callback Listener,它正在消耗来自HornetQ Cluster的消息。但群集中的第二个节点表现得像备份或故障转移服务器。当我发送多条消息时,它总是只传递给node1。当我停止node1然后node2正在选择消息。对于node2,JConsole始终将消费者数量显示为0。而node1有6个消费者,如Mule JMS connector-> numberOfConsumers属性中所定义,如下面的配置所示。
<jms:connector name="hornetq-connector" username="guest"
maxRedelivery="5" password="guest" specification="1.1"
connectionFactory-ref="connectionFactory" numberOfConsumers="6" >
<spring:property name="retryPolicyTemplate" ref="ThreadingPolicyTemplate" />
</jms:connector>
我只有一个在mule flow中定义的消费者,如下所示。
<flow name="Flow2" doc:name="Flow2">
<jms:inbound-endpoint queue="InboundQueue"
connector-ref="hornetq-connector">
<jms:transaction action="ALWAYS_BEGIN" timeout="10000" />
</jms:inbound-endpoint>
<component class="com.test.Consumer" />
</flow>
将Mule Callback java类添加为组件,如上面的代码()所示。请找到以下代码。
public class Consumer实现org.mule.api.lifecycle.Callable {
private static DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
@Override
public Object onCall(MuleEventContext eventContext) throws Exception {
// TODO Auto-generated method stub
System.out.println(df1.format(new Date().getTime())+"Consumer:Message Received,"+ Thread.currentThread()+ "," + eventContext.getMessageAsString());
Thread.sleep(5000);
System.out.println(df1.format(new Date().getTime())+"Consumer: Message process complete, "+ Thread.currentThread()+ "," + eventContext.getMessageAsString());
return "Success";
}
}
如何在所有HornetQ群集节点上分发这个消费者?