Resuelva el problema atascado causado por streamBridge.send cuando se inicia el proyecto Springboot

Fenómeno

  • Cuando comenzamos nuestro proyecto Spring Boot, ocasionalmente nos atascábamos, a la mitad del inicio, la tarjeta no se movía
2023-01-16 10:23:10.338  INFO 1 --- [  restartedMain] com.hazelcast.core.LifecycleService      : [172.18.0.14]:5701 [dev] [4.2.4] [172.18.0.14]:5701 is STARTED
2023-01-16 10:23:12.391  INFO 1 --- [  restartedMain] c.h.h.HazelcastCacheRegionFactory        : Starting up HazelcastCacheRegionFactory
2023-01-16 10:23:12.396  INFO 1 --- [  restartedMain] c.h.h.i.IHazelcastInstanceFactory        : Using existing HazelcastInstance [unit].
2023-01-16 10:23:16.685  INFO 1 --- [ntLoopGroup-2-1] com.newatc.socketio.SocketIOServer       : SocketIO server started at port: 7654
2023-01-16 10:23:16.702  INFO 1 --- [  restartedMain] c.n.s.a.SpringAnnotationScanner          : controllerAgentServer bean listeners added
2023-01-16 10:23:16.972  INFO 1 --- [  restartedMain] c.n.s.a.SpringAnnotationScanner          : channelParamHandler bean listeners added
2023-01-16 10:23:16.979  INFO 1 --- [  restartedMain] c.n.s.a.SpringAnnotationScanner          : controllerAlarmHandler bean listeners added
2023-01-16 10:23:16.988  INFO 1 --- [  restartedMain] c.n.s.a.SpringAnnotationScanner          : controllerFaultHandler bean listeners added
2023-01-16 10:23:16.995  INFO 1 --- [  restartedMain] c.n.s.a.SpringAnnotationScanner          : controllerModelHandler bean listeners added
2023-01-16 10:23:17.000  INFO 1 --- [  restartedMain] c.n.s.a.SpringAnnotationScanner          : controllerTimeHandler bean listeners added
2023-01-16 10:23:17.006  INFO 1 --- [  restartedMain] c.n.s.a.SpringAnnotationScanner          : dayPlanParamHandler bean listeners added
2023-01-16 10:23:17.011  INFO 1 --- [  restartedMain] c.n.s.a.SpringAnnotationScanner          : detectorEventHandler bean listeners added
2023-01-16 10:23:17.016  INFO 1 --- [  restartedMain] c.n.s.a.SpringAnnotationScanner          : detectorParamHandler bean listeners added
2023-01-16 10:23:17.022  INFO 1 --- [  restartedMain] c.n.s.a.SpringAnnotationScanner          : lampOffHandler bean listeners added
2023-01-16 10:23:17.027  INFO 1 --- [  restartedMain] c.n.s.a.SpringAnnotationScanner          : patternParamHandler bean listeners added
2023-01-16 10:23:17.033  INFO 1 --- [  restartedMain] c.n.s.a.SpringAnnotationScanner          : phaseFlowHandler bean listeners added
2023-01-16 10:23:17.038  INFO 1 --- [  restartedMain] c.n.s.a.SpringAnnotationScanner          : phaseParamHandler bean listeners added
2023-01-16 10:23:17.044  INFO 1 --- [  restartedMain] c.n.s.a.SpringAnnotationScanner          : phaseStatusHandler bean listeners added
2023-01-16 10:23:17.050  INFO 1 --- [  restartedMain] c.n.s.a.SpringAnnotationScanner          : scheduleParamHandler bean listeners added
2023-01-16 10:23:17.057  INFO 1 --- [  restartedMain] c.n.s.a.SpringAnnotationScanner          : signalIPParamHandler bean listeners added
2023-01-16 10:23:17.062  INFO 1 --- [  restartedMain] c.n.s.a.SpringAnnotationScanner          : softwareVersionHandler bean listeners added
2023-01-16 10:23:17.068  INFO 1 --- [  restartedMain] c.n.s.a.SpringAnnotationScanner          : stageParamHandler bean listeners added
2023-01-16 10:23:17.073  INFO 1 --- [  restartedMain] c.n.s.a.SpringAnnotationScanner          : trafficParamsHandler bean listeners added
2023-01-16 10:23:17.079  INFO 1 --- [  restartedMain] c.n.s.a.SpringAnnotationScanner          : vehGPSTrajectoryHandler bean listeners added
2023-01-16 10:23:17.084  INFO 1 --- [  restartedMain] c.n.s.a.SpringAnnotationScanner          : wirelessOpLogHandler bean listeners added
2023-01-16 10:23:17.091  INFO 1 --- [  restartedMain] c.n.s.a.SpringAnnotationScanner          : wirelessSecurityHandler bean listeners added
2023-01-16 10:23:18.018  INFO 1 --- [ntLoopGroup-3-1] c.n.socketio.handler.AuthorizeHandler    : channel active cb27f0b9-236a-404c-8cb1-369366729ce2
2023-01-16 10:23:18.466  INFO 1 --- [ntLoopGroup-3-1] c.h.i.p.impl.PartitionStateManager       : [172.18.0.14]:5701 [dev] [4.2.4] Initializing cluster partition table arrangement...
2023-01-16 10:23:18.776  INFO 1 --- [ntLoopGroup-3-1] c.n.unit.agent.ControllerAgentServer     : onConnect -- client = 172.16.1.101 Port=38167 unitId:101
2023-01-16 10:23:18.981  INFO 1 --- [ntLoopGroup-3-2] c.n.socketio.handler.AuthorizeHandler    : channel active 539fb94d-a5de-4fef-b81d-82803885973f
2023-01-16 10:23:19.008  INFO 1 --- [ntLoopGroup-3-2] c.n.unit.agent.ControllerAgentServer     : onConnect -- client = 172.16.1.93 Port=39568 unitId:93
2023-01-16 10:23:22.177  INFO 1 --- [        Timer-0] c.n.unit.agent.ControllerAgentServer     : Sync signal time ipAddress:172.16.1.101
2023-01-16 10:23:22.244  INFO 1 --- [        Timer-2] c.n.unit.agent.ControllerAgentServer     : Sync signal time ipAddress:172.16.1.93
2023-01-16 10:23:25.953  INFO 1 --- [ntLoopGroup-3-3] c.n.socketio.handler.AuthorizeHandler    : channel active 874e3919-489d-4970-8a53-e51e8a880057
2023-01-16 10:23:25.978  INFO 1 --- [ntLoopGroup-3-3] c.n.unit.agent.ControllerAgentServer     : onConnect -- client = 172.16.1.107 Port=45166 unitId:107
2023-01-16 10:23:26.821  WARN 1 --- [  restartedMain] onConfiguration$FunctionBindingRegistrar : You have defined function definition that does not exist: streamBridge
2023-01-16 10:23:29.213  INFO 1 --- [        Timer-4] c.n.unit.agent.ControllerAgentServer     : Sync signal time ipAddress:172.16.1.107
2023-01-16 10:24:00.174  INFO 1 --- [        Timer-1] c.n.unit.agent.ControllerAgentServer     : Get signal time ipAddress:172.16.1.101
2023-01-16 10:24:00.248  INFO 1 --- [        Timer-3] c.n.unit.agent.ControllerAgentServer     : Get signal time ipAddress:172.16.1.93
2023-01-16 10:24:07.212  INFO 1 --- [        Timer-5] c.n.unit.agent.ControllerAgentServer     : Get signal time ipAddress:172.16.1.107
2023-01-16 10:24:37.351  INFO 1 --- [ntLoopGroup-3-4] c.n.socketio.handler.AuthorizeHandler    : channel active bd580b9b-8050-4315-bf0d-07e8acc797b2
2023-01-16 10:24:37.368  INFO 1 --- [ntLoopGroup-3-4] c.n.unit.agent.ControllerAgentServer     : onConnect -- client = 172.16.1.107 Port=45167 unitId:107
2023-01-16 10:24:40.595  INFO 1 --- [        Timer-6] c.n.unit.agent.ControllerAgentServer     : Sync signal time ipAddress:172.16.1.107
2023-01-16 10:24:43.373  INFO 1 --- [ntLoopGroup-3-5] c.n.socketio.handler.AuthorizeHandler    : channel active a7ffe375-462d-4c18-bd67-1811933b8084
2023-01-16 10:24:43.388  INFO 1 --- [ntLoopGroup-3-5] c.n.unit.agent.ControllerAgentServer     : onConnect -- client = 172.16.1.93 Port=39570 unitId:93
2023-01-16 10:24:46.611  INFO 1 --- [        Timer-8] c.n.unit.agent.ControllerAgentServer     : Sync signal time ipAddress:172.16.1.93
2023-01-16 10:25:18.595  INFO 1 --- [        Timer-7] c.n.unit.agent.ControllerAgentServer     : Get signal time ipAddress:172.16.1.107
2023-01-16 10:25:24.612  INFO 1 --- [        Timer-9] c.n.unit.agent.ControllerAgentServer     : Get signal time ipAddress:172.16.1.93
2023-01-16 10:25:51.726  INFO 1 --- [ntLoopGroup-3-6] c.n.socketio.handler.AuthorizeHandler    : channel active fb525bf4-fdd7-4f88-9a0d-88c923ef24df
2023-01-16 10:25:51.743  INFO 1 --- [ntLoopGroup-3-6] c.n.unit.agent.ControllerAgentServer     : onConnect -- client = 172.16.1.107 Port=45168 unitId:107
2023-01-16 10:25:54.964  INFO 1 --- [       Timer-10] c.n.unit.agent.ControllerAgentServer     : Sync signal time ipAddress:172.16.1.107
2023-01-16 10:26:32.965  INFO 1 --- [       Timer-11] c.n.unit.agent.ControllerAgentServer     : Get signal time ipAddress:172.16.1.107
  • No es inevitable que el inicio se atasque.Después de considerar la situación en la que la tarjeta se atasca, se descubre que cuando Kafka envía un mensaje, el propietario ocasionalmente se atasca. Esto me recuerda un error de inicio con el que traté antes del error de inicio del proyecto kafka de Spring Cloud Stream
  • El proyecto utiliza spring-cloud-starter-stream-kafkaprogramación funcional. La lógica comercial del código es que cuando el programa recibe socket.ioel mensaje del hardware, utilizará kafka para reenviar el mensaje.
  • El motivo del error anterior fue que cuando se inició el proyecto, antes de que se estableciera la conexión con Kafka, el programa recibió el mensaje del socket y comenzó a enviar el mensaje de Kafka de acuerdo con la lógica del programa, lo que resultó en una excepción de puntero nulo. juicio y procesamiento de inicialización, el problema se resolvió
  • El fenómeno es similar esta vez, pero cuando la implementación inicial y el programa no están conectados al hardware, el inicio es exitoso. Sin embargo, el programa se ha utilizado durante un período de tiempo, y cuando está conectado al hardware y recibe los datos informados por el hardware, hay actualizaciones ocasionales y bloqueos de inicio.

Solucionar problemas y resolver

  • Primero, compare los registros de falla de inicio y éxito de inicio, y no se encuentra ningún error anormal. El registro de inicio exitoso es el siguiente
2023-01-16 10:13:32.705  INFO 1 --- [  restartedMain] c.n.s.a.SpringAnnotationScanner          : vehGPSTrajectoryHandler bean listeners added
2023-01-16 10:13:32.709  INFO 1 --- [  restartedMain] c.n.s.a.SpringAnnotationScanner          : wirelessOpLogHandler bean listeners added
2023-01-16 10:13:32.715  INFO 1 --- [  restartedMain] c.n.s.a.SpringAnnotationScanner          : wirelessSecurityHandler bean listeners added
2023-01-16 10:13:33.786  INFO 1 --- [ntLoopGroup-3-1] c.n.socketio.handler.AuthorizeHandler    : channel active 65c277be-ed56-496a-9a3f-7243b1e7adff
2023-01-16 10:13:33.786  INFO 1 --- [ntLoopGroup-3-2] c.n.socketio.handler.AuthorizeHandler    : channel active f9f1acf4-ada2-4590-b949-46e0214e879b
2023-01-16 10:13:34.263  INFO 1 --- [ntLoopGroup-3-1] c.h.i.p.impl.PartitionStateManager       : [172.18.0.14]:5701 [dev] [4.2.4] Initializing cluster partition table arrangement...
2023-01-16 10:13:34.583  INFO 1 --- [ntLoopGroup-3-1] c.n.unit.agent.ControllerAgentServer     : onConnect -- client = 172.16.1.93 Port=39558 unitId:93
2023-01-16 10:13:34.583  INFO 1 --- [ntLoopGroup-3-2] c.n.unit.agent.ControllerAgentServer     : onConnect -- client = 172.16.1.107 Port=45152 unitId:107
2023-01-16 10:13:37.960  INFO 1 --- [        Timer-0] c.n.unit.agent.ControllerAgentServer     : Sync signal time ipAddress:172.16.1.93
2023-01-16 10:13:37.960  INFO 1 --- [        Timer-1] c.n.unit.agent.ControllerAgentServer     : Sync signal time ipAddress:172.16.1.107
2023-01-16 10:13:38.637  INFO 1 --- [ntLoopGroup-3-3] c.n.socketio.handler.AuthorizeHandler    : channel active 6dce6405-53af-4914-aa6c-dcbf2860babc
2023-01-16 10:13:38.660  INFO 1 --- [ntLoopGroup-3-3] c.n.unit.agent.ControllerAgentServer     : onConnect -- client = 172.16.1.101 Port=38154 unitId:101
2023-01-16 10:13:41.930  INFO 1 --- [        Timer-4] c.n.unit.agent.ControllerAgentServer     : Sync signal time ipAddress:172.16.1.101
2023-01-16 10:13:42.544  WARN 1 --- [  restartedMain] onConfiguration$FunctionBindingRegistrar : You have defined function definition that does not exist: streamBridge
2023-01-16 10:13:43.942  INFO 1 --- [ntLoopGroup-3-1] c.n.socketio.protocol.PacketDecoder      : Rcv Signal Machine IP:172.16.1.93
2023-01-16 10:13:43.942  INFO 1 --- [ntLoopGroup-3-2] c.n.socketio.protocol.PacketDecoder      : Rcv Signal Machine IP:172.16.1.107
2023-01-16 10:13:43.942  INFO 1 --- [ntLoopGroup-3-3] c.n.socketio.protocol.PacketDecoder      : Rcv Signal Machine IP:172.16.1.101
2023-01-16 10:13:43.944  INFO 1 --- [ntLoopGroup-3-3] c.n.u.a.handler.SignalIPParamHandler     : rcv:172.16.1.101
2023-01-16 10:13:43.945  INFO 1 --- [ntLoopGroup-3-2] c.n.u.a.handler.SignalIPParamHandler     : rcv:172.16.1.107
2023-01-16 10:13:43.945  INFO 1 --- [ntLoopGroup-3-1] c.n.u.a.handler.SignalIPParamHandler     : rcv:172.16.1.93
2023-01-16 10:13:47.039  INFO 1 --- [  restartedMain] org.jboss.threads                        : JBoss Threads version 3.1.0.Final
2023-01-16 10:13:47.304  INFO 1 --- [  restartedMain] com.newatc.unit.UnitApp                  : Started UnitApp in 41.426 seconds (JVM running for 44.067)
2023-01-16 10:13:47.319  INFO 1 --- [  restartedMain] com.newatc.unit.UnitApp                  : 
----------------------------------------------------------
	Application 'unit' is running! Access URLs:
	Local: 		http://localhost:8282/
	External: 	http://172.18.0.14:8282/
	当前版本为: 		1.4.2
	代码打包时间为: 		202301060900
	Profile(s): 	[prod, api-docs, no-liquibase]
----------------------------------------------------------
2023-01-16 10:13:47.320  INFO 1 --- [  restartedMain] com.newatc.unit.UnitApp                  : 
----------------------------------------------------------
	Config Server: 	Connected to Consul Server running in Docker
----------------------------------------------------------
  • Este fenómeno de bloqueo de inicio es esporádico. Definitivamente está relacionado con el mensaje enviado por Kafka, pero no es inevitable. Es imposible encontrar el problema comparando el registro de errores con el registro, por lo que tenemos que encontrar otra forma.
  • Dado que también hay impresiones de registro de recepción de mensajes de hardware en el registro de inicio exitoso, me pregunto si hay subprocesos esperando y el propietario de la tarjeta está bloqueado temporalmente, por lo que necesito usar algunos comandos Java integrados para verificar
  • Úselo en la ventana acoplable jstack 1, el resultado indica bash: jstack: command not found, vaya a la carpeta Java y compruebe que no existen tales comandos.
    inserte la descripción de la imagen aquí
  • Para reducir el tamaño del paquete de imágenes, usamos la versión jre de la imagen acoplable del entorno java 11 eclipse-temurin:11-jre-focal(el paquete de imágenes del programa es de aproximadamente 170M), sin algunos comandos java, por lo que debemos reemplazarlo con la versión jdk del eclipse-temurin:11-jdk-focalpaquete de re-imagen (alrededor de 300M) para implementación
  • Después de la implementación, se reprodujo el problema de atasco de inicio. Use jstack 1el comando para ver la situación del subproceso en este momento, y encontró el problema de inmediato Found 1 deadlock.y encontró un subproceso de interbloqueo. El registro específico es el siguiente (se omiten algunos registros):
I have no name!@315764d2cd4b:/$ jstack 1
2023-01-16 11:39:57
Full thread dump OpenJDK 64-Bit Server VM (11.0.17+8 mixed mode, sharing):


JNI global refs: 29, weak refs: 0


Found one Java-level deadlock:
=============================
"restartedMain":
  waiting to lock monitor 0x00007f730406bb00 (object 0x00000000e34c2160, a org.springframework.cloud.stream.binder.DefaultBinderFactory),
  which is held by "nioEventLoopGroup-3-2"
"nioEventLoopGroup-3-2":
  waiting to lock monitor 0x00007f725c019500 (object 0x00000000e1516e80, a java.util.concurrent.ConcurrentHashMap),
  which is held by "restartedMain"

Java stack information for the threads listed above:
===================================================
"restartedMain":
	at org.springframework.cloud.stream.binder.DefaultBinderFactory.getBinder(DefaultBinderFactory.java:129)
	- waiting to lock <0x00000000e34c2160> (a org.springframework.cloud.stream.binder.DefaultBinderFactory)
	at org.springframework.cloud.stream.function.FunctionConfiguration$FunctionToDestinationBinder.determineTargetProtocol(FunctionConfiguration.java:640)
	at org.springframework.cloud.stream.function.FunctionConfiguration$FunctionToDestinationBinder.createFunctionHandler(FunctionConfiguration.java:579)
	at org.springframework.cloud.stream.function.FunctionConfiguration$FunctionToDestinationBinder.bindFunctionToDestinations(FunctionConfiguration.java:562)
	at org.springframework.cloud.stream.function.FunctionConfiguration$FunctionToDestinationBinder.afterPropertiesSet(FunctionConfiguration.java:421)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
	at org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$287/0x00000008401f6040.getObject(Unknown Source)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	- locked <0x00000000e1516e80> (a java.util.concurrent.ConcurrentHashMap)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:953)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
	- locked <0x00000000e10d9e48> (a java.lang.Object)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:740)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:415)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
	at com.newatc.unit.UnitApp.main(UnitApp.java:72)
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0([email protected]/Native Method)
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke([email protected]/NativeMethodAccessorImpl.java:62)
	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke([email protected]/DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke([email protected]/Method.java:566)
	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
"nioEventLoopGroup-3-2":
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:216)
	- waiting to lock <0x00000000e1516e80> (a java.util.concurrent.ConcurrentHashMap)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213)
	at org.springframework.context.event.AbstractApplicationEventMulticaster.retrieveApplicationListeners(AbstractApplicationEventMulticaster.java:264)
	at org.springframework.context.event.AbstractApplicationEventMulticaster.getApplicationListeners(AbstractApplicationEventMulticaster.java:221)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:138)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:427)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378)
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:938)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586)
	- locked <0x00000000e3d686a0> (a java.lang.Object)
	at org.springframework.cloud.stream.binder.DefaultBinderFactory.initializeBinderContextSimple(DefaultBinderFactory.java:471)
	at org.springframework.cloud.stream.binder.DefaultBinderFactory.getBinderInstance(DefaultBinderFactory.java:265)
	at org.springframework.cloud.stream.binder.DefaultBinderFactory.doGetBinder(DefaultBinderFactory.java:223)
	at org.springframework.cloud.stream.binder.DefaultBinderFactory.getBinder(DefaultBinderFactory.java:151)
	- locked <0x00000000e34c2160> (a org.springframework.cloud.stream.binder.DefaultBinderFactory)
	at org.springframework.cloud.stream.binding.BindingService.getBinder(BindingService.java:389)
	at org.springframework.cloud.stream.binding.BindingService.bindProducer(BindingService.java:273)
	at org.springframework.cloud.stream.function.StreamBridge.resolveDestination(StreamBridge.java:282)
	- locked <0x00000000e3453128> (a org.springframework.cloud.stream.function.StreamBridge)
	at org.springframework.cloud.stream.function.StreamBridge.send(StreamBridge.java:210)
	at org.springframework.cloud.stream.function.StreamBridge.send(StreamBridge.java:164)
	at org.springframework.cloud.stream.function.StreamBridge.send(StreamBridge.java:144)
	at com.newatc.unit.agent.ControllerAgentServer.onConnect(ControllerAgentServer.java:184)
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0([email protected]/Native Method)
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke([email protected]/NativeMethodAccessorImpl.java:62)
	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke([email protected]/DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke([email protected]/Method.java:566)
	at com.newatc.socketio.annotation.OnConnectScanner$1.onConnect(OnConnectScanner.java:41)
	at com.newatc.socketio.namespace.Namespace.onConnect(Namespace.java:186)
	at com.newatc.socketio.handler.AuthorizeHandler.connect(AuthorizeHandler.java:151)
	at com.newatc.socketio.handler.AuthorizeHandler.channelActive(AuthorizeHandler.java:90)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:230)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:216)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelActive(AbstractChannelHandlerContext.java:209)
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelActive(DefaultChannelPipeline.java:1398)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:230)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:216)
	at io.netty.channel.DefaultChannelPipeline.fireChannelActive(DefaultChannelPipeline.java:895)
	at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:522)
	at io.netty.channel.AbstractChannel$AbstractUnsafe.access$200(AbstractChannel.java:429)
	at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:486)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:469)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:503)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.lang.Thread.run([email protected]/Thread.java:829)

Found 1 deadlock.
  • Después de leer el registro de la pila, vi subprocesos esperándose unos a otros en punto muerto, que es el problema. El código específico que desencadena el interbloqueo at org.springframework.cloud.stream.function.StreamBridge.send(StreamBridge.java:210)es un problema kafka
  • Encontré el problema, pensando en esperar a que se complete el inicio y luego ejecutar la lógica de envío de mensajes kafka. Agregue una variable pública a la clase de inicio, que es falsa antes del inicio y verdadera después del inicio. Cuando kafka envíe, use esta variable para juzgar

// 启动类UnitApp
	/**
     * 是否启动完成,默认false,启动完成后置true
     */
    public static Boolean START_COMPLETED = false;
    
	public static void main(String[] args) {
    
    
        SpringApplication app = new SpringApplication(UnitApp.class);
        DefaultProfileUtil.addDefaultProfile(app);
        Environment env = app.run(args).getEnvironment();
        logApplicationStartup(env);
        START_COMPLETED = true;
    }

// 使用时
			try {
    
    
                if (streamBridge != null && UnitApp.START_COMPLETED) {
    
    
                    streamBridge.afterSingletonsInstantiated();
                    streamBridge.send(OUTPUT_BINDING_NAME, mapper.writeValueAsString(offlineEventDTO));
                } else {
    
    
                    log.error("streamBridge is null or UnitApp.START_COMPLETED is {}--------!", UnitApp.START_COMPLETED);
                }
            } catch (JsonProcessingException e) {
    
    
                log.error(e.getMessage());
            }
  • problema resuelto

Supongo que te gusta

Origin blog.csdn.net/u010882234/article/details/128716118
Recomendado
Clasificación