हां, आपको जेएमएक्स कनेक्टर प्रोग्रामेटिक रूप से बनाना चाहिए। आसान कामकाज के रूप में, आप रनटाइम में जेएमएक्स के लिए एक और बंदरगाह का चयन कर सकते हैं यदि डिफ़ॉल्ट बंदरगाह केवल मारे गए प्रक्रिया से व्यस्त है। या जब तक यह सफल न हो जाए तब तक अपने पोर्ट को बार-बार खोलने का प्रयास करें।
यहां कोड स्निपेट है जिसका उपयोग मैं जेकोनसोल-संगत जेएमएक्स कनेक्टर खोलने के लिए करता हूं। स्कैला में, क्षमा करें, लेकिन आपको इसे आसानी से अनुकूलित करने में सक्षम होना चाहिए
def startJmx(port: Int): Unit = {
if (port < 1) {
return
}
val log = LoggerFactory.getLogger(getClass)
log.info("Starting JMX server connector on port {}", port)
val registry = LocateRegistry.createRegistry(port)
val server = ManagementFactory.getPlatformMBeanServer()
val url = new JMXServiceURL(s"service:jmx:rmi:///jndi/rmi://localhost:$port/jmxrmi")
val connectorServer = JMXConnectorServerFactory.newJMXConnectorServer(url, Collections.emptyMap(), server)
val thread = new Thread {
override def run = try {
connectorServer.start()
} catch {
case e: Exception => log.error("Unable to start JMX connector", e)
}
}
thread.setDaemon(true)
thread.setName("JMX connector Thread")
thread.start()
}
स्रोत
2015-04-28 20:26:13
क्या आपने देखा है कि उस पोर्ट का उपयोग किस एप्लिकेशन का उपयोग कर रहा है? – BevynQ
मुझे अपना आवेदन होना चाहिए। जब मैं एप्लिकेशन को रोकता हूं, तो मुझे लगता है कि इस बंदरगाह से जुड़ी सॉकेट वास्तव में बंद करने के लिए 2MSL के लिए TIME_WAIT स्थिति पर जाती है। तो मैं इस बंदरगाह को पुन: प्रयोज्य बनाना चाहता हूं। – George
SO_REUSEADDR इस तरह से काम नहीं करता है। यह सॉकेट को विशिष्ट आईपी पते सुनने और दूसरों को अनदेखा करने की अनुमति देता है। या तो एक ही आवेदन दो बार चल रहा है या इस बंदरगाह को पकड़ने वाला एक और एप्लीकेशन है। – BevynQ