首页 > 解决方案 > Linux 中的 Spring Data GemFire 服务器 java.net.BindException

问题描述

我有一个用于启动 Pivotal GemFire 的 Spring Boot 应用程序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

我可以在启动过程中看到服务器发现 Locator 已经在主机上运行(我通过 Gfsh 的单独进程启动它)。

在此处输入图像描述

服务器甚至加入集群大约一分钟。但随后由于绑定异常而关闭。

在此处输入图像描述

我检查了该端口(40404)上是否有任何东西在运行 - 没有任何显示

在此处输入图像描述

编辑

显然我确实在本地得到了这个异常——只是需要更长的时间。

当我在 Centos 发行版上启动它时,它几乎是即时的。在我的 Mac 上,该过程大约需要 2 分钟才能引发异常:

在此处输入图像描述

添加更多的图像:

两个 bash 窗口 - 左边是本地监控 GF,右边是我用来检查端口并启动 Java 进程:

在此处输入图像描述

服务器被添加到集群中。请注意 16:45:05 的时间戳。

这是添加的服务器,它似乎正在运行:

在此处输入图像描述

最后,大约两分钟后出现异常——再次查看异常上的时间戳——16:47:09。服务器停止并从集群中删除。

在此处输入图像描述

标签: linuxspring-data-gemfire

解决方案


您是否使用Gfsh启动了其他服务器?也就是说,使用类似于...的 Gfsh 命令

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

Gfsh 将开始CacheServers侦听.CacheServer40404

你有几个选择。

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、Pivo​​tal GemFireCacheServer类的多个实例,那么您可以spring.data.gemfire.cache.server.port通过在启动时将属性声明为系统属性来更改属性。

例如,您可以在 Spring Bootapplication.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 CacheServerServerSocket正在侦听 port 40404,正在运行。 netstat -a | grep 40404应该会给你更好的结果。

希望这可以帮助。

问候,约翰


推荐阅读