Artemis SOCKS 代理支持

Artemis SOCKS Proxy Support

SOCKS proxy support was released in 2.12.0. Here is the PR 的功能。但是,我无法使用以下方法设置 Artemis SOCKS 代理:

Map<String, Object> params = new HashMap<>();
params.put(TransportConstants.HOST_PROP_NAME, "localhost");
params.put(TransportConstants.PORT_PROP_NAME, "61617"); //<acceptor name="netty">tcp://0.0.0.0:61617</acceptor>
params.put(TransportConstants.PROXY_ENABLED_PROP_NAME, "true");
params.put(TransportConstants.PROXY_HOST_PROP_NAME, "localhost");
params.put(TransportConstants.PROXY_PORT_PROP_NAME, "1080");
params.put(TransportConstants.PROXY_USERNAME_PROP_NAME, "user");
params.put(TransportConstants.PROXY_PASSWORD_PROP_NAME, "WRONG_PASSWORD");

TransportConfiguration transportConfiguration = new TransportConfiguration("org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnectorFactory", params);
ActiveMQConnectionFactory activeMQConnectionFactory = ActiveMQJMSClient.createConnectionFactoryWithoutHA(JMSFactoryType.CF, transportConfiguration);
<dependency>
  <groupId>org.apache.activemq</groupId>
  <artifactId>artemis-jms-client</artifactId>
  <version>2.14.0</version>
</dependency>

这将忽略代理配置。即使传递错误的代理配置,如不存在的主机、密码和用户名,消息也会成功发送到代理。这不会失败。那些 PROXY_* 属性似乎没有被加载。

我是不是做错了什么?

如果您使用的是 localhost,则代理设置将被忽略。请参阅 the code 以供参考。因此,您应该在配置代理支持时使用 non-loopback IP 或主机名。

此外,请注意,您可以使用 URL 而不是 TransportConfiguration,例如:

ActiveMQConnectionFactory activeMQConnectionFactory =  new ActiveMQConnectionFactory("tcp://non_loopback_ip:61617?socksEnabled=true;socksHost=localhost;socksPort=1080;socksUsername=user;socksPassword=WRONG_PASSWORD");