package com.zy.core.cache; import com.zy.asrs.utils.CommandUtils; import com.zy.core.Slave; import com.zy.core.enums.SlaveType; import com.zy.core.model.Task; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.LinkedBlockingQueue; /** * 消息队列 * Created by vincent on 2020/8/5 */ public class MessageQueue { // 堆垛机mq交换机 private static final Map> CRN_EXCHANGE = new ConcurrentHashMap<>(); // 输送线mq交换机 private static final Map> DEVP_EXCHANGE = new ConcurrentHashMap<>(); // 条码扫描仪mq交换机 private static final Map> BARCODE_EXCHANGE = new ConcurrentHashMap<>(); // Led灯 mq交换机 private static final Map> LED_EXCHANGE = new ConcurrentHashMap<>(); // 磅称mq交换机 private static final Map> SCALE_EXCHANGE = new ConcurrentHashMap<>(); // 台车mq交换机 private static final Map> CAR_EXCHANGE = new ConcurrentHashMap<>(); /** * mq 交换机初始化 */ public static void init(SlaveType type, Slave slave) { switch (type) { case Crn: CRN_EXCHANGE.put(slave.getId(), new LinkedBlockingQueue<>(1)); break; case Devp: DEVP_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>()); break; case Barcode: BARCODE_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>()); break; case Led: LED_EXCHANGE.put(slave.getId(), new LinkedBlockingQueue<>(1)); break; case Scale: SCALE_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>()); break; case Car: CAR_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>()); break; default: break; } } /** * 添加元素 * 如果发现队列已满无法添加的话,会直接返回false。 */ public static boolean offer(SlaveType type, Integer id, Task task) { switch (type) { case Crn: return CRN_EXCHANGE.get(id).offer(task); case Devp: return DEVP_EXCHANGE.get(id).offer(task); case Barcode: return BARCODE_EXCHANGE.get(id).offer(task); case Led: return LED_EXCHANGE.get(id).offer(task); case Scale: return SCALE_EXCHANGE.get(id).offer(task); case Car: return CAR_EXCHANGE.get(id).offer(task); default: return false; } } /** * 移除元素 * 若队列为空,返回null。 */ public static Task poll(SlaveType type, Integer id) { switch (type) { case Crn: return CRN_EXCHANGE.get(id).poll(); case Devp: return DEVP_EXCHANGE.get(id).poll(); case Barcode: return BARCODE_EXCHANGE.get(id).poll(); case Led: return LED_EXCHANGE.get(id).poll(); case Scale: return SCALE_EXCHANGE.get(id).poll(); case Car: return CAR_EXCHANGE.get(id).poll(); default: return null; } } /** * 取出元素,并不删除. */ public static Task peek(SlaveType type, Integer id) { switch (type) { case Crn: return CRN_EXCHANGE.get(id).peek(); case Devp: return DEVP_EXCHANGE.get(id).peek(); case Barcode: return BARCODE_EXCHANGE.get(id).peek(); case Led: return LED_EXCHANGE.get(id).peek(); case Scale: return SCALE_EXCHANGE.get(id).peek(); case Car: return CAR_EXCHANGE.get(id).peek(); default: return null; } } public static void clear(SlaveType type, Integer id){ switch (type) { case Crn: CRN_EXCHANGE.get(id).clear(); break; case Devp: DEVP_EXCHANGE.get(id).clear(); break; case Barcode: BARCODE_EXCHANGE.get(id).clear(); break; case Led: LED_EXCHANGE.get(id).clear(); break; case Scale: SCALE_EXCHANGE.get(id).clear(); break; case Car: CAR_EXCHANGE.get(id).clear(); break; default: break; } } }