| package com.zy.core.cache; | 
|   | 
| 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<Integer, LinkedBlockingQueue<Task>> CRN_EXCHANGE = new ConcurrentHashMap<>(); | 
|     // 输送线mq交换机 | 
|     private static final Map<Integer, ConcurrentLinkedQueue<Task>> DEVP_EXCHANGE = new ConcurrentHashMap<>(); | 
|     // 条码扫描仪mq交换机 | 
|     private static final Map<Integer, ConcurrentLinkedQueue<Task>> BARCODE_EXCHANGE = new ConcurrentHashMap<>(); | 
|     // Led灯 mq交换机 | 
|     private static final Map<Integer, LinkedBlockingQueue<Task>> LED_EXCHANGE = new ConcurrentHashMap<>(); | 
|     // 磅称mq交换机 | 
|     private static final Map<Integer, ConcurrentLinkedQueue<Task>> SCALE_EXCHANGE = new ConcurrentHashMap<>(); | 
|     // 台车mq交换机 | 
|     private static final Map<Integer, ConcurrentLinkedQueue<Task>> CAR_EXCHANGE = new ConcurrentHashMap<>(); | 
|   | 
|     private static final Map<Integer, LinkedBlockingQueue<Task>> RGV_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 Rgv: | 
|                 RGV_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 Rgv: | 
|                 return RGV_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 Rgv: | 
|                 return RGV_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 Rgv: | 
|                 return RGV_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 Rgv: | 
|                 RGV_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; | 
|         } | 
|     } | 
|   | 
| } |