Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

perf: 执行引擎处理步骤启动事件异常时的日志优化 #3392

Open
jsonwan opened this issue Jan 20, 2025 · 2 comments
Open

perf: 执行引擎处理步骤启动事件异常时的日志优化 #3392

jsonwan opened this issue Jan 20, 2025 · 2 comments
Labels
backlog 需求初始状态,等待产品进行评估 kind/enhancement 功能改进特性

Comments

@jsonwan
Copy link
Collaborator

jsonwan commented Jan 20, 2025

MQ升配(2节点,下掉一个低配节点再上线一个高配节点)过程中,未ACK的消息被重放导致较多错误日志:

Image

程序处理过程中抛出以下异常:
异常1:

[2025-01-20 16:40:03.153] ERROR [job-execute,34d3e5eb1f62ba364e270f7fb8df3b3c,e23cd25a5954520c] 6 --- [step.service.job.execute-1308] c.t.b.j.e.e.l.GseStepEventHandler        : Handling step event error,stepInstanceId:20252498607

org.jooq.exception.DataAccessException: SQL [insert into `job_execute`.`gse_task` (`id`, `step_instance_id`, `execute_count`, `batch`, `start_time`, `end_time`, `total_time`, `status`, `gse_task_id`, `task_instance_id`) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]; Duplicate entry '20252498607-0-0' for key 'uk_step_id_execute_count_batch'
	at org.jooq_3.14.8.MYSQL.debug(Unknown Source)
	at org.jooq.impl.Tools.translate(Tools.java:2903)
	at org.jooq.impl.DefaultExecuteContext.sqlException(DefaultExecuteContext.java:757)
	at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:389)
	at org.jooq.impl.InsertImpl.fetchOne(InsertImpl.java:1090)
	at com.tencent.bk.job.execute.dao.impl.GseTaskDAOImpl.saveGseTask(GseTaskDAOImpl.java:135)
	at com.tencent.bk.job.execute.dao.impl.GseTaskDAOImpl$$FastClassBySpringCGLIB$$5ed7d42d.invoke(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
	at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708)
	at com.tencent.bk.job.execute.dao.impl.GseTaskDAOImpl$$EnhancerBySpringCGLIB$$857fe0a5.saveGseTask(<generated>)
	at com.tencent.bk.job.execute.service.impl.GseTaskServiceImpl.saveGseTask(GseTaskServiceImpl.java:54)
	at com.tencent.bk.job.execute.engine.listener.GseStepEventHandler.saveInitialGseTask(GseStepEventHandler.java:262)
	at com.tencent.bk.job.execute.engine.listener.GseStepEventHandler.startStep(GseStepEventHandler.java:185)
	at com.tencent.bk.job.execute.engine.listener.GseStepEventHandler.handleEvent(GseStepEventHandler.java:110)
	at com.tencent.bk.job.execute.engine.listener.StepListener.dispatchEvent(StepListener.java:84)
	at com.tencent.bk.job.execute.engine.listener.StepListener.handleEvent(StepListener.java:69)
	at com.tencent.bk.job.execute.engine.listener.BaseJobMqListener.onEvent(BaseJobMqListener.java:43)
	at org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry$FunctionInvocationWrapper.invokeConsumer(SimpleFunctionRegistry.java:1008)
	at org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry$FunctionInvocationWrapper.doApply(SimpleFunctionRegistry.java:743)
	at org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry$FunctionInvocationWrapper.apply(SimpleFunctionRegistry.java:589)
	at org.springframework.cloud.sleuth.instrument.messaging.TraceFunctionAroundWrapper.nonReactorStream(TraceFunctionAroundWrapper.java:336)
	at org.springframework.cloud.sleuth.instrument.messaging.TraceFunctionAroundWrapper.doApply(TraceFunctionAroundWrapper.java:108)
	at org.springframework.cloud.function.context.catalog.FunctionAroundWrapper.apply(FunctionAroundWrapper.java:47)
	at org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry$1.doApply(SimpleFunctionRegistry.java:284)
	at org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry$FunctionInvocationWrapper.apply(SimpleFunctionRegistry.java:589)
	at org.springframework.cloud.stream.function.PartitionAwareFunctionWrapper.apply(PartitionAwareFunctionWrapper.java:84)
	at org.springframework.cloud.stream.function.FunctionConfiguration$FunctionWrapper.apply(FunctionConfiguration.java:791)
	at org.springframework.cloud.stream.function.FunctionConfiguration$FunctionToDestinationBinder$1.handleMessageInternal(FunctionConfiguration.java:623)
	at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:56)
	at org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:115)
	at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:133)
	at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:106)
	at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:72)
	at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:317)
	at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:272)
	at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:187)
	at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:166)
	at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:47)
	at org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:109)
	at org.springframework.integration.endpoint.MessageProducerSupport.sendMessage(MessageProducerSupport.java:216)
	at org.springframework.integration.amqp.inbound.AmqpInboundChannelAdapter.access$1300(AmqpInboundChannelAdapter.java:69)
	at org.springframework.integration.amqp.inbound.AmqpInboundChannelAdapter$Listener.lambda$onMessage$0(AmqpInboundChannelAdapter.java:374)
	at org.springframework.retry.support.RetryTemplate.doExecute(RetryTemplate.java:329)
	at org.springframework.retry.support.RetryTemplate.execute(RetryTemplate.java:225)
	at org.springframework.integration.amqp.inbound.AmqpInboundChannelAdapter$Listener.onMessage(AmqpInboundChannelAdapter.java:370)
	at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:1670)
	at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.actualInvokeListener(AbstractMessageListenerContainer.java:1589)
	at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:1577)
	at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:1568)
	at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:1512)
	at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:994)
	at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:941)
	at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$1600(SimpleMessageListenerContainer.java:85)
	at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.mainLoop(SimpleMessageListenerContainer.java:1319)
	at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1225)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '20252498607-0-0' for key 'uk_step_id_execute_count_batch'
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:117)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:916)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1061)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1009)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1320)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:994)
	at io.opentelemetry.instrumentation.jdbc.internal.OpenTelemetryStatement.wrapCall(OpenTelemetryStatement.java:294)
	at io.opentelemetry.instrumentation.jdbc.internal.OpenTelemetryPreparedStatement.executeUpdate(OpenTelemetryPreparedStatement.java:65)
	at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)
	at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java)
	at org.jooq.tools.jdbc.DefaultPreparedStatement.executeUpdate(DefaultPreparedStatement.java:104)
	at org.jooq.impl.AbstractDMLQuery.executeReturningGeneratedKeysFetchAdditionalRows(AbstractDMLQuery.java:1188)
	at org.jooq.impl.AbstractDMLQuery.execute(AbstractDMLQuery.java:1032)
	at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:375)
	... 58 common frames omitted

异常2:

java.lang.NullPointerException: null
	at com.tencent.bk.job.execute.engine.listener.AbstractStepEventHandler.finishStep(AbstractStepEventHandler.java:77)
	at com.tencent.bk.job.execute.engine.listener.AbstractStepEventHandler.finishStepWithAbnormalState(AbstractStepEventHandler.java:71)
	at com.tencent.bk.job.execute.engine.listener.GseStepEventHandler.finishStepWithAbnormalState(GseStepEventHandler.java:847)
	at com.tencent.bk.job.execute.engine.listener.AbstractStepEventHandler.safelyFinishStepWhenCaughtException(AbstractStepEventHandler.java:61)
	at com.tencent.bk.job.execute.engine.listener.GseStepEventHandler.handleEvent(GseStepEventHandler.java:148)
	at com.tencent.bk.job.execute.engine.listener.StepListener.dispatchEvent(StepListener.java:84)
	at com.tencent.bk.job.execute.engine.listener.StepListener.handleEvent(StepListener.java:69)
	at com.tencent.bk.job.execute.engine.listener.BaseJobMqListener.onEvent(BaseJobMqListener.java:43)
	at org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry$FunctionInvocationWrapper.invokeConsumer(SimpleFunctionRegistry.java:1008)
	at org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry$FunctionInvocationWrapper.doApply(SimpleFunctionRegistry.java:743)
	at org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry$FunctionInvocationWrapper.apply(SimpleFunctionRegistry.java:589)
	at org.springframework.cloud.sleuth.instrument.messaging.TraceFunctionAroundWrapper.nonReactorStream(TraceFunctionAroundWrapper.java:336)
	at org.springframework.cloud.sleuth.instrument.messaging.TraceFunctionAroundWrapper.doApply(TraceFunctionAroundWrapper.java:108)
	at org.springframework.cloud.function.context.catalog.FunctionAroundWrapper.apply(FunctionAroundWrapper.java:47)
	at org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry$1.doApply(SimpleFunctionRegistry.java:284)
	at org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry$FunctionInvocationWrapper.apply(SimpleFunctionRegistry.java:589)
	at org.springframework.cloud.stream.function.PartitionAwareFunctionWrapper.apply(PartitionAwareFunctionWrapper.java:84)
	at org.springframework.cloud.stream.function.FunctionConfiguration$FunctionWrapper.apply(FunctionConfiguration.java:791)
	at org.springframework.cloud.stream.function.FunctionConfiguration$FunctionToDestinationBinder$1.handleMessageInternal(FunctionConfiguration.java:623)
	at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:56)
	at org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:115)
	at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:133)
	at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:106)
	at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:72)
	at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:317)
	at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:272)
	at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:187)
	at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:166)
	at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:47)
	at org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:109)
	at org.springframework.integration.endpoint.MessageProducerSupport.sendMessage(MessageProducerSupport.java:216)
	at org.springframework.integration.amqp.inbound.AmqpInboundChannelAdapter.access$1300(AmqpInboundChannelAdapter.java:69)
	at org.springframework.integration.amqp.inbound.AmqpInboundChannelAdapter$Listener.lambda$onMessage$0(AmqpInboundChannelAdapter.java:374)
	at org.springframework.retry.support.RetryTemplate.doExecute(RetryTemplate.java:329)
	at org.springframework.retry.support.RetryTemplate.execute(RetryTemplate.java:225)
	at org.springframework.integration.amqp.inbound.AmqpInboundChannelAdapter$Listener.onMessage(AmqpInboundChannelAdapter.java:370)
	at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:1670)
	at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.actualInvokeListener(AbstractMessageListenerContainer.java:1589)
	at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:1577)
	at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:1568)
	at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:1512)
	at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:994)
	at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:941)
	at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$1600(SimpleMessageListenerContainer.java:85)
	at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.mainLoop(SimpleMessageListenerContainer.java:1319)
	at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1225)
	at java.lang.Thread.run(Thread.java:748)

其中异常2为AbstractStepEventHandler.finishStep()中的不正确程序逻辑导致(隐式类型转换null->long),需要优化下。

Image

@jsonwan jsonwan added backlog 需求初始状态,等待产品进行评估 kind/enhancement 功能改进特性 labels Jan 20, 2025
@jsonwan
Copy link
Collaborator Author

jsonwan commented Jan 20, 2025

切换过程中出现的其他异常:

[2025-01-20 16:40:03.462] ERROR [job-execute,489e1a1f2f5bc550e566082f317d1c00,22ef59271b03aeab] 6 --- [task-result-handle-249] c.t.b.j.e.e.r.AbstractResultHandleTask   : [Job:20242590775-GseTask:30250545150:20252498646:0]: result handle error.

org.springframework.messaging.MessageHandlingException: error occurred in message handler [org.springframework.integration.amqp.outbound.AmqpOutboundEndpoint@7c8973fe]; nested exception is org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused (Connection refused)
	at org.springframework.integration.support.utils.IntegrationUtils.wrapInHandlingExceptionIfNecessary(IntegrationUtils.java:191)
	at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:65)
	at org.springframework.cloud.stream.binder.AbstractMessageChannelBinder$SendingHandler.handleMessageInternal(AbstractMessageChannelBinder.java:1105)
	at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:56)
	at org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:115)
	at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:133)
	at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:106)
	at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:72)
	at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:317)
	at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:272)
	at org.springframework.cloud.stream.function.StreamBridge.send(StreamBridge.java:239)
	at org.springframework.cloud.stream.function.StreamBridge.send(StreamBridge.java:171)
	at org.springframework.cloud.stream.function.StreamBridge.send(StreamBridge.java:151)
	at com.tencent.bk.job.execute.engine.listener.event.TaskExecuteMQEventDispatcher.dispatchStepEvent(TaskExecuteMQEventDispatcher.java:72)
	at com.tencent.bk.job.execute.engine.result.AbstractResultHandleTask.finishGseTask(AbstractResultHandleTask.java:548)
	at com.tencent.bk.job.execute.engine.result.AbstractResultHandleTask.execute(AbstractResultHandleTask.java:377)
	at com.tencent.bk.job.execute.engine.result.ScheduledContinuousResultHandleTask.executeTask(ScheduledContinuousResultHandleTask.java:198)
	at com.tencent.bk.job.execute.engine.result.ScheduledContinuousResultHandleTask.doExecute(ScheduledContinuousResultHandleTask.java:152)
	at com.tencent.bk.job.execute.engine.result.ScheduledContinuousResultHandleTask.execute(ScheduledContinuousResultHandleTask.java:126)
	at com.tencent.bk.job.execute.engine.result.ResultHandleManager$TaskWorker.loop(ResultHandleManager.java:467)
	at com.tencent.bk.job.execute.engine.result.ResultHandleManager$TaskWorker.run(ResultHandleManager.java:444)
	at java.lang.Thread.run(Thread.java:748)
Caused by: org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused (Connection refused)
	at org.springframework.amqp.rabbit.support.RabbitExceptionTranslator.convertRabbitAccessException(RabbitExceptionTranslator.java:61)
	at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:602)
	at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:725)
	at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.createConnection(ConnectionFactoryUtils.java:249)
	at org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:2180)
	at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:2153)
	at org.springframework.amqp.rabbit.core.RabbitTemplate.send(RabbitTemplate.java:1072)
	at org.springframework.integration.amqp.outbound.AmqpOutboundEndpoint.doRabbitSend(AmqpOutboundEndpoint.java:250)
	at org.springframework.integration.amqp.outbound.AmqpOutboundEndpoint.send(AmqpOutboundEndpoint.java:231)
	at org.springframework.integration.amqp.outbound.AmqpOutboundEndpoint.handleRequestMessage(AmqpOutboundEndpoint.java:180)
	at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:136)
	at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:56)
	... 20 common frames omitted
Caused by: java.net.ConnectException: Connection refused (Connection refused)
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:607)
	at com.rabbitmq.client.impl.SocketFrameHandlerFactory.create(SocketFrameHandlerFactory.java:60)
	at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1223)
	at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1173)
	at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.connectAddresses(AbstractConnectionFactory.java:640)
	at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.connect(AbstractConnectionFactory.java:615)
	at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:565)
	... 30 common frames omitted

@jsonwan
Copy link
Collaborator Author

jsonwan commented Jan 20, 2025

遇到Duplicate entry的异常应当忽略而非将任务置为异常状态,因为消息已经被其他实例消费过一次了,可能正在执行中。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backlog 需求初始状态,等待产品进行评估 kind/enhancement 功能改进特性
Projects
None yet
Development

No branches or pull requests

1 participant