SOCKS per connessioni RabbitMQ non TLS bloccanti in Spring AMQP
Collegare una SocketFactory consapevole del proxy tramite RabbitConnectionFactoryBean per il percorso di connessione AMQP non TLS bloccante.
Per una connessione AMQP bloccante e non TLS, la RabbitConnectionFactoryBean di Spring può passare una fabbrica di socket consapevole di SOCKS al client Java di RabbitMQ.
Se Commons Net è già disponibile, configurare il factory bean esistente prima dell'inizializzazione:
var socksProxy = new java.net.Proxy(
java.net.Proxy.Type.SOCKS,
new java.net.InetSocketAddress("proxy.example", 1080));
rabbitFactoryBean.setSocketFactory(
new org.apache.commons.net.DefaultSocketFactory(socksProxy));
rabbitFactoryBean è la RabbitConnectionFactoryBean dell'applicazione. Mantenere il suo host del broker, la porta AMQP, l'account e la configurazione di gestione delle connessioni di Spring. Il broker resta la destinazione; la SocketFactory crea i socket che lo raggiungono tramite SOCKS. Per un test non sensibile verso un broker pubblico dove sono ammessi intermediari pubblici, la lista di proxy SOCKS offre candidati; abbinare la versione SOCKS supportata dal runtime e confermare l'accesso all'host e alla porta reali del broker.
La fabbrica di Commons Net crea un java.net.Socket non connesso usando il Proxy fornito. Il codice di connessione bloccante di RabbitMQ connette poi quel socket tramite il suo normale percorso di connessione. Il solo export di HTTP_PROXY non fornisce questa fabbrica di socket AMQP.
RabbitMQ documenta che l'hook SocketFactory si applica all'I/O bloccante. Un client configurato per NIO o un altro trasporto necessita dell'hook supportato da quel trasporto. Per AMQPS, mantenere una fabbrica di socket TLS adeguata e la verifica della destinazione; sostituirla con la fabbrica semplice sopra non è una configurazione TLS completa.