2015-04-01 3 views
1

У меня есть много сервисов, связанных с zookeeper, и я хочу, чтобы служба A могла получить IP-адрес службы B, когда служба B подключена к zookeeper, есть ли какой-нибудь API, который может это сделать? Или я должен использовать другой файл конфигурации для записи IP-адресов всех служб?Как получить znode ip

ответ

1

Посмотрите, если это решит вашу проблему: http://curator.apache.org/curator-x-discovery/

Zookeeper не обеспечивает обнаружение услуг из коробки, но это легко осуществить его самостоятельно.

Вы не сможете получить IP-адреса других подключенных клиентов (услуг в вашем случае) прямо из Zookeeper API. Чтобы получить другие услуги, связанные с кластером, каждая служба должна индивидуально создавать эфемерный znode под определенным путем, например./services и установить необходимую адресацию и информацию об именах как данные znode (IP, порт и т. д.). Таким образом, вы можете перечислить этот путь и открыть активные службы, или просмотреть путь/services для любых изменений в конфигурации вашего сервиса.

Поскольку службы создают эфемерные узлы, они автоматически удаляются после их отключения и завершения их сеанса. Конечно, как только вы начнете делать что-то подобное, вы увидите, что есть много мелких деталей и решений по дизайну, которые вы должны сделать, ergo уже упомянутого рецепта куратора.

+0

Спасибо за ваш ответ :), в настоящее время я сделал то, что вы сказали, каждая служба создала эфемерный znode по определенному пути по группе, за исключением того, что я не поместил сервис ip в данные znode, просто задайтесь вопросом, может ли zookeeper api может помочь мне получить ip или я должен установить ip-адреса для znode данных самостоятельно? Если zookeeper может предложить мне znode ip, развертывание будет проще :), потому что мне не нужно указывать IP-адрес в моем файле конфигурации или получать IP-адреса по коду. – Endlesscode

+0

Плюс, мне нужен IP-адрес, потому что служба A и служба B должны подключить tcp-соединение для связи. – Endlesscode

+0

Насколько я знаю, Zookeeper не предоставляет этого, вы не можете получить IP-адрес клиента, который создал znode. Вам действительно нужно поместить это в данные znode самостоятельно. Не знаете, каковы ваши конкретные проблемы с настройкой, но в целом каждый сервис должен публиковать свою собственную информацию о адресе, когда он регистрируется на Zookeper, будь то IP или cname или что-то еще. – igorbel