SOCKS สำหรับการเชื่อมต่อ RabbitMQ ที่ไม่ใช้ TLS ใน Spring AMQP
เชื่อมต่อ SocketFactory ที่รู้จักพร็อกซีผ่าน RabbitConnectionFactoryBean สำหรับเส้นทางการเชื่อมต่อ AMQP ที่ไม่ใช้ TLS
สำหรับการเชื่อมต่อ AMQP แบบบล็อกและไม่ใช้ TLS นั้น RabbitConnectionFactoryBean ของ Spring สามารถส่งโรงงานซ็อกเก็ตที่รู้จัก SOCKS ไปยังไคลเอนต์ Java ของ RabbitMQ ได้
หากมี Commons Net อยู่แล้ว ให้กำหนดค่า factory 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 สร้าง java.net.Socket ที่ยังไม่เชื่อมต่อโดยใช้ Proxy ที่ให้มา จากนั้นโค้ดการเชื่อมต่อแบบบล็อกของ RabbitMQ จะเชื่อมต่อซ็อกเก็ตนั้นผ่านเส้นทางการเชื่อมต่อปกติ การส่งออก HTTP_PROXY เท่านั้นไม่ได้ให้โรงงานซ็อกเก็ต AMQP นี้
RabbitMQ ระบุว่าฮุก SocketFactory ใช้กับการรับส่งข้อมูลแบบบล็อก ไคลเอนต์ที่กำหนดค่าสำหรับ NIO หรือทรานสปอร์ตอื่นต้องใช้ฮุกที่ทรานสปอร์ตนั้นรองรับ สำหรับ AMQPS ให้คงโรงงานซ็อกเก็ต TLS ที่เหมาะสมและการตรวจสอบปลายทางไว้ การแทนที่ด้วยโรงงานอย่างง่ายข้างต้นไม่ใช่การกำหนดค่า TLS ที่สมบูรณ์