Spring Data GemFire ​​Server java.net.BindException в Linux

У меня есть приложение Spring Boot, которое я использую для запуска Pivotal GemFire ​​CacheServer.

Когда я создаю файл и запускаю его локально:

java -jar gemfire-server-0.0.1-SNAPSHOT.jar 

Работает нормально без проблем. Сервер использует свойства по умолчанию

spring.data.gemfire.cache.log-level=info
spring.data.gemfire.locators=localhost[10334]
spring.data.gemfire.cache.server.port=40404
spring.data.gemfire.name=CacheServer
spring.data.gemfire.cache.server.bind-address=localhost
spring.data.gemfire.cache.server.host-name-for-clients=localhost

Если я разверну это в дистрибутиве Centos и запущу его с тем же скриптом, но с прохождением «тестового» профиля:

java -jar gemfire-server-0.0.1-SNAPSHOT.jar -Dspring.profiles.active=test

с моим тестовым профилем application-test.properties, выглядящим так:

spring.data.gemfire.cache.server.host-name-for-clients=server.centralus.cloudapp.azure.com

Я вижу при запуске, что сервер находит Локатор уже запущенным на хосте (запускаю его через отдельный процесс с Gfsh).

введите здесь описание изображения

Сервер даже присоединяется к кластеру примерно на минуту. Но затем он выключается из-за исключения привязки.

введите здесь описание изображения

Я проверил, работает ли что-нибудь на этом порту (40404) - и ничего не появляется.

введите здесь описание изображения

ИЗМЕНИТЬ

По-видимому, я ДЕЙСТВИТЕЛЬНО получаю это исключение локально - просто это занимает намного больше времени.

Это почти мгновенно, когда я запускаю его в дистрибутиве Centos. На моем Mac требуется около 2 минут, прежде чем процесс выдаст исключение:

введите здесь описание изображения

Добавлю еще несколько изображений этого:

Два окна bash - левое отслеживает GF локально, а правое я использую для проверки порта и запуска процесса Java:

введите здесь описание изображения

Сервер добавляется в кластер. Обратите внимание на отметку времени 16:45:05.

Вот добавленный сервер, и он работает:

введите здесь описание изображения

Наконец, исключение примерно через две минуты — снова посмотрите на временную метку исключения — 16:47:09. Сервер остановлен и исключен из кластера.

введите здесь описание изображения


person JDBennett    schedule 08.08.2018    source источник


Ответы (1)


Запускали ли вы другие серверы с помощью Gfsh? То есть с помощью команды Gfsh, похожей на...

gfsh>start server --name=ExampleGfshServer --log-level=config

Gfsh начнет CacheServers прослушивание CacheServer порта по умолчанию 40404.

У вас есть несколько вариантов.

1) Во-первых, вы можете отключить CacheServer по умолчанию при запуске сервера с Gfsh вот так...

gfsh>start server --name=ExampleGfshServer --log-level=config --disable-default-server

2) Кроме того, вы можете изменить порт CacheServer при запуске других серверов с помощью Gfsh...

gfsh>start server --name=ExampleGfshServer --log-level=config --server-port=50505

3) Если вы запускаете несколько экземпляров класса Spring Boot, Pivotal GemFire ​​CacheServer, вы можете изменить свойство spring.data.gemfire.cache.server.port, объявив свойство как системное при запуске.

Например, в Spring Boot application.properties можно сделать...

#application.properties
...
spring.data.gemfire.cache.server.port=${gemfire.cache.server.port:40404}

А потом при запуске приложения из командной строки...

java -Dgemfire.cache.server.port=48484 -jar ...

Конечно, вы можете просто установить свойство SDG из командной строки...

java -Dspring.data.gemfire.cache.server.port=48484 --jar ...

В любом случае, я гарантирую вам, что у вас запущен другой процесс (например, Pivotal GemFire ​​CacheServer) с ServerSocket, который прослушивает порт 40404. netstat -a | grep 40404 должно дать вам лучшие результаты.

Надеюсь это поможет.

С уважением, Джон

person John Blum    schedule 08.08.2018
comment
Я только что дважды проверил. На 40404 ничего не работает, пока я не запустил процесс Java. Я добавил несколько снимков экрана выше, чтобы показать вам вывод моего терминала. У меня есть локатор, работающий до того, как я начну процесс Java. Запускается процесс Java, и я вижу, что сервер добавлен в кластер. Проходит около двух минут (локально) - а потом выбрасывается исключение. - person JDBennett; 09.08.2018
comment
Что ж, наверняка что-то использует этот порт после того, как GemFire ​​попытается запустить экземпляр CacheServer в вашем Spring Boot, серверном приложении GemFire. Возможно, использование jps на компьютере, на котором запущено приложение Spring Boot, покажет, какие другие процессы JVM выполняются. Если бы вы также могли поделиться своим исходным кодом (как репозиторий GitHub), это было бы полезно. Спасибо. - person John Blum; 09.08.2018
comment
Заметив, что вы также опубликовали этот вопрос вчера (stackoverflow.com/ вопросов/51737079/) вы все еще используете приложение spring-boot-gemfire-server-example (github .com/jxblum/spring-boot-gemfire-server-example) в вашем тестировании/экспериментировании? Вы как-то модифицировали этот код? Опять же, пожалуйста, поделитесь репозиторием с вашим кодом/вилкой, что угодно. - person John Blum; 09.08.2018