src/main/java/com/zy/core/ServerBootstrap.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/cache/MessageQueue.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/channel/TestController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/model/Task.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/thread/CrnThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/core/ServerBootstrap.java
@@ -1,6 +1,7 @@ package com.zy.core; import com.core.common.Cools; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.SlaveType; import com.zy.core.properties.SlaveProperties; @@ -26,10 +27,34 @@ @PostConstruct public void init(){ // 初始化消息队列 initMq(); // 初始化下位机线程 initThread(); } private void initMq(){ // 初始化堆垛机mq for (Slave crn : slaveProperties.getCrn()) { MessageQueue.init(SlaveType.Crn, crn); } // 初始化输送线mq for (Slave devp : slaveProperties.getDevp()) { MessageQueue.init(SlaveType.Devp, devp); } // 初始化条码扫描仪mq for (Slave barcode : slaveProperties.getBarcode()) { MessageQueue.init(SlaveType.Barcode, barcode); } // 初始化Led灯mq for (Slave led : slaveProperties.getLed()) { MessageQueue.init(SlaveType.Led, led); } // 初始化磅称mq for (Slave scale : slaveProperties.getScale()) { MessageQueue.init(SlaveType.Scale, scale); } } private void initThread(){ // 初始化堆垛机线程 @@ -43,6 +68,7 @@ for (Slave devo : slaveProperties.getDevp()) { DevpThread devpThread = new DevpThread(devo); new Thread(devpThread).start(); SlaveConnection.put(SlaveType.Devp, devo.getId(), devpThread); } } src/main/java/com/zy/core/cache/MessageQueue.java
New file @@ -0,0 +1,96 @@ package com.zy.core.cache; import com.zy.core.Slave; import com.zy.core.ThreadHandler; 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; /** * 消息队列 * Created by vincent on 2020/8/5 */ public class MessageQueue { // 堆垛机mq交换机 private static final Map<Integer, ConcurrentLinkedQueue<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, ConcurrentLinkedQueue<Task>> LED_EXCHANGE = new ConcurrentHashMap<>(); // 磅称mq交换机 private static final Map<Integer, ConcurrentLinkedQueue<Task>> SCALE_EXCHANGE = new ConcurrentHashMap<>(); /** * mq 交换机初始化 **/ public static void init(SlaveType type, Slave slave) { switch (type) { case Crn: CRN_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>()); 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 ConcurrentLinkedQueue<>()); break; case Scale: SCALE_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); 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(); default: return null; } } } src/main/java/com/zy/core/channel/TestController.java
New file @@ -0,0 +1,22 @@ package com.zy.core.channel; import com.zy.core.cache.MessageQueue; import com.zy.core.model.Task; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * Created by vincent on 2020/8/5 */ @RestController public class TestController { @RequestMapping("/test") public String test(){ Task task = new Task(); task.setId(1); MessageQueue.CRN_QUE.offer(task); return "ok"; } } src/main/java/com/zy/core/model/Task.java
New file @@ -0,0 +1,13 @@ package com.zy.core.model; import lombok.Data; /** * Created by vincent on 2020/8/5 */ @Data public class Task { private int id; } src/main/java/com/zy/core/thread/CrnThread.java
@@ -2,13 +2,20 @@ import com.zy.core.Slave; import com.zy.core.ThreadHandler; import com.zy.core.cache.MessageQueue; import com.zy.core.model.Task; import lombok.Data; import lombok.extern.slf4j.Slf4j; /** * Created by vincent on 2020/8/4 */ @Slf4j @Data public class CrnThread implements Runnable, ThreadHandler { private Slave slave; private int distance; public CrnThread(Slave slave) { this.slave = slave; @@ -20,12 +27,17 @@ while (true) { try { System.out.println("线程"+slave.getId()+"正在运行"); Task task = MessageQueue.CRN_QUE.poll(); if (task == null) { System.out.println("无任务"); } else { System.out.println("任务"+task.getId()); } Thread.sleep(1000); Thread.sleep(3000); } catch (Exception e) { e.printStackTrace(); } src/main/resources/application.yml
@@ -40,14 +40,10 @@ id: 1 ip: 192.168.1.1 port: 8888 crn[1]: id: 2 ip: 192.168.1.1 port: 8888 crn[2]: id: 3 ip: 192.168.1.1 port: 8888 # crn[1]: # id: 2 # ip: 192.168.1.1 # port: 8888 # 站点 devp[0]: id: 1