Я думаю, что мне нужно подключиться к удаленному объекту RMI без прохождения реестра, но я не знаю, как.
Моя ситуация такова: я внедряю простую службу распределения работ, которая состоит из одного дистрибьютора и нескольких работников. Распространитель имеет зарегистрированный объект RMI, к которому клиенты подключаются для отправки заданий, а рабочие подключаются для приема заданий.
К сожалению, хосты распространителя и рабочего находятся за брандмауэром. Чтобы добраться до хоста распространителя, я туннелирую два порта (один для реестра, один для объекта распространителя) через SSH, чтобы получить доступ к реестру и распространителю извне брандмауэра. Чтобы это работало, я должен установить «-Djava.rmi.server.hostname = localhost» на JVM распространителя, чтобы клиенты подключались к своему локальному туннелированному порту вместо порта на фактическом хосте распространителя, который заблокирован.
Это создает проблему для рабочих, потому что им нужно подключиться к дистрибьютору напрямую, но из-за перенаправления «localhost» они ведут себя как клиенты и пытаются подключиться к порту на своем собственном хосте, который не является доступно, потому что я не туннель на рабочих (это нецелесообразно).
Теперь, если бы я мог подключиться к удаленному объекту напрямую, указав имя хоста и порт, я мог бы покончить как с реестром на распространителе, так и с хаком "localhost", и заставить рабочих правильно подключаться.
Как мне это сделать? Или есть другое решение этой проблемы?