ActiveMQ与AMQP .NET Lite版本

时间:2017-03-27 04:42:02

标签: activemq amqp

ActiveMQ,根据line 151 in AmqpWireFormat,拒绝与1.0.0以外的AMQP协议版本的连接。

根据line 411 in Connection,AMQP .NET Lite发送0.1.0.0。与此同时,它宣称要Full control of AMQP 1.0 protocol behavior

显然,ActiveMQ拒绝来自AMQP .NET Lite的连接,并且#34;来自非AMQP v1.0客户端的连接尝试。 AMQP,0,1,0,0"

客户做:

Address address = new Address("amqp://localhost:5672");
Connection connection = new Connection(address);
Session session = new Session(connection);

和ActiveMQ记录:

2017-03-28 09:11:28,403 | DEBUG | Transport Connection to: tcp://0:0:0:0:0:0:0:1:54352 failed: org.apache.activemq.transport.amqp.AmqpProtocolException: Connection from client using unsupported AMQP attempted | org.apache.activemq.broker.TransportConnection.Transport | ActiveMQ Transport: tcp:///0:0:0:0:0:0:0:1:54352@5672
org.apache.activemq.transport.amqp.AmqpProtocolException: Connection from client using unsupported AMQP attempted
        at org.apache.activemq.transport.amqp.protocol.AmqpConnection.onAMQPData(AmqpConnection.java:339)[activemq-amqp-5.14.4.jar:5.14.4]
        at org.apache.activemq.transport.amqp.AmqpProtocolDiscriminator.onAMQPData(AmqpProtocolDiscriminator.java:96)[activemq-amqp-5.14.4.jar:5.14.4]
        at org.apache.activemq.transport.amqp.AmqpTransportFilter.onCommand(AmqpTransportFilter.java:107)[activemq-amqp-5.14.4.jar:5.14.4]
        at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)[activemq-client-5.14.4.jar:5.14.4]
        at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:233)[activemq-client-5.14.4.jar:5.14.4]
        at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:215)[activemq-client-5.14.4.jar:5.14.4]
        at java.lang.Thread.run(Thread.java:745)[:1.8.0_112]

在命令行上显示:

 WARN | Connection attempt from non AMQP v1.0 client. AMQP,0,1,0,0

然后ActiveMQ中止连接。

ActiveMQ配置包括:

<transportConnectors>
    <transportConnector name="amqp" uri="amqp://0.0.0.0:5672" />
</transportConnectors>

这就像我看起来像ActiveMQ期望​​版本1.0.0.0和amqpnetlite发送0.1.0.0。

从哪里来?

3 个答案:

答案 0 :(得分:3)

默认情况下,ActiveMQ需要身份验证。尝试

string queueName = "q1";
Connection connection = new Connection(new Address("amqp://user:pwd@localhost:5672"));
Session session = new Session(connection);
SenderLink sender = new SenderLink(session, "sender", queueName);
Message message = new Message("Hello World");
sender.Send(message);
connection.Close();

用户名和密码应位于users.properties配置文件中。此外,建议使用异步API以避免阻止I / O调用。

答案 1 :(得分:0)

ActiveMQ和AMQP .NET Lite都支持ISO / IEC标准1.0版AMQP。协议标题&#34; AMQP0100&#34;表示协议的1.0版。已知AMQP .NET Lite可与ActiveMQ配合使用,因此我怀疑您有其他一些配置问题。

答案 2 :(得分:0)

我的假设是你没有关闭经纪人的强制要求客户端通过SASL握手连接,无论是通过SASL匿名还是SASL普通,取决于你是否配置了真实身份验证插件与否。我敢打赌,如果您通过添加可能有用的选项wireFormat.allowNonSaslConnections=true来配置代理。

根据您提供的信息,.NET客户端未使用SASL,因此代理拒绝它。 SASL标题将是&#34; AMQP3100&#34;