package com.bw.edgeagent.util; import com.bw.edgeagent.entity.PlayNetAudioVo; import io.quarkus.logging.Log; import org.junit.jupiter.api.Test; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue; /** * @Author MXF * @Description 队列消息工具类 * @Date 2024/5/20 17:35 */ public class QueueUtil<T> { public LinkedBlockingQueue<T> queue = new LinkedBlockingQueue<T>(5000); public static ExecutorService executorService = Executors.newCachedThreadPool(); /** * @Author MXF * @Description 事件生产者处理线程 * @Date 2023/10/8 18:34 */ public class EventMessageProducer implements Runnable { private BlockingQueue<T> queue; private T pushData; public EventMessageProducer(BlockingQueue<T> queue, T pushData) { this.queue = queue; this.pushData = pushData; } @Override public void run() { try { System.out.println("生产者->智能事件信息:" + pushData); queue.put(pushData); } catch (InterruptedException e) { e.printStackTrace(); } } } /** * @Author mxf * @Description 事件消费者处理线程 * @Date 2023/10/8 18:55 **/ public class EventMessageConsumer implements Runnable { private BlockingQueue<T> queue; public EventMessageConsumer(BlockingQueue<T> queue) { this.queue = queue; } @Override public void run() { while (true) { System.out.println("等待消息中------------"); try { T pushData = queue.take(); System.out.println("消费者->消费事件信息:" + pushData); } catch (InterruptedException e) { e.printStackTrace(); Log.errorf("消息数据获取异常:%s", e); } System.out.println("消息处理完成------------"); } } } public void addQueue(T pushData){ QueueUtil.executorService.submit(new EventMessageProducer(queue, pushData)); } @Test public void test() { //启动消费者线程 executorService.submit(new EventMessageConsumer(queue)); String data = "{\"mid\":1715844818138,\"deviceId\":\"66445c727bd1b5509c164110\",\"timestamp\":1715844818138,\"expire\":-1,\"type\":\"CMD_TOPO_UPDATE\",\"param\":{\"nodeStatuses\":[{\"deviceId\":\"66445c727bd1b5509c164110\",\"status\":\"OFFLINE\"}]}}"; PlayNetAudioVo vo = new PlayNetAudioVo(); vo.setNetUrl("http://test.com/test.mp3"); addQueue((T) vo); } }
JAVA简单消息队列工具类
最新推荐文章于 2024-10-01 08:06:48 发布