ActiveMQ Artemis on wildfly with standalone ActiveMQ

时间:2016-07-15 15:03:36

标签: java jms activemq wildfly activemq-artemis

我正在尝试使用MDB使用内置的ActiveMQ Artemis连接wildfly 10服务器,以连接到运行版本5.13.3的独立ActiveMQ-Server。似乎Artemis无法与任何支持的ActiveMQ协议进行通信。

ActiveMQ独立代理具有以下transportConnectors

<transportConnectors>
    <transportConnector name="auto" uri="auto://localhost:5671?protocolDetectionTimeOut=5000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="http" uri="http://0.0.0.0:8180?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
    <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600" />
    <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> 
    <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> 
    <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> 
    <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
</transportConnectors>

Wildfly MessageBean 具有以下Annotation

@MessageDriven(activationConfig =
{
        @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"),
        @ActivationConfigProperty(propertyName="destination", "TestDestination"),
        @ActivationConfigProperty(propertyName="clientID", propertyValue = "test"),
        @ActivationConfigProperty(propertyName="connectionParameters", propertyValue = "host=127.0.0.1;port=5671"),  
        @ActivationConfigProperty(propertyName="connectorClassName", propertyValue = "org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnectorFactory"),
        @ActivationConfigProperty(propertyName="acknowledgeMode", propertyValue="Auto-acknowledge")
}, mappedName = "TestDestination")
public class MessageProcessingBean implements MessageListener {

根据我选择连接的连接器,我在ActiveMQ-Server上收到不同的错误消息。

连接到auto - 端点会产生以下消息:

  

错误|无法接受连接:java.lang.IllegalStateException:无法检测到有线格式

野蝇方没有错误。

Openwire - 端点的连接会产生以下消息:

  

警告|传输连接到:tcp://127.0.0.1:45000失败:java.io.IOException:未知数据类型:77

这也会在野生动物方面产生错误:

  

17:04:23,384 ERROR [org.apache.activemq.artemis.core.client](Thread-16(ActiveMQ-client-netty-threads-1716275972))&gt; AMQ214013:无法解码数据包:java.lang.IllegalArgumentException:AMQ119032:无效类型:1     at org.apache.activemq.artemis.core.protocol.core.impl.PacketDecoder.decode(PacketDecoder.java:413)     在org.apache.activemq.artemis.core.protocol.ClientPacketDecoder.decode(ClientPacketDecoder.java:60)     at org.apache.activemq.artemis.core.protocol.ClientPacketDecoder.decode(ClientPacketDecoder.java:39)     at org.apache.activemq.artemis.core.protocol.core.impl.RemotingConnectionImpl.bufferReceived(RemotingConnectionImpl.java:324)     at org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryImpl $ DelegatingBufferHandler.bufferReceived(ClientSessionFactoryImpl.java:1105)     at org.apache.activemq.artemis.core.remoting.impl.netty.ActiveMQChannelHandler.channelRead(ActiveMQChannelHandler.java:68)     at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)     at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)     at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:265)     at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)     at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)     在io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:846)     at io.netty.channel.nio.AbstractNioByteChannel $ NioByteUnsafe.read(AbstractNioByteChannel.java:131)     在io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511)     at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468)     在io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382)     在io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354)     at io.netty.util.concurrent.SingleThreadEventExecutor $ 2.run(SingleThreadEventExecutor.java:112)     在java.lang.Thread.run(Thread.java:745)

我可以继续这样做,并在所有端点上收到错误消息。事实上,结果是ActiveMQ-Artemis正在发送ActiveMQ不支持的数据格式。

必须采取哪些步骤将ActiveMQ-Artemis与独立的ActiveMQ-Server连接?

1 个答案:

答案 0 :(得分:2)

Wildfly 10随ActiveMQ Artemis一起提供,默认情况下,任何MDB都将使用ActiveMQ Artemis JCA RA。 ActiveMQ Artemis JCA RA使用core协议,仅ActiveMQ Artemis代理支持。 ActiveMQ 5.x代理无法理解该协议。

因此,如果要在Wildfly 10上运行的MDB消耗来自ActiveMQ 5.x代理的消息,则需要部署ActiveMQ 5.x JCA RA(使用OpenWire协议, ActiveMQ 5.x代理了解)并配置MDB以使用它(例如,通过激活配置属性)。

就其价值而言,ActiveMQ Artemis代理确实支持OpenWire协议,因此旧版ActiveMQ 5.x客户端可以连接到ActiveMQ Artemis代理。