错误 - WSO2 与 rabbitMQ
ERROR - WSO2 with rabbitMQ
在代理中,我要将此发送到 rabbitMQ:
<property name="messageType" value="text/xml" scope="default"/>
<property name="contentType" value="text/xml" scope="default"/>
<property name="rabbitmq.attributes.app.id"
value="RMIS"
scope="axis2"
type="STRING"/>
<property name="rabbitmq.attributes.type"
value="BRANCH"
scope="axis2"
type="STRING"/>
<property name="rabbitmq.attributes.user.id"
value="RMIS"
scope="axis2"
type="STRING"/>
<property name="MESSAGE_ID" expression="get-property('MessageID')"/>
<script language="js">var messageID = mc.getProperty('MESSAGE_ID').substring(9,45);
mc.setProperty("RABBIT_MESSAGE_ID", messageID);</script>
<property name="rabbitmq.attributes.custom.message.id"
expression="get-property('RABBIT_MESSAGE_ID')"
scope="axis2"/>
<clone continueParent="true">
<target sequence="writeToFile"/>
</clone>
<send>
<endpoint key="rabbit"/>
</send>
在端点中:
<endpoint xmlns="http://ws.apache.org/ns/synapse" name="rabbit">
<address uri="rabbitmq://writeToQueue?rabbitmq.server.host.name=localhost&rabbitmq.server.port=5672&rabbitmq.server.user.name=guest&rabbitmq.server.password=guest&rabbitmq.queue.name=queque" format="soap11">
<suspendOnFailure>
<progressionFactor>1.0</progressionFactor>
</suspendOnFailure>
<markForSuspension>
<retriesBeforeSuspension>0</retriesBeforeSuspension>
<retryDelay>3000</retryDelay>
</markForSuspension>
<timeout>
<responseAction>fault</responseAction>
</timeout>
</address>
</endpoint>
但是当我将它发送到 rabbitMQ 服务器时我发现了一个错误:
TID[-1234] [ESB] [2016-06-03 16:32:06,479] ERROR {org.apache.synapse.core.axis2.Axis2Sender} - Unexpected error during sending message out
org.apache.axis2.transport.rabbitmq.RabbitMQMessage.(RabbitMQMessage.java:43)
org.apache.axis2.transport.rabbitmq.RabbitMQSender.sendOverAMQP(RabbitMQSender.java:84)
org.apache.axis2.transport.rabbitmq.RabbitMQSender.sendMessage(RabbitMQSender.java:72)
org.apache.axis2.transport.base.AbstractTransportSender.invoke(AbstractTransportSender.java:112)
org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442)
org.apache.synapse.core.axis2.DynamicAxisOperation$DynamicOperationClient.send(DynamicAxisOperation.java:185)
org.apache.synapse.core.axis2.DynamicAxisOperation$DynamicOperationClient.executeImpl(DynamicAxisOperation.java:167)
org.apache.axis2.client.OperationClient.execute(OperationClient.java:149)
org.apache.synapse.core.axis2.Axis2FlexibleMEPClient.send(Axis2FlexibleMEPClient.java:542)
org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:79)
org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:461)
org.apache.synapse.endpoints.AbstractEndpoint.send(AbstractEndpoint.java:372)
org.apache.synapse.endpoints.AddressEndpoint.send(AddressEndpoint.java:65)
org.apache.synapse.endpoints.IndirectEndpoint.send(IndirectEndpoint.java:55)
org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:105)
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:81)
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:48)
org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:149)
org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:185)
org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:395)
org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:142)
org.apache.axis2.transport.base.threads.NativeWorkerPool.run(NativeWorkerPool.java:172)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.lang.Thread.run(Unknown Source)
WSO2 ESB 中的日志:
而且我不明白,为什么不能接触rabbitMQ。在 rabbitMQ 中,我也没有发现任何错误。
ERROR_DETAIL : org.apache.synapse.SynapseException: Unexpected error during sending message out at org.apache.synapse.core.axis2.Axis2Sender.handleException(Axis2Sender.java:247) at org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:91) at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:461) at org.apache.synapse.endpoints.AbstractEndpoint.send(AbstractEndpoint.java:372) at org.apache.synapse.endpoints.AddressEndpoint.send(AddressEndpoint.java:65) at org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:105) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:81) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:48) at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:149) at org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:185) at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:395) at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:142) at org.apache.axis2.transport.base.threads.NativeWorkerPool.run(NativeWorkerPool.java:172) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.NullPointerException at org.apache.axis2.transport.rabbitmq.RabbitMQMessage.<init>(RabbitMQMessage.java:43) at org.apache.axis2.transport.rabbitmq.RabbitMQSender.sendOverAMQP(RabbitMQSender.java:84) at org.apache.axis2.transport.rabbitmq.RabbitMQSender.sendMessage(RabbitMQSender.java:72) at org.apache.axis2.transport.base.AbstractTransportSender.invoke(AbstractTransportSender.java:112) at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442) at org.apache.synapse.core.axis2.DynamicAxisOperation$DynamicOperationClient.send(DynamicAxisOperation.java:185) at org.apache.synapse.core.axis2.DynamicAxisOperation$DynamicOperationClient.executeImpl(DynamicAxisOperation.java:167) at org.apache.axis2.client.OperationClient.execute(OperationClient.java:149) at org.apache.synapse.core.axis2.Axis2FlexibleMEPClient.send(Axis2FlexibleMEPClient.java:542) at org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:79) ... 15 more
新堆栈跟踪:
`[2016-06-27 17:07:00,380] 错误 - Axis2Sender 发送消息时出现意外错误
java.lang.IllegalStateException:无效配置:'routingKey' 必须为非空。
在 com.rabbitmq.client.impl.AMQImpl$Basic$Publish.(AMQImpl.java:2278)
在 com.rabbitmq.client.AMQP$Basic$Publish$Builder.build(AMQP.java:1219)
在 com.rabbitmq.client.impl.ChannelN.basicPublish(ChannelN.java:647)
在 com.rabbitmq.client.impl.ChannelN.basicPublish(ChannelN.java:630)
在 com.rabbitmq.client.impl.ChannelN.basicPublish(ChannelN.java:621)
在 org.apache.axis2.transport.rabbitmq.RabbitMQMessageSender.send(RabbitMQMessageSender.java:252)
在 org.apache.axis2.transport.rabbitmq.RabbitMQSender.sendOverAMQP(RabbitMQSender.java:85)
在 org.apache.axis2.transport.rabbitmq.RabbitMQSender.sendMessage(RabbitMQSender.java:72)
在 org.apache.axis2.transport.base.AbstractTransportSender.invoke(AbstractTransportSender.java:112)
在 org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442)
在 org.apache.axis2.description.OutOnlyAxisOperationClient.executeImpl(OutOnlyAxisOperation.java:297)
在 org.apache.axis2.client.OperationClient.execute(OperationClient.java:149)
在 org.apache.synapse.core.axis2.Axis2FlexibleMEPClient.send(Axis2FlexibleMEPClient.java:542)
在 org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:79)
在 org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:461)
在 org.apache.synapse.endpoints.AbstractEndpoint.send(AbstractEndpoint.java:372)
在 org.apache.synapse.endpoints.AddressEndpoint.send(AddressEndpoint.java:65)
在 org.apache.synapse.endpoints.IndirectEndpoint.send(IndirectEndpoint.java:55)
在 org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:105)
在 org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:81)
在 org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:48)
在 org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:149)
在 org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:185)
在 org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
在 org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:395)
在 org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:142)
在 org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
在 java.util.concurrent.ThreadPoolExecutor.runWorker(来源不明)
在 java.util.concurrent.ThreadPoolExecutor$Worker.run(来源不明)
在 java.lang.Thread.run(来源不明)
[2016-06-27 17:07:00,386] 警告 - 故障处理程序 ERROR_CODE:0
[2016-06-27 17:07:00,386] WARN - FaultHandler ERROR_MESSAGE:发送消息时出现意外错误
[2016-06-27 17:07:00,387] WARN - FaultHandler ERROR_DETAIL : org.apache.synapse.SynapseException: 发送消息时出现意外错误
在 org.apache.synapse.core.axis2.Axis2Sender.handleException(Axis2Sender.java:247)
在 org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:91)
在 org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:461)
在 org.apache.synapse.endpoints.AbstractEndpoint.send(AbstractEndpoint.java:372)
在 org.apache.synapse.endpoints.AddressEndpoint.send(AddressEndpoint.java:65)
在 org.apache.synapse.endpoints.IndirectEndpoint.send(IndirectEndpoint.java:55)
在 org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:105)
在 org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:81)
在 org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:48)
在 org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:149)
在 org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:185)
在 org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
在 org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:395)
在 org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:142)
在 org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
在 java.util.concurrent.ThreadPoolExecutor.runWorker(来源不明)
在 java.util.concurrent.ThreadPoolExecutor$Worker.run(来源不明)
在 java.lang.Thread.run(来源不明)
原因:java.lang.IllegalStateException:无效配置:'routingKey' 必须为非空。
在 com.rabbitmq.client.impl.AMQImpl$Basic$Publish.(AMQImpl.java:2278)
在 com.rabbitmq.client.AMQP$Basic$Publish$Builder.build(AMQP.java:1219)
在 com.rabbitmq.client.impl.ChannelN.basicPublish(ChannelN.java:647)
在 com.rabbitmq.client.impl.ChannelN.basicPublish(ChannelN.java:630)
在 com.rabbitmq.client.impl.ChannelN.basicPublish(ChannelN.java:621)
在 org.apache.axis2.transport.rabbitmq.RabbitMQMessageSender.send(RabbitMQMessageSender.java:252)
在 org.apache.axis2.transport.rabbitmq.RabbitMQSender.sendOverAMQP(RabbitMQSender.java:85)
在 org.apache.axis2.transport.rabbitmq.RabbitMQSender.sendMessage(RabbitMQSender.java:72)
在 org.apache.axis2.transport.base.AbstractTransportSender.invoke(AbstractTransportSender.java:112)
在 org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442)
在 org.apache.axis2.description.OutOnlyAxisOperationClient.executeImpl(OutOnlyAxisOperation.java:297)
在 org.apache.axis2.client.OperationClient.execute(OperationClient.java:149)
在 org.apache.synapse.core.axis2.Axis2FlexibleMEPClient.send(Axis2FlexibleMEPClient.java:542)
在 org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:79)
... 还有 16 个
[2016-06-27 17:07:00,388] WARN - FaultHandler ERROR_EXCEPTION : org.apache.synapse.SynapseException: 发送消息时出现意外错误
[2016-06-27 17:07:00,388] WARN - FaultHandler FaultHandler:端点[兔子]
[2016-06-27 17:07:00,388] 警告 - EndpointContext 端点:rabbit 将被标记为已暂停,因为它失败了`
将以下属性添加到 Proxy 的序列中。
<property name="OUT_ONLY" value="true"/>
<property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>
那么你的配置应该如下所示:
<property name="messageType" value="text/xml" scope="default"/>
<property name="contentType" value="text/xml" scope="default"/>
<property name="OUT_ONLY" value="true"/>
<property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>
<property name="rabbitmq.attributes.app.id"
value="RMIS"
scope="axis2"
type="STRING"/>
<property name="rabbitmq.attributes.type"
value="BRANCH"
scope="axis2"
type="STRING"/>
<property name="rabbitmq.attributes.user.id"
value="RMIS"
scope="axis2"
type="STRING"/>
<property name="MESSAGE_ID" expression="get-property('MessageID')"/>
<script language="js">var messageID = mc.getProperty('MESSAGE_ID').substring(9,45);
mc.setProperty("RABBIT_MESSAGE_ID", messageID);</script>
<property name="rabbitmq.attributes.custom.message.id"
expression="get-property('RABBIT_MESSAGE_ID')"
scope="axis2"/>
<clone continueParent="true">
<target sequence="writeToFile"/>
</clone>
<send>
<endpoint key="rabbit"/>
</send>
根据新的 stackTrace,提到“'routingKey' 必须是非空的。”
请为此添加 "rabbitmq.exchange.name" 参数和相关值。
例如:
<endpoint>
<address
uri="rabbitmq:/AMQPProxy?rabbitmq.server.host.name=192.168.0.3&rabbitmq.server.port=5672&rabbitmq.server.user.name=user&rabbitmq.server.password=abc123&rabbitmq.queue.name=queue2&rabbitmq.exchange.name=exchange2"/>
</endpoint>
如果您需要进一步说明,请参阅 WSO2 文档:https://docs.wso2.com/display/ESB490/RabbitMQ+AMQP+Transport
在代理中,我要将此发送到 rabbitMQ:
<property name="messageType" value="text/xml" scope="default"/>
<property name="contentType" value="text/xml" scope="default"/>
<property name="rabbitmq.attributes.app.id"
value="RMIS"
scope="axis2"
type="STRING"/>
<property name="rabbitmq.attributes.type"
value="BRANCH"
scope="axis2"
type="STRING"/>
<property name="rabbitmq.attributes.user.id"
value="RMIS"
scope="axis2"
type="STRING"/>
<property name="MESSAGE_ID" expression="get-property('MessageID')"/>
<script language="js">var messageID = mc.getProperty('MESSAGE_ID').substring(9,45);
mc.setProperty("RABBIT_MESSAGE_ID", messageID);</script>
<property name="rabbitmq.attributes.custom.message.id"
expression="get-property('RABBIT_MESSAGE_ID')"
scope="axis2"/>
<clone continueParent="true">
<target sequence="writeToFile"/>
</clone>
<send>
<endpoint key="rabbit"/>
</send>
在端点中:
<endpoint xmlns="http://ws.apache.org/ns/synapse" name="rabbit">
<address uri="rabbitmq://writeToQueue?rabbitmq.server.host.name=localhost&rabbitmq.server.port=5672&rabbitmq.server.user.name=guest&rabbitmq.server.password=guest&rabbitmq.queue.name=queque" format="soap11">
<suspendOnFailure>
<progressionFactor>1.0</progressionFactor>
</suspendOnFailure>
<markForSuspension>
<retriesBeforeSuspension>0</retriesBeforeSuspension>
<retryDelay>3000</retryDelay>
</markForSuspension>
<timeout>
<responseAction>fault</responseAction>
</timeout>
</address>
</endpoint>
但是当我将它发送到 rabbitMQ 服务器时我发现了一个错误:
TID[-1234] [ESB] [2016-06-03 16:32:06,479] ERROR {org.apache.synapse.core.axis2.Axis2Sender} - Unexpected error during sending message out
org.apache.axis2.transport.rabbitmq.RabbitMQMessage.(RabbitMQMessage.java:43)
org.apache.axis2.transport.rabbitmq.RabbitMQSender.sendOverAMQP(RabbitMQSender.java:84)
org.apache.axis2.transport.rabbitmq.RabbitMQSender.sendMessage(RabbitMQSender.java:72)
org.apache.axis2.transport.base.AbstractTransportSender.invoke(AbstractTransportSender.java:112)
org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442)
org.apache.synapse.core.axis2.DynamicAxisOperation$DynamicOperationClient.send(DynamicAxisOperation.java:185)
org.apache.synapse.core.axis2.DynamicAxisOperation$DynamicOperationClient.executeImpl(DynamicAxisOperation.java:167)
org.apache.axis2.client.OperationClient.execute(OperationClient.java:149)
org.apache.synapse.core.axis2.Axis2FlexibleMEPClient.send(Axis2FlexibleMEPClient.java:542)
org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:79)
org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:461)
org.apache.synapse.endpoints.AbstractEndpoint.send(AbstractEndpoint.java:372)
org.apache.synapse.endpoints.AddressEndpoint.send(AddressEndpoint.java:65)
org.apache.synapse.endpoints.IndirectEndpoint.send(IndirectEndpoint.java:55)
org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:105)
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:81)
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:48)
org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:149)
org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:185)
org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:395)
org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:142)
org.apache.axis2.transport.base.threads.NativeWorkerPool.run(NativeWorkerPool.java:172)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.lang.Thread.run(Unknown Source)
WSO2 ESB 中的日志:
而且我不明白,为什么不能接触rabbitMQ。在 rabbitMQ 中,我也没有发现任何错误。
ERROR_DETAIL : org.apache.synapse.SynapseException: Unexpected error during sending message out at org.apache.synapse.core.axis2.Axis2Sender.handleException(Axis2Sender.java:247) at org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:91) at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:461) at org.apache.synapse.endpoints.AbstractEndpoint.send(AbstractEndpoint.java:372) at org.apache.synapse.endpoints.AddressEndpoint.send(AddressEndpoint.java:65) at org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:105) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:81) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:48) at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:149) at org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:185) at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:395) at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:142) at org.apache.axis2.transport.base.threads.NativeWorkerPool.run(NativeWorkerPool.java:172) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.NullPointerException at org.apache.axis2.transport.rabbitmq.RabbitMQMessage.<init>(RabbitMQMessage.java:43) at org.apache.axis2.transport.rabbitmq.RabbitMQSender.sendOverAMQP(RabbitMQSender.java:84) at org.apache.axis2.transport.rabbitmq.RabbitMQSender.sendMessage(RabbitMQSender.java:72) at org.apache.axis2.transport.base.AbstractTransportSender.invoke(AbstractTransportSender.java:112) at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442) at org.apache.synapse.core.axis2.DynamicAxisOperation$DynamicOperationClient.send(DynamicAxisOperation.java:185) at org.apache.synapse.core.axis2.DynamicAxisOperation$DynamicOperationClient.executeImpl(DynamicAxisOperation.java:167) at org.apache.axis2.client.OperationClient.execute(OperationClient.java:149) at org.apache.synapse.core.axis2.Axis2FlexibleMEPClient.send(Axis2FlexibleMEPClient.java:542) at org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:79) ... 15 more
新堆栈跟踪: `[2016-06-27 17:07:00,380] 错误 - Axis2Sender 发送消息时出现意外错误 java.lang.IllegalStateException:无效配置:'routingKey' 必须为非空。 在 com.rabbitmq.client.impl.AMQImpl$Basic$Publish.(AMQImpl.java:2278) 在 com.rabbitmq.client.AMQP$Basic$Publish$Builder.build(AMQP.java:1219) 在 com.rabbitmq.client.impl.ChannelN.basicPublish(ChannelN.java:647) 在 com.rabbitmq.client.impl.ChannelN.basicPublish(ChannelN.java:630) 在 com.rabbitmq.client.impl.ChannelN.basicPublish(ChannelN.java:621) 在 org.apache.axis2.transport.rabbitmq.RabbitMQMessageSender.send(RabbitMQMessageSender.java:252) 在 org.apache.axis2.transport.rabbitmq.RabbitMQSender.sendOverAMQP(RabbitMQSender.java:85) 在 org.apache.axis2.transport.rabbitmq.RabbitMQSender.sendMessage(RabbitMQSender.java:72) 在 org.apache.axis2.transport.base.AbstractTransportSender.invoke(AbstractTransportSender.java:112) 在 org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442) 在 org.apache.axis2.description.OutOnlyAxisOperationClient.executeImpl(OutOnlyAxisOperation.java:297) 在 org.apache.axis2.client.OperationClient.execute(OperationClient.java:149) 在 org.apache.synapse.core.axis2.Axis2FlexibleMEPClient.send(Axis2FlexibleMEPClient.java:542) 在 org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:79) 在 org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:461) 在 org.apache.synapse.endpoints.AbstractEndpoint.send(AbstractEndpoint.java:372) 在 org.apache.synapse.endpoints.AddressEndpoint.send(AddressEndpoint.java:65) 在 org.apache.synapse.endpoints.IndirectEndpoint.send(IndirectEndpoint.java:55) 在 org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:105) 在 org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:81) 在 org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:48) 在 org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:149) 在 org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:185) 在 org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) 在 org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:395) 在 org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:142) 在 org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(来源不明) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(来源不明) 在 java.lang.Thread.run(来源不明) [2016-06-27 17:07:00,386] 警告 - 故障处理程序 ERROR_CODE:0 [2016-06-27 17:07:00,386] WARN - FaultHandler ERROR_MESSAGE:发送消息时出现意外错误 [2016-06-27 17:07:00,387] WARN - FaultHandler ERROR_DETAIL : org.apache.synapse.SynapseException: 发送消息时出现意外错误 在 org.apache.synapse.core.axis2.Axis2Sender.handleException(Axis2Sender.java:247) 在 org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:91) 在 org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:461) 在 org.apache.synapse.endpoints.AbstractEndpoint.send(AbstractEndpoint.java:372) 在 org.apache.synapse.endpoints.AddressEndpoint.send(AddressEndpoint.java:65) 在 org.apache.synapse.endpoints.IndirectEndpoint.send(IndirectEndpoint.java:55) 在 org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:105) 在 org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:81) 在 org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:48) 在 org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:149) 在 org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:185) 在 org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) 在 org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:395) 在 org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:142) 在 org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(来源不明) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(来源不明) 在 java.lang.Thread.run(来源不明) 原因:java.lang.IllegalStateException:无效配置:'routingKey' 必须为非空。 在 com.rabbitmq.client.impl.AMQImpl$Basic$Publish.(AMQImpl.java:2278) 在 com.rabbitmq.client.AMQP$Basic$Publish$Builder.build(AMQP.java:1219) 在 com.rabbitmq.client.impl.ChannelN.basicPublish(ChannelN.java:647) 在 com.rabbitmq.client.impl.ChannelN.basicPublish(ChannelN.java:630) 在 com.rabbitmq.client.impl.ChannelN.basicPublish(ChannelN.java:621) 在 org.apache.axis2.transport.rabbitmq.RabbitMQMessageSender.send(RabbitMQMessageSender.java:252) 在 org.apache.axis2.transport.rabbitmq.RabbitMQSender.sendOverAMQP(RabbitMQSender.java:85) 在 org.apache.axis2.transport.rabbitmq.RabbitMQSender.sendMessage(RabbitMQSender.java:72) 在 org.apache.axis2.transport.base.AbstractTransportSender.invoke(AbstractTransportSender.java:112) 在 org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442) 在 org.apache.axis2.description.OutOnlyAxisOperationClient.executeImpl(OutOnlyAxisOperation.java:297) 在 org.apache.axis2.client.OperationClient.execute(OperationClient.java:149) 在 org.apache.synapse.core.axis2.Axis2FlexibleMEPClient.send(Axis2FlexibleMEPClient.java:542) 在 org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:79) ... 还有 16 个
[2016-06-27 17:07:00,388] WARN - FaultHandler ERROR_EXCEPTION : org.apache.synapse.SynapseException: 发送消息时出现意外错误 [2016-06-27 17:07:00,388] WARN - FaultHandler FaultHandler:端点[兔子] [2016-06-27 17:07:00,388] 警告 - EndpointContext 端点:rabbit 将被标记为已暂停,因为它失败了`
将以下属性添加到 Proxy 的序列中。
<property name="OUT_ONLY" value="true"/>
<property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>
那么你的配置应该如下所示:
<property name="messageType" value="text/xml" scope="default"/>
<property name="contentType" value="text/xml" scope="default"/>
<property name="OUT_ONLY" value="true"/>
<property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>
<property name="rabbitmq.attributes.app.id"
value="RMIS"
scope="axis2"
type="STRING"/>
<property name="rabbitmq.attributes.type"
value="BRANCH"
scope="axis2"
type="STRING"/>
<property name="rabbitmq.attributes.user.id"
value="RMIS"
scope="axis2"
type="STRING"/>
<property name="MESSAGE_ID" expression="get-property('MessageID')"/>
<script language="js">var messageID = mc.getProperty('MESSAGE_ID').substring(9,45);
mc.setProperty("RABBIT_MESSAGE_ID", messageID);</script>
<property name="rabbitmq.attributes.custom.message.id"
expression="get-property('RABBIT_MESSAGE_ID')"
scope="axis2"/>
<clone continueParent="true">
<target sequence="writeToFile"/>
</clone>
<send>
<endpoint key="rabbit"/>
</send>
根据新的 stackTrace,提到“'routingKey' 必须是非空的。”
请为此添加 "rabbitmq.exchange.name" 参数和相关值。
例如:
<endpoint>
<address
uri="rabbitmq:/AMQPProxy?rabbitmq.server.host.name=192.168.0.3&rabbitmq.server.port=5672&rabbitmq.server.user.name=user&rabbitmq.server.password=abc123&rabbitmq.queue.name=queue2&rabbitmq.exchange.name=exchange2"/>
</endpoint>
如果您需要进一步说明,请参阅 WSO2 文档:https://docs.wso2.com/display/ESB490/RabbitMQ+AMQP+Transport