ブロッキングの非 TLS AMQP 接続では、Spring の RabbitConnectionFactoryBean が SOCKS 対応のソケットファクトリを RabbitMQ Java クライアントに渡せます。

Commons Net がすでに利用可能なら、初期化前に既存のファクトリ Bean を設定します。

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 はアプリケーションの RabbitConnectionFactoryBean です。そのブローカーホスト、AMQP ポート、アカウント、Spring の接続管理設定はそのまま保ちます。ブローカーが宛先のままで、SocketFactory が SOCKS 経由でそこへ到達するソケットを作ります。公開仲介が許可された公開ブローカーに対する非機密のテストでは、SOCKS プロキシ一覧が候補を提供します。ランタイムが対応する SOCKS バージョンを合わせ、実際のブローカーホストとポートへの到達を確認してください。

Commons Net のファクトリは、渡された Proxy を使って未接続の java.net.Socket を作ります。その後 RabbitMQ のブロッキング接続コードが通常の接続経路でそのソケットを接続します。HTTP_PROXY をエクスポートするだけでは、この AMQP ソケットファクトリは提供されません。

RabbitMQ は、SocketFactory フックがブロッキング I/O に適用されると文書化しています。NIO や別のトランスポート向けに構成されたクライアントには、そのトランスポートが対応するフックが必要です。AMQPS では適切な TLS ソケットファクトリと宛先検証を維持してください。上の単純なファクトリに置き換えることは完全な TLS 構成ではありません。

関連記事