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