【问题标题】:ActiveMQ Exception Connection and domain type do not matchActiveMQ 异常连接和域类型不匹配
【发布时间】:2013-09-26 17:30:49
【问题描述】:

您好,我的应用程序日志中出现以下异常堆栈跟踪。



20/09/2013 22.26.49 - Caught exception in Exception Strategy: Connection and domain type do not match java.lang.IllegalArgumentException: Connection and domain type do not match at org.mule.transport.jms.Jms102bSupport.createSession(Jms102bSupport.java:108) at org.mule.transport.jms.JmsConnector.getSession(JmsConnector.java:579) at org.mule.transport.jms.JmsConnector.getSession(JmsConnector.java:558) at org.mule.transport.jms.JmsMessageDispatcher.dispatchMessage(JmsMessageDispatcher.java:141) at org.mule.transport.jms.JmsMessageDispatcher.doDispatch(JmsMessageDispatcher.java:73) at org.mule.transport.AbstractMessageDispatcher$Worker.run(AbstractMessageDispatcher.java:262) at org.mule.work.WorkerContext.run(WorkerContext.java:310) at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy.rejectedExecution(ThreadPoolExecutor.java:1895) at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:765) at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1288) at org.mule.work.ScheduleWorkExecutor.doExecute(ScheduleWorkExecutor.java:41)

我不太明白它的真正含义,

谁能解释一下连接和域类型不匹配是什么意思

并且可能是它可能发生的示例场景。

使用配置的 mule 出站发送数据

<multicasting-router>

    <jms:outbound-endpoint topic="SAMPLEMESSAGES" transformer-refs="DomToXml ObjectToJms" connector-ref="jmsConnector" />

</multicasting-router>

可以找到连接器配置here由于某种原因无法在此处粘贴xml

就像archer提到的我确实看过activeMQ源代码,只是把它粘贴在这里

@Override public Session createSession(Connection connection, boolean topic, boolean transacted, int ackMode, boolean noLocal) throws JMSException { if (connection == null) { throw new IllegalArgumentException("Connection is null"); } if (topic && connection instanceof TopicConnection) { return ((TopicConnection) connection).createTopicSession(noLocal, ackMode); } else if (connection instanceof QueueConnection) { // for transacted sessions the ackMode is always ignored, but // set it for readability (SESSION_TRANSACTION is recommented // for this case). return ((QueueConnection) connection).createQueueSession( transacted, (transacted ? Session.SESSION_TRANSACTED : ackMode)); } else { throw new IllegalArgumentException("Connection and domain type do not match, connection is of type " + connection.getClass().getName()); } }

我想了解在什么情况下传入的客户端连接不是 topicConnection 或 queueConnection ,我可以编写什么客户端代码来导致异常发生

谢谢

【问题讨论】:

  • 你能分享你的连接器配置吗?
  • 连接器配置是指您的 jms 连接器(称为 jmsConnector)的配置
  • 我已将连接器配置添加为要点gist.github.com/sudarshan89/6651572,我有些无法将其添加到问题中

标签: java jms activemq mule


【解决方案1】:

您的连接应该是 TopicConnection 或 QueueConnection 类型。否则会抛出这个异常。阅读source code 可以找到更多详细信息。第 117 行。

【讨论】:

  • 是的,我确实检查了源代码,但是我不明白在什么情况下,连接可能不是两者中的任何一个?,你能给我一个例子或重现相同的方法吗?
  • 实际上我们已经像上面那样定义了代理,并希望客户端连接到 ip 和端口,所以我不确定你想看哪个代码
  • 你如何发送消息?
  • 数据是使用 mule 出站端点发送的,我已经用配置更新了问题
  • 如果将 topic="SAMPLEMESSAGES" 替换为 queue="SAMPLEMESSAGES" 会发生什么
【解决方案2】:

您没有指定要在 ActiveMQ 连接器中使用的 JMS 版本,因此默认情况下,Mule 使用规范的旧版本和已弃用的 1.0.2b 版本。

将您的连接器配置为使用 1.1,看看您是否仍有问题。此外,如果您指定代理 URL,则无需提供连接工厂。

那就试试吧:

<jms:activemq-connector name="jmsConnector" specification="1.1"
                        brokerURL="tcp://10.209.130.10:61616">
    <spring:property name="retryPolicyTemplate" ref="ThreadingPolicyTemplate" />
</jms:activemq-connector>

【讨论】:

  • 谢谢,我会试一试,但是关于可能引发此异常的可能场景的任何想法,客户端代码必须做什么才能发生此异常?
  • 很难说...您在此出站上游是否有入站 JMS 队列?
  • 不,它通过 tcp 入站获取数据。
  • 我正在尝试找出一种在测试环境中重现此问题的方法,但无法这样做,这发生在我们的生产设置中。因此,任何关于可能原因的提示或对可能导致抛出此异常的客户端进行编码的任何提示都将非常有帮助,首先我无法理解异常消息试图说什么:)
  • 也许它只是想说 JMS 连接器配置错误,在问题得到解决之前会出现异常行为?
猜你喜欢
  • 2014-05-23
  • 2015-03-11
  • 2012-07-24
  • 2018-07-19
  • 1970-01-01
  • 2012-09-02
  • 2013-08-25
  • 2016-12-18
  • 1970-01-01
相关资源
最近更新 更多