使用 Apache.NMS.AMQP 从 .NET 连接到 AmazonMQ (ActiveMQ) 代理
Connecting to AmazonMQ (ActiveMQ) broker from .NET using Apache.NMS.AMQP
我在使用 Apache.NMS.AMQP 客户端 (GitHub repo) 连接到我的 AmazonMQ 代理时遇到问题。
我启动了 AmazonMQ 代理,运行 我可以连接到代理控制台。
在我的 .NET 项目中,我安装了 Apache.NMQ.AMQP NuGet (v1.8.0),它应该用于通过 AMQP 连接到 ActiveMQ 代理。
根据 Amazon MQ 的 AWS 控制台,这是代理 AMQP 端点,请注意 amqp+ssl
架构:
amqp+ssl://*my-broker-url*.amazonaws.com:5671
此代码片段用于连接到代理:
var endpoint = "amqp+ssl://*my-broker-url*.amazonaws.com:5671";
var connectionFactory = new NmsConnectionFactory(endpoint);
var connection = connectionFactory.CreateConnection("myTestUserName", "myTestPassword");
connection.Start();
当使用上面指定的代码片段和代理 URL 时,我在调用 connection.Start()
方法时遇到以下异常:Apache.NMS.NMSException: Failed to create Provider instance for amqp+ssl
经过一些研究,我意识到应该为 amqp+ssl
传输连接器配置代理,我已经根据 ActiveMQ documentation 为 AMQP 尝试过。所以我尝试将以下 XML 添加到代理配置中:
<broker>
<!-- some other configuration entries -->
<transportConnectors>
<transportConnector name="amqp+ssl" uri="amqp+ssl://localhost:5671"/>
</transportConnectors>
<!-- some other configuration entries -->
</broker>
当尝试保存已编辑的配置时,AWS 向我显示以下消息:
The specified XML configuration data is invalid: cvc-attribute.3:
The value 'amqp+ssl' of attribute 'name' on element 'transportConnector' is not valid with respect to its type,
'protocol'. and cvc-enumeration-valid:
Value 'amqp+ssl' is not facet-valid with respect to enumeration '[openwire]'.
It must be a value from the enumeration.
我想这意味着在配置中只允许指定 'openwire' 传输连接器。
我尝试的下一个解决方案是将代理 URL 更改为使用 amqp
架构,因此我得到以下信息:
var endpoint = "amqp://*my-broker-url*.amazonaws.com:5672";
而不是
var endpoint = "amqp+ssl://*my-broker-url*.amazonaws.com:5671";
这在调用 connection.Start()
时也引发了异常:
Apache.NMS.NMSException:
A connection attempt failed because the connected party did not properly respond after a period of time,
or established connection failed because connected host has failed to respond.
是否有任何方法可以使用 AMQP 协议和 .NET 连接到 Amazon 托管的 ActiveMQ 代理,如果我在这里遗漏了什么?
我在 java 中遇到了同样的情况,我的问题通过将 "amqp+ssl" 替换为
"amqps":
var endpoint = "amqps://*my-broker-url*.amazonaws.com:5671";
我在使用 Apache.NMS.AMQP 客户端 (GitHub repo) 连接到我的 AmazonMQ 代理时遇到问题。
我启动了 AmazonMQ 代理,运行 我可以连接到代理控制台。 在我的 .NET 项目中,我安装了 Apache.NMQ.AMQP NuGet (v1.8.0),它应该用于通过 AMQP 连接到 ActiveMQ 代理。
根据 Amazon MQ 的 AWS 控制台,这是代理 AMQP 端点,请注意 amqp+ssl
架构:
amqp+ssl://*my-broker-url*.amazonaws.com:5671
此代码片段用于连接到代理:
var endpoint = "amqp+ssl://*my-broker-url*.amazonaws.com:5671";
var connectionFactory = new NmsConnectionFactory(endpoint);
var connection = connectionFactory.CreateConnection("myTestUserName", "myTestPassword");
connection.Start();
当使用上面指定的代码片段和代理 URL 时,我在调用 connection.Start()
方法时遇到以下异常:Apache.NMS.NMSException: Failed to create Provider instance for amqp+ssl
经过一些研究,我意识到应该为 amqp+ssl
传输连接器配置代理,我已经根据 ActiveMQ documentation 为 AMQP 尝试过。所以我尝试将以下 XML 添加到代理配置中:
<broker>
<!-- some other configuration entries -->
<transportConnectors>
<transportConnector name="amqp+ssl" uri="amqp+ssl://localhost:5671"/>
</transportConnectors>
<!-- some other configuration entries -->
</broker>
当尝试保存已编辑的配置时,AWS 向我显示以下消息:
The specified XML configuration data is invalid: cvc-attribute.3:
The value 'amqp+ssl' of attribute 'name' on element 'transportConnector' is not valid with respect to its type,
'protocol'. and cvc-enumeration-valid:
Value 'amqp+ssl' is not facet-valid with respect to enumeration '[openwire]'.
It must be a value from the enumeration.
我想这意味着在配置中只允许指定 'openwire' 传输连接器。
我尝试的下一个解决方案是将代理 URL 更改为使用 amqp
架构,因此我得到以下信息:
var endpoint = "amqp://*my-broker-url*.amazonaws.com:5672";
而不是
var endpoint = "amqp+ssl://*my-broker-url*.amazonaws.com:5671";
这在调用 connection.Start()
时也引发了异常:
Apache.NMS.NMSException:
A connection attempt failed because the connected party did not properly respond after a period of time,
or established connection failed because connected host has failed to respond.
是否有任何方法可以使用 AMQP 协议和 .NET 连接到 Amazon 托管的 ActiveMQ 代理,如果我在这里遗漏了什么?
我在 java 中遇到了同样的情况,我的问题通过将 "amqp+ssl" 替换为 "amqps":
var endpoint = "amqps://*my-broker-url*.amazonaws.com:5671";