Размещение нескольких серверов netty для grpc внутри сервера tomcat, проблема повторного развертывания приложения - PullRequest
0 голосов
/ 16 мая 2018

Я занимаюсь разработкой микросервисного приложения и размещаю их на одном сервере Tomcat. Так что я не использую весеннюю загрузку. Я использую только весну.

Допустим, у нас есть приложения, вызывающие master-data и common-service. Когда я развертываю их в tomcat, я могу получить к ним доступ через порт 8080. Но я хотел, чтобы они перешли на конечные точки связи grpc. Затем мне пришлось установить grpc libries и netty для каждого модуля. Теперь я могу получить доступ к их конечной точке grpc в портах 6565 и 7575.

Я использовал аннотацию Spring Bean @PostConstruct и отдельно запускаю серверы GRPC в отдельных портах (6565 and 7575). Теперь работает нормально.

Но когда я добавляю новые изменения в master-data и повторно внедряю его в tomcat без выключения tomcat , он выдаст мне java.net.BindException: Address already in use , и когда я запусту ps -ef | grep netty в терминале, я смог увидеть там процессы еще настраиваются

Похоже, что сервер grpc не выключен должным образом из-за tomcat не выключается .

Кто-нибудь может дать мне правильное решение?

1 Ответ

0 голосов
/ 16 мая 2018

gRPC Java-серверы необходимо отключить, вызвав их метод shutdown(). У меня мало (каких-либо) знаний об интеграции gRPC Java с Tomcat / Spring, но на стороне gRPC нет встроенной интеграции, поэтому вам нужно будет убедиться, что серверы gRPC каким-то образом получают программный сигнал shutdown().

репозиторий grpc-java-contrib содержит дополнительные утилиты для работы с gRPC Java, в том числе с Spring. В частности, похоже, что GrpcServerHost может быть полезным для управления жизненным циклом сервера в среде Spring.

...