การส่งต่อคำขอข้ามบริการ Tomcat?

ฉันมีประสบการณ์ในการส่งต่อคำขอระหว่าง webapps ที่แยกกันโดยอัปเดต META-INF/context.xml ของ webapp แต่ละรายการให้มี crossContext="true"

อย่างไรก็ตาม ฉันมีสถานการณ์ในขณะนี้ที่มีการปรับใช้ webapps ภายใน Tomcat ที่ทำงานอยู่เดียวกัน แต่อยู่ในพื้นที่ที่แยกจากกันโดยสิ้นเชิง หากต้องการอธิบายอย่างละเอียดใน server.xml ของ Tomcat:

  • app1 ใช้บริการชื่อ "app1Svc" พร้อมด้วยตัวเชื่อมต่อของตัวเอง (เพื่อให้ทำงานบนพอร์ตที่แยกจากกัน) ดังนั้น Engine, Realm และ Host ของตัวเอง
  • app2 มีการตั้งค่าที่คล้ายกัน โดยมีบริการแยกชื่อ "app2Svc" พร้อมตัวเชื่อมต่อของตัวเอง ฯลฯ

หากฉันเรียกใช้ webapps เหล่านี้ภายในโฮสต์เดียวกัน ฉันสามารถส่งคำขอระหว่างทั้งสองผ่านทาง crossContext="true" ของ context.xml และรับบริบทเซิร์ฟเล็ตที่เกี่ยวข้องเพื่อส่งต่อคำขอไปยัง (ตาม Tomcat ไม่สามารถรับ ServletContext ของ webapp อื่นได้)

อย่างไรก็ตาม เป็นไปได้ไหมที่จะส่งระหว่างสอง webapps ที่ต้องทำงานบนพอร์ตแยกกัน (โดยไม่ต้องใส่ httpd หรือบางอย่างไว้หน้า tomcat)


person drobert    schedule 29.03.2012    source แหล่งที่มา


คำตอบ (1)


ไม่ใช่แบบพื้นเมืองซึ่งน่าจะดี

คุณสามารถเข้าถึงได้โดยการสร้างคำขอ http จากที่หนึ่งไปยังอีกที่หนึ่ง เพื่อจุดประสงค์นั้น คุณต้องการให้แต่ละอันเปิดเผยฟังก์ชันการทำงานบางอย่างบน http (บางทีอาจสงบ) เพื่อทำการร้องขอ คุณสามารถใช้ส่วนประกอบ apache http หรือเพียงแค่ URL.openConnection() คุณเพียงแค่ต้องระบุ URL (+พอร์ต) ของแอปอื่น ๆ ให้กับแอปพลิเคชัน เพื่อให้สามารถทำการร้องขอได้

person Bozho    schedule 29.03.2012
comment
ฉันคิดว่ามันจะได้ผล ยกเว้นนั่นหมายความว่าฉันมีเธรดผู้ฟังสองเธรดเพื่อรองรับคำขอเดียว ซึ่งไม่เหมาะสมที่สุด สิ่งนี้จะสูญเสียแอตทริบิวต์คำขอใด ๆ ที่กำหนดไว้ในคำขอแล้ว (ซึ่งไม่ใช่กรณีของการส่งต่อแบบมาตรฐานที่ฉันเชื่อว่า) - person drobert; 30.03.2012
comment
คุณสามารถเปิดเผยบริการของเซิร์ฟเล็ตทั้งสองผ่าน RMI ได้หรือไม่ สิ่งนี้อาจมีประสิทธิภาพมากกว่าสำหรับการสื่อสารระหว่างบริการมากกว่าคำขอ HTTP แบบเต็มหากคุณใช้ LAN ภายในเครื่อง หากคุณอยู่บน JVM เดียวกัน คุณจะมีโอกาสอื่น ๆ ที่เปิดไว้ให้คุณ เช่น JNDI หรือ - หากคุณเริ่มต้นเซิร์ฟเวอร์โดยทางโปรแกรม - แสดงว่าคุณเป็นเจ้าของบริการรีจิสทรีของ JVM - person Bruno Grieder; 30.03.2012