新增mq延迟队列;新增任务超时处理
							parent
							
								
									1746e021f5
								
							
						
					
					
						commit
						97deaec85f
					
				| @ -1,43 +1,69 @@ | ||||
| package com.glxp.api.config.rabbit; | ||||
| 
 | ||||
| import org.springframework.amqp.core.Binding; | ||||
| import org.springframework.amqp.core.BindingBuilder; | ||||
| import org.springframework.amqp.core.Queue; | ||||
| import org.springframework.amqp.core.TopicExchange; | ||||
| import org.springframework.amqp.core.*; | ||||
| import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| 
 | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
| 
 | ||||
| 
 | ||||
| @Configuration | ||||
| public class TopicRabbitConfig { | ||||
|     //绑定键
 | ||||
|     public final static String common = "topic.common"; | ||||
|     public final static String trace = "topic.trace"; | ||||
|     public final static String delaytrace = "local.trace.delay"; | ||||
| 
 | ||||
| 
 | ||||
|     @Bean | ||||
|     public Queue firstQueue() { | ||||
|     public Queue traceQueue() { | ||||
|         return new Queue(TopicRabbitConfig.trace); | ||||
|     } | ||||
| 
 | ||||
|     @Bean | ||||
|     public Queue secondQueue() { | ||||
|     public Queue commonQueue() { | ||||
|         return new Queue(TopicRabbitConfig.common); | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     @Bean | ||||
|     public Queue traceDelayQueue() { | ||||
|         return QueueBuilder | ||||
|                 .durable(delaytrace) | ||||
|                 .build(); | ||||
|     } | ||||
| 
 | ||||
|     @Bean | ||||
|     TopicExchange exchange() { | ||||
|         return new TopicExchange("topicExchange"); | ||||
|     } | ||||
| 
 | ||||
|     @Bean | ||||
|     public Exchange traceDelayExchange() { | ||||
|         Map<String, Object> args = new HashMap<>(1); | ||||
|         args.put("x-delayed-type", "topic"); | ||||
|         return new CustomExchange("local.trace.delay.exchange", "x-delayed-message", true, false, args); | ||||
|     } | ||||
| 
 | ||||
|     @Bean | ||||
|     Binding bindingExchangeMessage() { | ||||
|         return BindingBuilder.bind(firstQueue()).to(exchange()).with(trace); | ||||
|         return BindingBuilder.bind(traceQueue()).to(exchange()).with(trace); | ||||
|     } | ||||
| 
 | ||||
|     @Bean | ||||
|     Binding bindingExchangeMessage2() { | ||||
|         return BindingBuilder.bind(secondQueue()).to(exchange()).with("topic.#"); | ||||
|         return BindingBuilder.bind(commonQueue()).to(exchange()).with("topic.#"); | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     @Bean | ||||
|     public Binding orderBinding(Queue traceDelayQueue, Exchange traceDelayExchange) { | ||||
|         return BindingBuilder | ||||
|                 .bind(traceDelayQueue) | ||||
|                 .to(traceDelayExchange) | ||||
|                 .with("trace.delay.*") | ||||
|                 .noargs(); | ||||
| 
 | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -1,21 +1,48 @@ | ||||
| package com.glxp.api.task.mq; | ||||
| 
 | ||||
| import com.glxp.api.config.rabbit.TopicRabbitConfig; | ||||
| import com.glxp.api.entity.trace.MqTaskDelayMessage; | ||||
| import com.glxp.api.entity.trace.MqTraceMessage; | ||||
| import com.glxp.api.entity.trace.TraceTaskNoticeEntity; | ||||
| import com.glxp.api.service.trace.TraceTaskNoticeService; | ||||
| import lombok.extern.slf4j.Slf4j; | ||||
| import org.springframework.amqp.rabbit.annotation.RabbitHandler; | ||||
| import org.springframework.amqp.rabbit.annotation.RabbitListener; | ||||
| import org.springframework.stereotype.Component; | ||||
| 
 | ||||
| import javax.annotation.Resource; | ||||
| import java.util.Date; | ||||
| 
 | ||||
| @Slf4j | ||||
| @Component | ||||
| 
 | ||||
| public class TraceSearchReceiver { | ||||
| 
 | ||||
| 
 | ||||
|     @Resource | ||||
|     TraceTaskNoticeService taskNoticeService; | ||||
| 
 | ||||
|     @RabbitHandler | ||||
|     @RabbitListener(queues = "topic.trace") | ||||
|     @RabbitListener(queues = TopicRabbitConfig.trace) | ||||
|     public void traceReceiver(MqTraceMessage mqTraceMessage) { | ||||
|         System.out.println("topic.trace消费者收到消息  : " + mqTraceMessage.toString()); | ||||
| 
 | ||||
|         log.info("追随查询任务" + mqTraceMessage.toString()); | ||||
|         //todo  测试用
 | ||||
|     } | ||||
| 
 | ||||
|     @RabbitListener(queues = TopicRabbitConfig.delaytrace) | ||||
|     public void traceDeleyReceiver(MqTaskDelayMessage mqTaskDelayMessage) { | ||||
| 
 | ||||
|         if (mqTaskDelayMessage.getTaskStatus() == 1 || mqTaskDelayMessage.getTaskStatus() == 2) { | ||||
|             log.info(mqTaskDelayMessage.getTaskId() + ":任务超时未处理,更改状态为超时异常"); | ||||
|             TraceTaskNoticeEntity taskNoticeEntity = taskNoticeService.getById(mqTaskDelayMessage.getTaskId()); | ||||
|             taskNoticeEntity.setStatus(4); | ||||
|             taskNoticeEntity.setUpdateTime(new Date()); | ||||
|             taskNoticeService.updateById(taskNoticeEntity); | ||||
|         } else if (mqTaskDelayMessage.getTaskStatus() == 3) { | ||||
|             log.info(mqTaskDelayMessage.getTaskId() + ":任务已完成,过期删除"); | ||||
|             taskNoticeService.removeById(mqTaskDelayMessage.getTaskId()); | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | ||||
					Loading…
					
					
				
		Reference in New Issue