Quartz RMI远程服务器返回无效的主机名

时间:2016-07-28 09:23:42

标签: java quartz-scheduler rmi

我在不同的服务器上有2个进程。一个是运行Quartz调度程序,我想从另一个连接到它来管理触发器。

在调度程序服务器上,配置为:

org.quartz.scheduler.rmi.export = true
org.quartz.scheduler.rmi.createRegistry = always
org.quartz.scheduler.rmi.registryHost = localhost
org.quartz.scheduler.rmi.registryPort = 1099
org.quartz.scheduler.rmi.serverPort = 1100

在远程服务器上,配置为:

org.quartz.scheduler.rmi.proxy = true
org.quartz.scheduler.rmi.registryHost = ip-172-16-5-11.eu-west-1.compute.internal
org.quartz.scheduler.rmi.registryPort = 1099

当我尝试连接到远程调度程序时,我在日志中收到以下错误:

ERROR [2016-07-28 09:10:23,017] xxxx: Error communicating with remote scheduler.
! java.net.ConnectException: Connection refused
! ... 83 common frames omitted
! Causing: java.rmi.ConnectException: Connection refused to host: log-emea-1; nested exception is:
! java.net.ConnectException: Connection refused

虽然这个主机是我们网络上的主机,但我不知道为什么它会被远程注册表返回。

没有连接问题。如果我在远程计算机上运行tcpdump,我可以看到它连接到调度程序。它只是调度程序返回这个无效的主机:

09:19:02.047589 IP 172.16.5.11.1099 > 172.16.0.81.54065: Flags [P.], seq 19:235, ack 105, win 210, options [nop,nop,TS val 1231389006 ecr 562121102], length 216
E.....@.@..........Q.K.1}.Z... ......c.....
Ie.N!.I.Q....w..9.e2...V0.|...sr.$org.quartz.core.QuartzScheduler_Stub...........pxr..java.rmi.server.RemoteStub......e....pxr..java.rmi.server.RemoteObject.a...a3....pxpw3.
UnicastRef.
log-emea-1...L/8.   .a.69.e2...V0.|....x

Quartz RMI注册表从哪里获取此主机名?主机文件或DNS中没有线索。它似乎是随机的。

2 个答案:

答案 0 :(得分:1)

您可以使用以下JVM-Flag

启动调度程序
java -Djava.rmi.server.hostname=...

(请参阅RMI-FAQWhy does java rmi keep connecting to 127.0.1.1. When ip is 192.168.X.X?

答案 1 :(得分:0)

我尝试了JVM标志,但这没有任何区别,但它确实引导我找到解决方案。我在代码中设置了属性并修复了问题。

System.setProperty("java.rmi.server.hostname", "quartz");