Il trasporto Netty di Qpid JMS può ottenere un nuovo handler proxy tramite un'estensione di connessione:

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 e InetSocketAddress sono tipi del JDK. Gli handler proxy appartengono a Netty, mentre la factory e l'enum dell'estensione a org.apache.qpid.jms.

Per un broker raggiungibile pubblicamente su una rotta proxy pubblica consentita, la lista di proxy SOCKS5 offre candidati host e porta; verificate che il nodo scelto consenta l'host e la porta effettivi del broker. L'estensione restituisce un fornitore; ogni chiamata al fornitore crea un nuovo handler. Restituire un unico handler mutabile catturato per più connessioni violerebbe questa disposizione di proprietà.

Per l'autenticazione SOCKS5, usate l'overload dell'handler che accetta nome utente e password. Mantenete le credenziali del broker sulla connessione JMS e conservate l'URI reale del broker AMQPS e il nome TLS.

L'estensione supporta gli handler proxy HTTP, SOCKS4 e SOCKS5 di Netty. Per HTTP CONNECT, l'intermediario deve consentire la porta di destinazione del broker.

Articoli correlati