java - ActiveMQ异常连接和域类型不匹配

标签 java jms activemq mule

您好,我在应用程序日志中收到以下异常堆栈跟踪。

<p></p>

<p>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)</p>

<p></p>

我不太明白它的实际含义,

有人可以解释一下连接和域类型不匹配是什么意思

以及可能发生这种情况的示例场景。

数据是使用配置的 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 ,我可以编写哪些客户端代码来导致异常发生

谢谢

最佳答案

您没有指定在 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>

关于java - ActiveMQ异常连接和域类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18931812/

相关文章:

ssl - 什么是 NIO 协议(protocol)?

java - 正确的 ActiveMQ 生产者并发性

java - ActiveMQ 不会重启,因为 KahaDB 被锁定

java - 双倍长度停留在 17

jakarta-ee - Wildfly 上的 JMS 2.0 QueueBrowser 不返回消息

java - 为什么 array.sorts 对父数组进行排序?

apache-camel - 将消息回滚到死信队列 - Apache Camel

java - 使用 ActiveMQ 发送 JSON 文件

Java WebService 抛出 javax.xml.ws.WebServiceException 且端点接口(interface)无效

java - JDBC - NetBeans x MySQL