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。
从哪里来?
答案 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;