Qpid JMS 的 Netty 传输可以通过连接扩展获取新的代理处理器:

Supplier<ProxyHandler> handlers = () ->
    new Socks5ProxyHandler(
        new InetSocketAddress("proxy.example", 1080));

JmsConnectionFactory factory = new JmsConnectionFactory(
    "amqps://broker.example:5671");
factory.setExtension(
    JmsConnectionExtensions.PROXY_HANDLER_SUPPLIER.toString(),
    (connection, remote) -> handlers);

Supplier 和 InetSocketAddress 是 JDK 类型。代理处理器属于 Netty,工厂和扩展枚举属于 org.apache.qpid.jms。

对于位于允许的公共代理路由上、可公开访问的 broker,SOCKS5 代理列表提供主机和端口候选;请确认所选节点允许该 broker 的实际主机和端口。扩展返回一个提供者;每次调用提供者都会创建新的处理器。把捕获的同一个可变处理器返回给多个连接会违反这一所有权安排。

进行 SOCKS5 身份验证时,请使用接受用户名和密码的处理器重载。将 broker 凭据保留在 JMS 连接上,并保留真实的 AMQPS broker URI 和 TLS 名称。

该扩展支持 Netty 的 HTTP、SOCKS4 和 SOCKS5 代理处理器。对于 HTTP CONNECT,中间方必须允许 broker 的目标端口。

相关文章