org.jgroups.protocols.udp- null에 메시지를 보내는 데 실패했습니다
-
21-08-2019 - |
문제
[hannel,192.168.0.46:40014] 15:08:03,642 - ERROR - org.jgroups.protocols.UDP - failed sending message to null (61 bytes)
java.lang.Exception: dest=/225.1.2.46:30446 (64 bytes)
at org.jgroups.protocols.UDP._send(UDP.java:333)
at org.jgroups.protocols.UDP.sendToAllMembers(UDP.java:283)
at org.jgroups.protocols.TP.doSend(TP.java:1327)
at org.jgroups.protocols.TP.send(TP.java:1317)
at org.jgroups.protocols.TP.down(TP.java:1038)
at org.jgroups.protocols.PING.sendMcastDiscoveryRequest(PING.java:220)
at org.jgroups.protocols.PING.sendGetMembersRequest(PING.java:214)
at org.jgroups.protocols.Discovery$PingSenderTask$1.run(Discovery.java:385)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:417)
at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:280)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:135)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:65)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:142)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:166)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.io.InterruptedIOException: operation interrupted
at java.net.PlainDatagramSocketImpl.send(Native Method)
at java.net.DatagramSocket.send(DatagramSocket.java:612)
at org.jgroups.protocols.UDP._send(UDP.java:324)
... 16 more
이것은 서버에서로드 테스트 중에 발생합니다. 걱정해야합니다. 로그에서 그 메시지를 얻는 것 외에도 모든 것이 잘 작동하는 것 같습니다.
해결책
Matt B에 대한 응답으로 "NULL에 메시지를 보내는 실패"메시지는 오해의 소지가 있습니다. 진정한 문제는 InterruptedioException입니다. 이것은 UDP를 보내는 스레드에서 인터럽트 ()라고 불리는 사람을 의미합니다. 아마도 인터럽트는 JGroups 내에서 생성 될 가능성이 높습니다. (시작한 다음 Jgroups 채널을 중단하지 않는 한.)
스택 추적을 살펴보면 중단 된 I/O는 발견 프로토콜에서 나왔습니다. 다른 클러스터 멤버를 발견하려고했습니다. 따라서이 예외에서 귀하의 메시지가 손실되지 않았습니다.
우리는 이것을 실제로 알아 내기 위해 더 많은 것을 알아야 할 것입니다.
다른 팁
"NULL"으로 전송한다는 것은 전체 클러스터로 전송하고 단일 멤버에게 메시지를 보내는 것을 의미합니다. 나는 이것이 약간 오해의 소지가 있다는 데 동의한다. 그래서 나는 이것을 이후 버전으로 변경했다 : IIRC "NULL"은 "클러스터"또는 "그룹"으로 대체되었다.
여기에서 대상을 언급 한 "NULL": NULL 대상 주소는 전체 클러스터로 보내는 것을 의미합니다.
InterruptedioException은 jgroups에 의해 중지 된 발신 스레드에서 발생합니다. 예를 들어 디스커버리 단계에서 이미 반환 할 수있는 충분한 응답이있을 때 발생하므로 보내기 작업이 중지됩니다 (예 : 중단).
이것은 또한 이후 버전의 JGroups에서 고정되었습니다. 벨라
"NULL"에 메시지를 보내기 때문에 오류가 발생할 수 있습니까?
error- org.jgroups.protocols.udp- null로 메시지를 보내는 데 실패했습니다
그렇지 않으면 이것은 코드 샘플, 네트워크에 대한 정보, 문제가 발생하는 특정 상황 등을 사용하지 않고 다른 사람이 도와주기가 매우 어려울 것입니다.