我正在使用3个队列(rabbitmq
)运行mule流程。这是我的配置xml
<mule xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns:amqp="http://www.mulesoft.org/schema/mule/amqp" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.4.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd
http://www.mulesoft.org/schema/mule/amqp http://www.mulesoft.org/schema/mule/amqp/current/mule-amqp.xsd
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd">
<amqp:connector name="AMQP_Connector1" validateConnections="true" fallbackAddresses="localhost:5672" doc:name="AMQP Connector1"/>
<flow name="putToQueue1" doc:name="putToQueue1">
<http:inbound-endpoint exchange-pattern="one-way" host="localhost" port="8081" path="message" doc:name="HTTP"/>
<set-payload value="#[message.inboundProperties['msg']]" doc:name="Set Payload"/>
<processor-chain doc:name="Processor Chain">
<amqp:outbound-endpoint queueName="test.queue1" responseTimeout="10000" doc:name="AMQP1" connector-ref="AMQP_Connector1"/>
<custom-processor class="CustomProcessor" doc:name="Custom Processor"/>
<amqp:outbound-endpoint queueName="test.queue2" responseTimeout="10000" doc:name="AMQP2" connector-ref="AMQP_Connector1"/>
<custom-processor class="CustomProcessor" doc:name="Custom Processor"/>
<amqp:outbound-endpoint queueName="test.queue3" responseTimeout="10000" doc:name="AMQP3" connector-ref="AMQP_Connector1"/>
</processor-chain>
</flow>
</mule>
这是CustomProcessor java类
import org.mule.api.MuleEvent;
import org.mule.api.MuleException;
import org.mule.api.processor.MessageProcessor;
public class CustomProcessor implements MessageProcessor {
@Override
public MuleEvent process(MuleEvent event) throws MuleException {
String message = (event.getMessage().getPayload() +" "+ System.currentTimeMillis());
event.getMessage().setPayload(message);
return event;
}
}
当我点击浏览器中的网址(使用http端点)时,会通过queue3
和queue1
向queue2
发送一条消息。首先,邮件放在queue1
,将其转移到queue2
,然后queue2
转移到queue3
。
将消息传输到其他队列后,先前的队列不应保留该消息。
但是当我第二次打到网址时。我得到以下异常
Caused by: java.lang.LinkageError: loader (instance of org/mule/module/launcher/plugin/MulePluginsClassLoader): attempted duplicate class definition for name: "org/mule/transport/amqp/AmqpMuleMessageFactory"
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
..............
答案 0 :(得分:0)
您要做的是重新创建已存在的队列。
可以把它想象成服务器上有queue1
,然后再尝试创建这个队列。 RabbitMQ不知道这是一个错误还是您明确想要这样做。
在第二种情况下,您需要在创建队列时传递passive
标志
请看这里:https://www.rabbitmq.com/amqp-0-9-1-reference.html
比特被动
如果已设置,则服务器将使用Declare-Ok进行回复(如果队列已经存在) 存在具有相同名称,如果不存在则引发错误。客户可以 使用它来检查队列是否存在而不修改服务器 州。设置时,除name和no-wait之外的所有其他方法字段都是 忽略。被动和无等待的声明都没有效果。 比较了语义等价的参数。