2014-03-07 51 views
0

我正在運行一個帶有3個隊列的騾子流(rabbitmq)。這裏是我的配置XML使用rabbitmq將郵件從一個隊列傳遞到另一個隊列時發生異常

<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端點),1條消息通過queue1queue2交付給queue3。首先,該消息被放在queue1,該消息將其傳送到queue2然後queue2queue3。 將消息傳送到其他隊列後,以前的隊列不應保留該消息。 但是當我第二次打到網址時。我得到以下例外

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

某些版本特定的問題或配置細節,也許?我無法在Centos 6.4上使用Studio 3.5.0重現此異常,無法使用Maven。 –

回答

0

你要做的是重新創建已經存在的隊列。 把它看作你在服務器上有queue1,然後你試圖再次創建這個隊列。 RabbitMQ不知道這是否是一個錯誤,或者你明確地想要這樣做。 在你需要傳遞passive標誌,當你創建隊列第二種情況

看看這裏:https://www.rabbitmq.com/amqp-0-9-1-reference.html

有點被動

如果設置,服務器將與申報-OK應答如果隊列已存在且名稱相同 ,並且如果不存在則引發錯誤。客戶端可以使用 來檢查隊列是否存在,而不修改服務器 狀態。設置時,除名稱和不等待外的所有其他方法字段都將被忽略 。被動和不等待的聲明不起作用。 比較參數的語義等價性。

相關問題