Merge branch 'master' of https://gitee.com/caixiangc/dc
Conflicts: src/main/java/com/qgs/dc/mq/configuration/ConfigOfPID10_1.java src/main/java/com/qgs/dc/mq/consumer/PID10_1Received.java
This commit is contained in:
		| @@ -1,5 +1,6 @@ | |||||||
| package com.qgs.dc.common.utils; | package com.qgs.dc.common.utils; | ||||||
|  |  | ||||||
|  |  | ||||||
| import com.alibaba.fastjson.JSON; | import com.alibaba.fastjson.JSON; | ||||||
| import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||||
| import com.qgs.dc.mq.entity.MQMessage; | import com.qgs.dc.mq.entity.MQMessage; | ||||||
| @@ -11,6 +12,9 @@ import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.*; | |||||||
| import org.springframework.messaging.Message; | import org.springframework.messaging.Message; | ||||||
|  |  | ||||||
| import java.io.File; | import java.io.File; | ||||||
|  | import java.io.IOException; | ||||||
|  | import java.io.StringWriter; | ||||||
|  | import java.io.Writer; | ||||||
| import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||||
| import java.time.format.DateTimeFormatter; | import java.time.format.DateTimeFormatter; | ||||||
| import java.util.Arrays; | import java.util.Arrays; | ||||||
| @@ -153,12 +157,97 @@ public class CommonFunction { | |||||||
|      */ |      */ | ||||||
|     public static MQMessage parse(Message<?> message){ |     public static MQMessage parse(Message<?> message){ | ||||||
|         byte[] bytes =(byte[]) message.getPayload(); |         byte[] bytes =(byte[]) message.getPayload(); | ||||||
|         String s = new String(bytes); |  | ||||||
|         MQMessage mqMessage = JSONObject.parseObject(bytes, MQMessage.class); |         MQMessage mqMessage = JSONObject.parseObject(bytes, MQMessage.class); | ||||||
|         return mqMessage; |         return mqMessage; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     public static String unescapeJava(String str) throws IOException | ||||||
|  |     { | ||||||
|  |         Writer out = new StringWriter(); | ||||||
|  |         if (str != null) | ||||||
|  |         { | ||||||
|  |             int sz = str.length(); | ||||||
|  |             StringBuilder unicode = new StringBuilder(4); | ||||||
|  |             boolean hadSlash = false; | ||||||
|  |             boolean inUnicode = false; | ||||||
|  |  | ||||||
|  |             for (int i = 0; i < sz; ++i) | ||||||
|  |             { | ||||||
|  |                 char ch = str.charAt(i); | ||||||
|  |                 if (inUnicode) | ||||||
|  |                 { | ||||||
|  |                     unicode.append(ch); | ||||||
|  |                     if (unicode.length() == 4) | ||||||
|  |                     { | ||||||
|  |                         try | ||||||
|  |                         { | ||||||
|  |                             int nfe = Integer.parseInt(unicode.toString(), 16); | ||||||
|  |                             out.write((char) nfe); | ||||||
|  |                             unicode.setLength(0); | ||||||
|  |                             inUnicode = false; | ||||||
|  |                             hadSlash = false; | ||||||
|  |                         } | ||||||
|  |                         catch (NumberFormatException var9) | ||||||
|  |                         { | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 else if (hadSlash) | ||||||
|  |                 { | ||||||
|  |                     hadSlash = false; | ||||||
|  |                     switch (ch) | ||||||
|  |                     { | ||||||
|  |                         case '\"': | ||||||
|  |                             out.write(34); | ||||||
|  |                             break; | ||||||
|  |                         case '\'': | ||||||
|  |                             out.write(39); | ||||||
|  |                             break; | ||||||
|  |                         case '\\': | ||||||
|  |                             out.write(92); | ||||||
|  |                             break; | ||||||
|  |                         case 'b': | ||||||
|  |                             out.write(8); | ||||||
|  |                             break; | ||||||
|  |                         case 'f': | ||||||
|  |                             out.write(12); | ||||||
|  |                             break; | ||||||
|  |                         case 'n': | ||||||
|  |                             out.write(10); | ||||||
|  |                             break; | ||||||
|  |                         case 'r': | ||||||
|  |                             out.write(13); | ||||||
|  |                             break; | ||||||
|  |                         case 't': | ||||||
|  |                             out.write(9); | ||||||
|  |                             break; | ||||||
|  |                         case 'u': | ||||||
|  |                             inUnicode = true; | ||||||
|  |                             break; | ||||||
|  |                         default: | ||||||
|  |                             out.write(ch); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 else if (ch == 92) | ||||||
|  |                 { | ||||||
|  |                     hadSlash = true; | ||||||
|  |                 } | ||||||
|  |                 else | ||||||
|  |                 { | ||||||
|  |                     out.write(ch); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             if (hadSlash) | ||||||
|  |             { | ||||||
|  |                 out.write(92); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |         } | ||||||
|  |         return out.toString(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 解析body |      * 解析body | ||||||
|   | |||||||
							
								
								
									
										98
									
								
								src/main/java/com/qgs/dc/mq/configuration/ConfigOfPID2.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								src/main/java/com/qgs/dc/mq/configuration/ConfigOfPID2.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,98 @@ | |||||||
|  | package com.qgs.dc.mq.configuration; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | import org.springframework.amqp.core.Binding; | ||||||
|  | import org.springframework.amqp.core.BindingBuilder; | ||||||
|  | import org.springframework.amqp.core.DirectExchange; | ||||||
|  | import org.springframework.amqp.core.Queue; | ||||||
|  | import org.springframework.context.annotation.Bean; | ||||||
|  | import org.springframework.context.annotation.Configuration; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * @Desc: "设备:PID2 相关信息定义" | ||||||
|  |  * @Author: caixiang | ||||||
|  |  * @DATE: 2021/6/7 9:11 | ||||||
|  |  */ | ||||||
|  | @Configuration | ||||||
|  | public class ConfigOfPID2 { | ||||||
|  |  | ||||||
|  |     //水平扩展其他设备的时候 只要:control+R 然后 PID2=>00C  然后replace all | ||||||
|  |     public static final String EQUIPMENT_NAME_PID2 = "PID2"; | ||||||
|  |  | ||||||
|  |     public static final String EXCHANGE_NAME_PID2 = EQUIPMENT_NAME_PID2 +"_Exchange"; | ||||||
|  |     public static final String EAP_REQUEST_QUEUE_PID2 = EQUIPMENT_NAME_PID2 +"_EAP_Request_Queue"; | ||||||
|  |     public static final String EAP_RESPONSE_QUEUE_PID2 = EQUIPMENT_NAME_PID2 +"_EAP_Response_Queue"; | ||||||
|  |     public static final String MES_REQUEST_QUEUE_PID2 = EQUIPMENT_NAME_PID2 +"_MES_Request_Queue"; | ||||||
|  |     public static final String MES_RESPONSE_QUEUE_PID2 = EQUIPMENT_NAME_PID2 +"_MES_Response_Queue"; | ||||||
|  |     public static final String EAP_REQUEST_QUEUE_ROUTINGKEY_PID2 = EQUIPMENT_NAME_PID2 +"_EAP_Request_Queue_RoutingKey"; | ||||||
|  |     public static final String EAP_RESPONSE_QUEUE_ROUTINGKEY_PID2 = EQUIPMENT_NAME_PID2 +"_EAP_Response_Queue_RoutingKey"; | ||||||
|  |     public static final String MES_REQUEST_QUEUE_ROUTINGKEY_PID2 = EQUIPMENT_NAME_PID2 +"_MES_Request_Queue_RoutingKey"; | ||||||
|  |     public static final String MES_RESPONSE_QUEUE_ROUTINGKEY_PID2 = EQUIPMENT_NAME_PID2 +"_MES_Response_Queue_RoutingKey"; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     @Bean | ||||||
|  |     public DirectExchange EXCHANGE_NAME_PID2(){ | ||||||
|  |         return new DirectExchange(EXCHANGE_NAME_PID2); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     //todo | ||||||
|  |     @Bean | ||||||
|  |     public Queue MES_REQUEST_QUEUE_PID2(){ | ||||||
|  |         Queue queue = new Queue(MES_REQUEST_QUEUE_PID2); | ||||||
|  |         queue.addArgument("x-dead-letter-exchange",ConfigOfDeadLetterQueue.EXCHANGE_NAME_DLE); | ||||||
|  |         queue.addArgument("x-dead-letter-routing-key",ConfigOfDeadLetterQueue.Dead_Letter_RoutingKey); | ||||||
|  |         //queue.addArgument("x-max-priority",ConfigOfDeadLetterQueue.MAX_PRIORITY); | ||||||
|  |         return queue; | ||||||
|  |     } | ||||||
|  |     @Bean | ||||||
|  |     public Queue MES_RESPONSE_QUEUE_PID2(){ | ||||||
|  |         Queue queue = new Queue(MES_RESPONSE_QUEUE_PID2); | ||||||
|  |         queue.addArgument("x-dead-letter-exchange",ConfigOfDeadLetterQueue.EXCHANGE_NAME_DLE); | ||||||
|  |         queue.addArgument("x-dead-letter-routing-key",ConfigOfDeadLetterQueue.Dead_Letter_RoutingKey); | ||||||
|  |         //queue.addArgument("x-max-priority",ConfigOfDeadLetterQueue.MAX_PRIORITY); | ||||||
|  |         return queue; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     @Bean | ||||||
|  |     public Queue EAP_REQUEST_QUEUE_PID2(){ | ||||||
|  |         Queue queue = new Queue(EAP_REQUEST_QUEUE_PID2); | ||||||
|  |         queue.addArgument("x-dead-letter-exchange",ConfigOfDeadLetterQueue.EXCHANGE_NAME_DLE); | ||||||
|  |         queue.addArgument("x-dead-letter-routing-key",ConfigOfDeadLetterQueue.Dead_Letter_RoutingKey); | ||||||
|  |         //queue.addArgument("x-max-priority",ConfigOfDeadLetterQueue.MAX_PRIORITY); | ||||||
|  |         return queue; | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |     @Bean | ||||||
|  |     public Queue EAP_RESPONSE_QUEUE_PID2(){ | ||||||
|  |         Queue queue = new Queue(EAP_RESPONSE_QUEUE_PID2); | ||||||
|  |         queue.addArgument("x-dead-letter-exchange",ConfigOfDeadLetterQueue.EXCHANGE_NAME_DLE); | ||||||
|  |         queue.addArgument("x-dead-letter-routing-key",ConfigOfDeadLetterQueue.Dead_Letter_RoutingKey); | ||||||
|  |         //queue.addArgument("x-max-priority",ConfigOfDeadLetterQueue.MAX_PRIORITY); | ||||||
|  |         return queue; | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |  | ||||||
|  |     @Bean | ||||||
|  |     public Binding bindExchangeAndQueueA_PID2(){ | ||||||
|  |         return BindingBuilder.bind(EAP_REQUEST_QUEUE_PID2()).to(EXCHANGE_NAME_PID2()) | ||||||
|  |                 .with(EAP_REQUEST_QUEUE_ROUTINGKEY_PID2); | ||||||
|  |     } | ||||||
|  |     @Bean | ||||||
|  |     public Binding bindExchangeAndQueueB_PID2(){ | ||||||
|  |         return BindingBuilder.bind(EAP_RESPONSE_QUEUE_PID2()).to(EXCHANGE_NAME_PID2()) | ||||||
|  |                 .with(EAP_RESPONSE_QUEUE_ROUTINGKEY_PID2); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Bean | ||||||
|  |     public Binding bindExchangeAndQueueC_PID2(){ | ||||||
|  |         return BindingBuilder.bind(MES_REQUEST_QUEUE_PID2()).to(EXCHANGE_NAME_PID2()) | ||||||
|  |                 .with(MES_REQUEST_QUEUE_ROUTINGKEY_PID2); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Bean | ||||||
|  |     public Binding bindExchangeAndQueueD_PID2(){ | ||||||
|  |         return BindingBuilder.bind(MES_RESPONSE_QUEUE_PID2()).to(EXCHANGE_NAME_PID2()) | ||||||
|  |                 .with(MES_RESPONSE_QUEUE_ROUTINGKEY_PID2); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -45,6 +45,7 @@ public class PID00BReceived { | |||||||
|     MQMessageHandler mqMessageHandler; |     MQMessageHandler mqMessageHandler; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     //这个队列监听EAP 推送过来的Event,然后dc 把这个Event 转发给Mes |     //这个队列监听EAP 推送过来的Event,然后dc 把这个Event 转发给Mes | ||||||
|     //need |     //need | ||||||
|     @RabbitListener(queues = ConfigOf00B.EAP_REQUEST_QUEUE_00B) |     @RabbitListener(queues = ConfigOf00B.EAP_REQUEST_QUEUE_00B) | ||||||
| @@ -77,7 +78,6 @@ public class PID00BReceived { | |||||||
|             } |             } | ||||||
|             //2.模拟异常 ,然后 拒签消息 ,然后丢到死信队列 |             //2.模拟异常 ,然后 拒签消息 ,然后丢到死信队列 | ||||||
|  |  | ||||||
|             //throw new Exception("11111"); |  | ||||||
|         }catch (Exception e){ |         }catch (Exception e){ | ||||||
|             // 第一个false 是 不批量签收;第二个false 是 不重回队列 |             // 第一个false 是 不批量签收;第二个false 是 不重回队列 | ||||||
|             logger.error(e.getMessage()); |             logger.error(e.getMessage()); | ||||||
| @@ -143,6 +143,8 @@ public class PID00BReceived { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     //这种情况:指的是 MES发出远程指令,然后eap处理完后,把结果丢到mesResponse队列 通知MES进行收尾处理。 |     //这种情况:指的是 MES发出远程指令,然后eap处理完后,把结果丢到mesResponse队列 通知MES进行收尾处理。 | ||||||
|     @RabbitHandler |     @RabbitHandler | ||||||
|     public void mesResponse(Message<?> message, Channel channel)throws Exception{ |     public void mesResponse(Message<?> message, Channel channel)throws Exception{ | ||||||
|   | |||||||
| @@ -9,8 +9,11 @@ import com.qgs.dc.mq.configuration.ConfigOfPID10_1; | |||||||
| import com.qgs.dc.mq.consumer.commonHandler.MQMessageHandler; | import com.qgs.dc.mq.consumer.commonHandler.MQMessageHandler; | ||||||
| import com.qgs.dc.mq.entity.MQMessage; | import com.qgs.dc.mq.entity.MQMessage; | ||||||
| import com.qgs.dc.mq.entity.common.Header; | import com.qgs.dc.mq.entity.common.Header; | ||||||
|  | import com.qgs.dc.mq.entity.common.Returns; | ||||||
| import com.qgs.dc.mq.entity.specificBody.QueryEQStatusBody; | import com.qgs.dc.mq.entity.specificBody.QueryEQStatusBody; | ||||||
|  | import com.qgs.dc.mq.producer.component.RabbitSender; | ||||||
| import com.rabbitmq.client.Channel; | import com.rabbitmq.client.Channel; | ||||||
|  | import com.rabbitmq.client.Return; | ||||||
| import org.slf4j.Logger; | import org.slf4j.Logger; | ||||||
| import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||||
| import org.springframework.amqp.rabbit.annotation.RabbitHandler; | import org.springframework.amqp.rabbit.annotation.RabbitHandler; | ||||||
| @@ -25,18 +28,19 @@ import java.util.ArrayList; | |||||||
| import java.util.List; | import java.util.List; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * @Desc: "PIDPID10_1设备 接收MQ消息 监听类" |  * @Desc: "PID10_1设备 接收MQ消息 监听类" | ||||||
|  * @Author: caixiang |  * @Author: caixiang | ||||||
|  * @DATE: 2021/6/22 15:30 |  * @DATE: 2021/6/22 15:30 | ||||||
|  * |  * | ||||||
|  * Ctrl+R 替换设备名 |  * Ctrl+R 替换设备名 | ||||||
|  */ |  */ | ||||||
| @Component | @Component | ||||||
| public class PID10_1Received { | public class PID10_1Received{ | ||||||
|  |  | ||||||
|     private static final Logger logger = LoggerFactory.getLogger(PID10_1Received.class); |     private static final Logger logger = LoggerFactory.getLogger(PID10_1Received.class); | ||||||
|  |  | ||||||
|  |     @Autowired | ||||||
|  |     RabbitSender rabbitSender; | ||||||
|  |  | ||||||
|     @Autowired |     @Autowired | ||||||
|     MQMessageHandler mqMessageHandler; |     MQMessageHandler mqMessageHandler; | ||||||
| @@ -45,10 +49,10 @@ public class PID10_1Received { | |||||||
|     @RabbitHandler |     @RabbitHandler | ||||||
|     public void eapRequest(Message<?> message, Channel channel)throws Exception{ |     public void eapRequest(Message<?> message, Channel channel)throws Exception{ | ||||||
|  |  | ||||||
|         logger.info("==============received message-EAP_REQUEST_QUEUE_PID10_1=================,priority:"+"equipmentName"+message.getHeaders().get("attr2")); |         logger.info("==============received message-EAP_REQUEST_QUEUE_PID10_1================="); | ||||||
|  |  | ||||||
|         Long deliveryTag = (Long)message.getHeaders().get(AmqpHeaders.DELIVERY_TAG); |         Long deliveryTag = (Long)message.getHeaders().get(AmqpHeaders.DELIVERY_TAG); | ||||||
| //        //MQMessage 中的 transactionId |         //MQMessage 中的 transactionId | ||||||
| //        String transactionId = (String)message.getHeaders().get("spring_returned_message_correlation"); | //        String transactionId = (String)message.getHeaders().get("spring_returned_message_correlation"); | ||||||
| //        //logger.info("transactionId:"+transactionId); | //        //logger.info("transactionId:"+transactionId); | ||||||
|  |  | ||||||
| @@ -56,22 +60,29 @@ public class PID10_1Received { | |||||||
|  |  | ||||||
|             MQMessage mqMessage = CommonFunction.parse(message); |             MQMessage mqMessage = CommonFunction.parse(message); | ||||||
|             String transactionId = mqMessage.getHeader().getTransactionId(); |             String transactionId = mqMessage.getHeader().getTransactionId(); | ||||||
|             //1. 正常情况 |             System.out.println("收到的消息是: "+mqMessage.toString()); | ||||||
|             //Integer integer = mqMessageHandler.requestHandler(message); |             System.out.println(); | ||||||
|             String integer= HttpUtil.post(Constant.mesCallBackUrl,JSONObject.toJSONString(mqMessage)); |             //todo reply | ||||||
|             Integer result = Integer.valueOf(integer); |             reply(mqMessage); | ||||||
|  |  | ||||||
|  | //            //回调给MES --- 开始 | ||||||
|  | //            //1. 正常情况 | ||||||
|  | //            String integer= HttpUtil.post(Constant.mesCallBackUrl,JSONObject.toJSONString(mqMessage)); | ||||||
|  | //            Integer result = Integer.valueOf(integer); | ||||||
|  | // | ||||||
|  | //            //注意 这里特别注意 已经拒收的消息 再签收是要出错的,这里要特别注意。 | ||||||
|  | //            if(result == 1){ | ||||||
|  | //                logger.info("在 EAP_REQUEST_QUEUE_PID4B 队列中,transitionId"+transactionId+", 这条消息处理成功"); | ||||||
|  | //                channel.basicAck(deliveryTag,false); | ||||||
|  | //            }else { | ||||||
|  | //                logger.error("在 EAP_REQUEST_QUEUE_PID4B 队列中,transitionId"+transactionId+" 处理消息的时候 出现异常,然后 拒签消息 ,然后丢到死信队列"); | ||||||
|  | //                channel.basicNack(deliveryTag,false,false); | ||||||
|  | //            } | ||||||
|  | //            //回调给MES --- 结束 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|             //注意 这里特别注意 已经拒收的消息 再签收是要出错的,这里要特别注意。 |  | ||||||
|             if(result == 1){ |  | ||||||
|                 logger.info("在 EAP_REQUEST_QUEUE_PID10_1 队列中,transitionId"+transactionId+", 这条消息处理成功"); |  | ||||||
|             channel.basicAck(deliveryTag,false); |             channel.basicAck(deliveryTag,false); | ||||||
|             }else { |  | ||||||
|                 logger.error("在 EAP_REQUEST_QUEUE_PID10_1 队列中,transitionId"+transactionId+" 处理消息的时候 出现异常,然后 拒签消息 ,然后丢到死信队列"); |  | ||||||
|                 channel.basicNack(deliveryTag,false,false); |  | ||||||
|             } |  | ||||||
|             //2.模拟异常 ,然后 拒签消息 ,然后丢到死信队列 |  | ||||||
|  |  | ||||||
|             //throw new Exception("11111"); |  | ||||||
|         }catch (Exception e){ |         }catch (Exception e){ | ||||||
|             // 第一个false 是 不批量签收;第二个false 是 不重回队列 |             // 第一个false 是 不批量签收;第二个false 是 不重回队列 | ||||||
|             logger.error(e.getMessage()); |             logger.error(e.getMessage()); | ||||||
| @@ -79,10 +90,57 @@ public class PID10_1Received { | |||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public void reply(MQMessage request) throws Exception { | ||||||
|  |         MQMessage response = new MQMessage(); | ||||||
|  |  | ||||||
|  |         Header header = request.getHeader(); | ||||||
|  |         header.setFrom("mes"); | ||||||
|  |         header.setTo("eap"); | ||||||
|  |         header.setMessageType("Response"); | ||||||
|  |         header.setSendTimestamp(CommonFunction.getNowDate(1)); | ||||||
|  |         Returns aReturn = new Returns("0","0"); | ||||||
|  |  | ||||||
|  |         response.setHeader(header); | ||||||
|  |         response.setReturns(aReturn); | ||||||
|  |  | ||||||
|  |         rabbitSender.sendDirect(response,ConfigOfPID10_1.EXCHANGE_NAME_PID10_1,ConfigOfPID10_1.EAP_RESPONSE_QUEUE_ROUTINGKEY_PID10_1); | ||||||
|  |         System.out.println("回复的消息是: "+response.toString()); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | //    @RabbitListener(queues = ConfigOfPID10_1.MES_REQUEST_QUEUE_PID10_1) | ||||||
|  | //    @RabbitHandler | ||||||
|  | //    public void mesRequest(Message<?> message, Channel channel)throws Exception{ | ||||||
|  | // | ||||||
|  | //        logger.info("==============received message-EAP_REQUEST_QUEUE_PID10_1================="); | ||||||
|  | // | ||||||
|  | //        Long deliveryTag = (Long)message.getHeaders().get(AmqpHeaders.DELIVERY_TAG); | ||||||
|  | //        //MQMessage 中的 transactionId | ||||||
|  | ////        String transactionId = (String)message.getHeaders().get("spring_returned_message_correlation"); | ||||||
|  | ////        //logger.info("transactionId:"+transactionId); | ||||||
|  | // | ||||||
|  | //        try { | ||||||
|  | //            System.out.println("message : "+message.toString()); | ||||||
|  | //            MQMessage mqMessage = CommonFunction.parse(message); | ||||||
|  | //            String transactionId = mqMessage.getHeader().getTransactionId(); | ||||||
|  | //            System.out.println("收到的消息是: "+mqMessage.toString()); | ||||||
|  | //            System.out.println(); | ||||||
|  | //            logger.info(mqMessage.toString()); | ||||||
|  | //            channel.basicAck(deliveryTag,false); | ||||||
|  | //            System.out.println(mqMessage.toString()); | ||||||
|  | //        }catch (Exception e){ | ||||||
|  | //            // 第一个false 是 不批量签收;第二个false 是 不重回队列 | ||||||
|  | //            logger.error(e.getMessage()); | ||||||
|  | //            channel.basicNack(deliveryTag,false,false); | ||||||
|  | //            return; | ||||||
|  | //        } | ||||||
|  | // | ||||||
|  | //    } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     public static void main(String[] args) { |     public static void main(String[] args) { | ||||||
|         //localhost:8001 |         //localhost:8001 | ||||||
|   | |||||||
| @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSON; | |||||||
| import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||||
| import com.qgs.dc.common.utils.CommonFunction; | import com.qgs.dc.common.utils.CommonFunction; | ||||||
| import com.qgs.dc.mq.Constant.Constant; | import com.qgs.dc.mq.Constant.Constant; | ||||||
|  | import com.qgs.dc.mq.configuration.ConfigOfPID13S; | ||||||
| import com.qgs.dc.mq.configuration.ConfigOfPID18; | import com.qgs.dc.mq.configuration.ConfigOfPID18; | ||||||
| import com.qgs.dc.mq.consumer.commonHandler.MQMessageHandler; | import com.qgs.dc.mq.consumer.commonHandler.MQMessageHandler; | ||||||
| import com.qgs.dc.mq.entity.MQMessage; | import com.qgs.dc.mq.entity.MQMessage; | ||||||
| @@ -61,6 +62,8 @@ public class PID18Received { | |||||||
|             String integer= HttpUtil.post(Constant.mesCallBackUrl,JSONObject.toJSONString(mqMessage)); |             String integer= HttpUtil.post(Constant.mesCallBackUrl,JSONObject.toJSONString(mqMessage)); | ||||||
|             Integer result = Integer.valueOf(integer); |             Integer result = Integer.valueOf(integer); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|             //注意 这里特别注意 已经拒收的消息 再签收是要出错的,这里要特别注意。 |             //注意 这里特别注意 已经拒收的消息 再签收是要出错的,这里要特别注意。 | ||||||
|             if(result == 1){ |             if(result == 1){ | ||||||
|                 logger.info("在 EAP_REQUEST_QUEUE_PID18 队列中,transitionId"+transactionId+", 这条消息处理成功"); |                 logger.info("在 EAP_REQUEST_QUEUE_PID18 队列中,transitionId"+transactionId+", 这条消息处理成功"); | ||||||
|   | |||||||
							
								
								
									
										167
									
								
								src/main/java/com/qgs/dc/mq/consumer/PID2Received.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										167
									
								
								src/main/java/com/qgs/dc/mq/consumer/PID2Received.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,167 @@ | |||||||
|  | package com.qgs.dc.mq.consumer; | ||||||
|  |  | ||||||
|  | import cn.hutool.http.HttpUtil; | ||||||
|  | import com.alibaba.fastjson.JSON; | ||||||
|  | import com.alibaba.fastjson.JSONObject; | ||||||
|  | import com.qgs.dc.common.utils.CommonFunction; | ||||||
|  | import com.qgs.dc.mq.Constant.Constant; | ||||||
|  | import com.qgs.dc.mq.configuration.ConfigOfPID2; | ||||||
|  | import com.qgs.dc.mq.consumer.commonHandler.MQMessageHandler; | ||||||
|  | import com.qgs.dc.mq.entity.MQMessage; | ||||||
|  | import com.qgs.dc.mq.entity.common.Header; | ||||||
|  | import com.qgs.dc.mq.entity.specificBody.QueryEQStatusBody; | ||||||
|  | import com.rabbitmq.client.Channel; | ||||||
|  | import org.slf4j.Logger; | ||||||
|  | import org.slf4j.LoggerFactory; | ||||||
|  | import org.springframework.amqp.rabbit.annotation.RabbitHandler; | ||||||
|  | import org.springframework.amqp.rabbit.annotation.RabbitListener; | ||||||
|  | import org.springframework.amqp.support.AmqpHeaders; | ||||||
|  | import org.springframework.beans.factory.annotation.Autowired; | ||||||
|  | import org.springframework.messaging.Message; | ||||||
|  | import org.springframework.stereotype.Component; | ||||||
|  |  | ||||||
|  | import java.nio.charset.StandardCharsets; | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * @Desc: "PID2设备 接收MQ消息 监听类" | ||||||
|  |  * @Author: caixiang | ||||||
|  |  * @DATE: 2021/6/22 15:30 | ||||||
|  |  * | ||||||
|  |  * Ctrl+R 替换设备名 | ||||||
|  |  */ | ||||||
|  | @Component | ||||||
|  | public class PID2Received { | ||||||
|  |  | ||||||
|  |     private static final Logger logger = LoggerFactory.getLogger(PID2Received.class); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     @Autowired | ||||||
|  |     MQMessageHandler mqMessageHandler; | ||||||
|  |  | ||||||
|  |     @RabbitListener(queues = ConfigOfPID2.EAP_REQUEST_QUEUE_PID2) | ||||||
|  |     @RabbitHandler | ||||||
|  |     public void eapRequest(Message<?> message, Channel channel)throws Exception{ | ||||||
|  |  | ||||||
|  |         logger.info("==============received message-EAP_REQUEST_QUEUE_PID2================="); | ||||||
|  |  | ||||||
|  |         Long deliveryTag = (Long)message.getHeaders().get(AmqpHeaders.DELIVERY_TAG); | ||||||
|  |         //MQMessage 中的 transactionId | ||||||
|  | //        String transactionId = (String)message.getHeaders().get("spring_returned_message_correlation"); | ||||||
|  | //        //logger.info("transactionId:"+transactionId); | ||||||
|  |  | ||||||
|  |         try { | ||||||
|  |  | ||||||
|  |             MQMessage mqMessage = CommonFunction.parse(message); | ||||||
|  |             String transactionId = mqMessage.getHeader().getTransactionId(); | ||||||
|  |             //1. 正常情况 | ||||||
|  |             String integer= HttpUtil.post(Constant.mesCallBackUrl,JSONObject.toJSONString(mqMessage)); | ||||||
|  |             Integer result = Integer.valueOf(integer); | ||||||
|  |  | ||||||
|  |             //注意 这里特别注意 已经拒收的消息 再签收是要出错的,这里要特别注意。 | ||||||
|  |             if(result == 1){ | ||||||
|  |                 logger.info("在 EAP_REQUEST_QUEUE_PID2 队列中,transitionId"+transactionId+", 这条消息处理成功"); | ||||||
|  |                 channel.basicAck(deliveryTag,false); | ||||||
|  |             }else { | ||||||
|  |                 logger.error("在 EAP_REQUEST_QUEUE_PID2 队列中,transitionId"+transactionId+" 处理消息的时候 出现异常,然后 拒签消息 ,然后丢到死信队列"); | ||||||
|  |                 channel.basicNack(deliveryTag,false,false); | ||||||
|  |             } | ||||||
|  |             //2.模拟异常 ,然后 拒签消息 ,然后丢到死信队列 | ||||||
|  |         }catch (Exception e){ | ||||||
|  |             // 第一个false 是 不批量签收;第二个false 是 不重回队列 | ||||||
|  |             logger.error(e.getMessage()); | ||||||
|  |             channel.basicNack(deliveryTag,false,false); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     public static void main(String[] args) { | ||||||
|  |         //localhost:8001 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         MQMessage mqMessage = new MQMessage(); | ||||||
|  |  | ||||||
|  |         Header header = new Header("Request","Execute","QUERYEQPStatus","12"); | ||||||
|  |         QueryEQStatusBody queryEQStatusBody = new QueryEQStatusBody(); | ||||||
|  |         queryEQStatusBody.setVidType("u4"); | ||||||
|  |         List<String> vids = new ArrayList<>(); | ||||||
|  |         vids.add("10000"); | ||||||
|  |         vids.add("10001"); | ||||||
|  |         vids.add("10002"); | ||||||
|  |         queryEQStatusBody.setVidList(vids); | ||||||
|  |  | ||||||
|  |         //queryEQStatusBodys => {"vidList":["10000","10001","10002"],"vidType":"u4"} | ||||||
|  |         //bytes              => [123, 34, 118, 105, 100, 76, 105, 115, 116, 34, 58, 91, 34, 49, 48, 48, 48, 48, 34, 44, 34, 49, 48, 48, 48, 49, 34, 44, 34, 49, 48, 48, 48, 50, 34, 93, 44, 34, 118, 105, 100, 84, 121, 112, 101, 34, 58, 34, 117, 52, 34, 125] | ||||||
|  |         //"body":               "eyJ2aWRMaXN0IjpbIjEwMDAwIiwiMTAwMDEiLCIxMDAwMiJdLCJ2aWRUeXBlIjoidTQifQ==" | ||||||
|  |         //message => {"header":{"transactionId":"12_20210908141555_d7d88","messageType":"Request","messageCategory":"Execute","messageName":"QUERYEQPStatus","equipmentId":"12","sendTimestamp":"2021-09-08 14:15:56","from":"mes","to":"eap"},"body":"eyJ2aWRMaXN0IjpbIjEwMDAwIiwiMTAwMDEiLCIxMDAwMiJdLCJ2aWRUeXBlIjoidTQifQ=="} | ||||||
|  |         //new String(bytes) : {"vidType":"u4","vidList":["10000","10001","10002"]} | ||||||
|  |         String queryEQStatusBodys = JSONObject.toJSONString(queryEQStatusBody); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         byte[] bytes = JSONObject.toJSONBytes(queryEQStatusBody); | ||||||
|  |         System.out.println("myString :"+ new String(bytes)); | ||||||
|  |         mqMessage.setBody(queryEQStatusBodys); | ||||||
|  |         mqMessage.setHeader(header); | ||||||
|  |  | ||||||
|  |         //{"header":{"transactionId":"12_20210908094750_d62d4","messageType":"Request","messageCategory":"Execute","messageName":"QUERYEQPStatus","equipmentId":"12","sendTimestamp":"2021-09-08 09:47:50","from":"mes","to":"eap"},"body":"eyJ2aWRMaXN0IjpbIjEwMDAwIiwiMTAwMDEiLCIxMDAwMiJdLCJ2aWRUeXBlIjoidTQifQ=="} | ||||||
|  |         String s = JSONObject.toJSONString(mqMessage); | ||||||
|  |         MQMessage mqMessagessss = JSONObject.parseObject(s.getBytes(StandardCharsets.UTF_8), MQMessage.class); | ||||||
|  |         System.out.println("mqMessagessss : " + mqMessagessss.toString()); | ||||||
|  |         System.out.println(s); | ||||||
|  |         //String result= HttpUtil.post("localhost:8001/receivedFromEapRequest",s); | ||||||
|  |  | ||||||
|  |         //{"header":{"transactionId":"PIDPID2_20210908093729_95196","messageType":"Request","messageCategory":"Alarm","messageName":"AlarmTimeOut","from":"EAP","to":"MES","equipmentId":"PIDPID2","sendTimestamp":"2021-09-08 09:37:29"},"body":"eyJ2aWRMaXN0IjpbIjEwMDAwIiwiMTAwMDEiLCIxMDAwMiJdLCJ2aWRUeXBlIjoidTQifQ=="} | ||||||
|  |         String s22 = "{\"header\":{\"transactionId\":\"PIDPID2_20210908093729_95196\",\"messageType\":\"Request\",\"messageCategory\":\"Alarm\",\"messageName\":\"AlarmTimeOut\",\"from\":\"EAP\",\"to\":\"MES\",\"equipmentId\":\"PIDPID2\",\"sendTimestamp\":\"2021-09-08 09:37:29\"},\"body\":\"eyJ2aWRMaXN0IjpbIjEwMDAwIiwiMTAwMDEiLCIxMDAwMiJdLCJ2aWRUeXBlIjoidTQifQ==\"}"; | ||||||
|  |  | ||||||
|  |         String s2 = "{\"header\":{\"transactionId\":\"PIDPID2_20210908093729_95196\",\"messageType\":\"Request\",\"messageCategory\":\"Alarm\",\"messageName\":\"AlarmTimeOut\",\"from\":\"EAP\",\"to\":\"MES\",\"equipmentId\":\"PIDPID2\",\"sendTimestamp\":\"2021-09-08 09:37:29\"},\"body\":{\"TransactionId:\":\"PIDPID2_20210908093644_71835\",\"MessageName:\":\"TraceData\"}}"; | ||||||
|  |         JSONObject jsonObject = JSON.parseObject(s2); | ||||||
|  |         String header1 = jsonObject.getString("header"); | ||||||
|  |         String body = jsonObject.getString("body"); | ||||||
|  |         String returns = jsonObject.getString("returns"); | ||||||
|  |         System.out.println("header: "+header1); | ||||||
|  |         System.out.println("body: "+body); | ||||||
|  |         System.out.println("returns: "+returns); | ||||||
|  |  | ||||||
|  |         byte[] bytes2 = s2.getBytes(); | ||||||
|  |         MQMessage mqMessage2 = JSONObject.parseObject(bytes2, MQMessage.class); | ||||||
|  |         System.out.println(mqMessage2.toString()); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @RabbitListener(queues = ConfigOfPID2.MES_RESPONSE_QUEUE_PID2) | ||||||
|  |     @RabbitHandler | ||||||
|  |     public void mesResponse(Message<?> message, Channel channel)throws Exception{ | ||||||
|  |         logger.info("==============PIDPID2_Exchange-MES_Response_Queue=================,priority:"+message.getHeaders().get("priority")+",attr1"+message.getHeaders().get("attr1")); | ||||||
|  |         Long deliveryTag = (Long)message.getHeaders().get(AmqpHeaders.DELIVERY_TAG); | ||||||
|  |  | ||||||
|  |         //模拟异常 ,然后 拒签消息 ,然后丢到死信队列 | ||||||
|  |         try { | ||||||
|  |             MQMessage mqMessage = CommonFunction.parse(message); | ||||||
|  |             String transactionId = mqMessage.getHeader().getTransactionId(); | ||||||
|  |             Integer result = mqMessageHandler.responseHandler(message); | ||||||
|  |             if(result == 1){ | ||||||
|  |                 logger.info("在 MES_RESPONSE_QUEUE_PID2 队列中 , transitionId"+transactionId+" 这条消息处理成功"); | ||||||
|  |                 channel.basicAck(deliveryTag,false); | ||||||
|  |             }else { | ||||||
|  |                 logger.error("在 MES_RESPONSE_QUEUE_PID2 队列中 ,transitionId"+transactionId+" 处理消息的时候 出现异常,然后 拒签消息 ,然后丢到死信队列"); | ||||||
|  |                 channel.basicNack(deliveryTag,false,false); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             //throw new Exception("11111"); | ||||||
|  |         }catch (Exception e){ | ||||||
|  |             // 第一个false 是 不批量签收;第二个false 是 不重回队列 | ||||||
|  |             channel.basicNack(deliveryTag,false,false); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         //注意 这里特别注意 已经拒收的消息 再签收是要出错的,这里要特别注意。 | ||||||
|  |         //channel.basicAck(deliveryTag,false); | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSON; | |||||||
| import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||||
| import com.qgs.dc.common.utils.CommonFunction; | import com.qgs.dc.common.utils.CommonFunction; | ||||||
| import com.qgs.dc.mq.Constant.Constant; | import com.qgs.dc.mq.Constant.Constant; | ||||||
|  | import com.qgs.dc.mq.configuration.ConfigOfPID13S; | ||||||
| import com.qgs.dc.mq.configuration.ConfigOfPID4B; | import com.qgs.dc.mq.configuration.ConfigOfPID4B; | ||||||
| import com.qgs.dc.mq.consumer.commonHandler.MQMessageHandler; | import com.qgs.dc.mq.consumer.commonHandler.MQMessageHandler; | ||||||
| import com.qgs.dc.mq.entity.MQMessage; | import com.qgs.dc.mq.entity.MQMessage; | ||||||
|   | |||||||
| @@ -68,12 +68,7 @@ public class MQController { | |||||||
|             String routingKey =  callbackMessageEntity.getRoutingKey(); |             String routingKey =  callbackMessageEntity.getRoutingKey(); | ||||||
|  |  | ||||||
|             logger.info("MES => EAP (MES_Request), 状态:DC已收到 , 内容:"+ callbackMessageEntity.toString()); |             logger.info("MES => EAP (MES_Request), 状态:DC已收到 , 内容:"+ callbackMessageEntity.toString()); | ||||||
|             //properties 这里的参数是写在MQ消息 header里面的,如果EAP端 需要某些参数 可以写在这里,eap去取更方便一些 |             rabbitSender.sendDirect(mqMessage,exchangeName,routingKey); | ||||||
|             Map<String,Object> properties = new HashMap<>(); |  | ||||||
|             properties.put("equipmentName","PID001"); |  | ||||||
|             properties.put("transitionId",transitionId); |  | ||||||
|             //rabbitSender.sendDirect(mqMessage,properties,exchangeName,routingKey,"6000"); |  | ||||||
|             rabbitSender.sendDirect(mqMessage,properties,exchangeName,routingKey); |  | ||||||
|             logger.info("MES => EAP (MES_Request) , 状态:DC已发送给MQ , 内容:"+ callbackMessageEntity.toString()); |             logger.info("MES => EAP (MES_Request) , 状态:DC已发送给MQ , 内容:"+ callbackMessageEntity.toString()); | ||||||
|  |  | ||||||
|             AsyncFuture<MQMessage> add = SendedList.add(transitionId,mqMessage); |             AsyncFuture<MQMessage> add = SendedList.add(transitionId,mqMessage); | ||||||
| @@ -84,4 +79,30 @@ public class MQController { | |||||||
|             return R.error(2,e.getMessage()); |             return R.error(2,e.getMessage()); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @PostMapping("/mesRequestNoW") | ||||||
|  |     /** | ||||||
|  |      *  desc : MES给EAP发送远程指令(MES_Request)(向rabbitmq中发送消息(direct模式)) | ||||||
|  |      *  MES => DC(数据采集中间件) => MQ => EAP | ||||||
|  |      *  return :返回 的就是这个指令的回复指令 | ||||||
|  |      *      1 = 成功 | ||||||
|  |      *      其他 = 异常 | ||||||
|  |      */ | ||||||
|  |     public R mesRequestNoW(@RequestBody CallbackMessageEntity callbackMessageEntity){ | ||||||
|  |         try { | ||||||
|  |             String transitionId = callbackMessageEntity.getMqMessage().getHeader().getTransactionId(); | ||||||
|  |             MQMessage mqMessage = callbackMessageEntity.getMqMessage(); | ||||||
|  |             String exchangeName =  callbackMessageEntity.getExchangeName(); | ||||||
|  |             String routingKey =  callbackMessageEntity.getRoutingKey(); | ||||||
|  |  | ||||||
|  |             logger.info("MES => EAP (MES_Request), 状态:DC已收到 , 内容:"+ callbackMessageEntity.toString()); | ||||||
|  |             rabbitSender.sendDirect(mqMessage,exchangeName,routingKey); | ||||||
|  |             logger.info("MES => EAP (MES_Request) , 状态:DC已发送给MQ , 内容:"+ callbackMessageEntity.toString()); | ||||||
|  |  | ||||||
|  |             return R.ok(); | ||||||
|  |         }catch (Exception e){ | ||||||
|  |             logger.error("MES => EAP (MES_Request) , 状态:DC处理异常 , 内容:"+ callbackMessageEntity.toString()); | ||||||
|  |             return R.error(2,e.getMessage()); | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,6 +1,7 @@ | |||||||
| package com.qgs.dc.mq.entity; | package com.qgs.dc.mq.entity; | ||||||
|  |  | ||||||
| import cn.hutool.http.HttpUtil; | import cn.hutool.http.HttpUtil; | ||||||
|  | import com.alibaba.fastjson.annotation.JSONField; | ||||||
| import com.alibaba.fastjson.annotation.JSONType; | import com.alibaba.fastjson.annotation.JSONType; | ||||||
| import com.qgs.dc.mq.entity.common.Header; | import com.qgs.dc.mq.entity.common.Header; | ||||||
| import com.qgs.dc.mq.entity.common.Returns; | import com.qgs.dc.mq.entity.common.Returns; | ||||||
| @@ -14,9 +15,14 @@ import java.util.HashMap; | |||||||
|  * @DATE: 2021/8/12 15:38 |  * @DATE: 2021/8/12 15:38 | ||||||
|  */ |  */ | ||||||
| @Data | @Data | ||||||
| @JSONType(orders={"header","body","returns"}) | @JSONType(orders={"header","body","return"}) | ||||||
| public class MQMessage { | public class MQMessage { | ||||||
|     private Header header; |     private Header header; | ||||||
|  |     @JSONField(jsonDirect = true) | ||||||
|     private String body; |     private String body; | ||||||
|  |     //在序列化和反序列化 的时候 都会把 json 里面的return字段转成 object 里面的returns字段 | ||||||
|  |     @JSONField(name = "return") | ||||||
|     private Returns returns; |     private Returns returns; | ||||||
|  |  | ||||||
|  |  | ||||||
| } | } | ||||||
| @@ -37,6 +37,7 @@ public class Header { | |||||||
|         this.to = "eap"; |         this.to = "eap"; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|     public String getTransactionId() { |     public String getTransactionId() { | ||||||
|         return transactionId; |         return transactionId; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -1,5 +1,6 @@ | |||||||
| package com.qgs.dc.mq.entity.common; | package com.qgs.dc.mq.entity.common; | ||||||
|  |  | ||||||
|  | import com.alibaba.fastjson.annotation.JSONField; | ||||||
| import com.alibaba.fastjson.annotation.JSONType; | import com.alibaba.fastjson.annotation.JSONType; | ||||||
| import lombok.Data; | import lombok.Data; | ||||||
|  |  | ||||||
| @@ -9,29 +10,15 @@ import lombok.Data; | |||||||
|  * @DATE: 2021/8/12 15:35 |  * @DATE: 2021/8/12 15:35 | ||||||
|  */ |  */ | ||||||
| @Data | @Data | ||||||
| @JSONType(orders={"returnCode","ReasonCode"}) | @JSONType(orders={"ReturnCode","ReasonCode"}) | ||||||
| public class Returns { | public class Returns { | ||||||
|     private String returnCode; |     @JSONField(name = "ReturnCode") | ||||||
|  |     private String ReturnCode; | ||||||
|  |     @JSONField(name = "ReasonCode") | ||||||
|     private String ReasonCode; |     private String ReasonCode; | ||||||
|  |  | ||||||
|     public String getReturnCode() { |  | ||||||
|         return returnCode; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public void setReturnCode(String returnCode) { |  | ||||||
|         this.returnCode = returnCode; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public String getReasonCode() { |  | ||||||
|         return ReasonCode; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public void setReasonCode(String reasonCode) { |  | ||||||
|         ReasonCode = reasonCode; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public Returns(String returnCode, String reasonCode) { |     public Returns(String returnCode, String reasonCode) { | ||||||
|         this.returnCode = returnCode; |         ReturnCode = returnCode; | ||||||
|         ReasonCode = reasonCode; |         ReasonCode = reasonCode; | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -3,6 +3,8 @@ package com.qgs.dc.mq.producer.component; | |||||||
| import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||||
| import com.qgs.dc.common.utils.CommonFunction; | import com.qgs.dc.common.utils.CommonFunction; | ||||||
| import com.qgs.dc.mq.entity.MQMessage; | import com.qgs.dc.mq.entity.MQMessage; | ||||||
|  | import com.qgs.dc.mq.entity.common.Header; | ||||||
|  | import com.qgs.dc.mq.entity.common.Returns; | ||||||
| import org.slf4j.Logger; | import org.slf4j.Logger; | ||||||
| import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||||
|  |  | ||||||
| @@ -17,6 +19,7 @@ import org.springframework.messaging.MessageHeaders; | |||||||
| import org.springframework.messaging.support.MessageBuilder; | import org.springframework.messaging.support.MessageBuilder; | ||||||
| import org.springframework.stereotype.Component; | import org.springframework.stereotype.Component; | ||||||
|  |  | ||||||
|  | import java.sql.SQLOutput; | ||||||
| import java.util.Map; | import java.util.Map; | ||||||
| import java.util.Random; | import java.util.Random; | ||||||
| import java.util.UUID; | import java.util.UUID; | ||||||
| @@ -190,20 +193,29 @@ public class RabbitSender { | |||||||
|                 cd |                 cd | ||||||
|         ); |         ); | ||||||
|     } |     } | ||||||
|     public void sendDirect(MQMessage mqMessage, Map<String,Object> properties, String exchange, String routingKey) throws Exception{ |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     public void sendDirect(MQMessage mqMessage, String exchange, String routingKey) throws Exception{ | ||||||
|  |  | ||||||
|         byte[] message = JSONObject.toJSONBytes(mqMessage); |         byte[] message = JSONObject.toJSONBytes(mqMessage); | ||||||
|         MessageHeaders messageHeaders = new MessageHeaders(properties); |  | ||||||
|         Message<?> msg = MessageBuilder.createMessage(message,messageHeaders); |  | ||||||
|         //String transitionId = mqMessage.getHeader().getEquipmentId()+"_"+CommonFunction.getNowDate(2)+"_"+CommonFunction.getUUID(10); |  | ||||||
|         String transitionId = mqMessage.getHeader().getTransactionId(); |         String transitionId = mqMessage.getHeader().getTransactionId(); | ||||||
|         CorrelationData cd = new CorrelationData(transitionId); |         CorrelationData cd = new CorrelationData(transitionId); | ||||||
|         rabbitTemplate.setConfirmCallback(confirmCallback); |         rabbitTemplate.setConfirmCallback(confirmCallback); | ||||||
|         rabbitTemplate.setReturnsCallback(returnsCallback); |         rabbitTemplate.setReturnsCallback(returnsCallback); | ||||||
|         rabbitTemplate.convertAndSend(exchange, |         //rabbitTemplate.send 此方法发送的消息 是不含java相关信息的,rabbitTemplate.convertAndSend是包含java相关信息的 | ||||||
|                 routingKey, |         org.springframework.amqp.core.Message mqsMessage = new org.springframework.amqp.core.Message(message); | ||||||
|                 msg, |         rabbitTemplate.send(exchange,routingKey,mqsMessage,cd); | ||||||
|                 cd |  | ||||||
|         ); | //        MessageHeaders messageHeaders = new MessageHeaders(properties); | ||||||
|  | //        Message<?> msg = MessageBuilder.createMessage(message,messageHeaders);Message<?> msg = MessageBuilder.createMessage(message,messageHeaders); | ||||||
|  | //        rabbitTemplate.convertAndSend(exchange, | ||||||
|  | //                routingKey, | ||||||
|  | //                msg, | ||||||
|  | //                cd | ||||||
|  | //        ); | ||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -20,10 +20,16 @@ public enum DaveArea { | |||||||
| 	ANALOGOUTPUTS200(7), // System flags of 200 family | 	ANALOGOUTPUTS200(7), // System flags of 200 family | ||||||
| 	COUNTER(28), // analog inputs of 200 family | 	COUNTER(28), // analog inputs of 200 family | ||||||
| 	COUNTER200(30), // analog outputs of 200 family | 	COUNTER200(30), // analog outputs of 200 family | ||||||
| 	DB(0x84), // Peripheral I/O       //这个是plc中的不同区,有V区,input区,output区 | 	DB(0x84), // Peripheral I/O       //DB块 | ||||||
| 	DI(0x85), FLAGS(0x83), INPUTS(0x81), LOCAL(0x86), // data blocks | 	DI(0x85),      //DBI块 | ||||||
| 	OUTPUTS(0x82), // instance data blocks | 	FLAGS(0x83),  //M块 | ||||||
| 	P(0x80), // not tested | 	INPUTS(0x81),   //I块 | ||||||
|  | 	T(0x1D),   //T块ed | ||||||
|  | 	C(0x1C),   //C块 | ||||||
|  |  | ||||||
|  | 	LOCAL(0x86), // data blocks     //LD块 | ||||||
|  | 	OUTPUTS(0x82), // instance data blocks   //Q块 | ||||||
|  | 	P(0x80), // not tested   //D块 | ||||||
| 	SYSINFO(3), // local of caller | 	SYSINFO(3), // local of caller | ||||||
| 	SYSTEMFLAGS(5), // S7 counters | 	SYSTEMFLAGS(5), // S7 counters | ||||||
| 	TIMER(29), // S7 timers | 	TIMER(29), // S7 timers | ||||||
|   | |||||||
| @@ -476,6 +476,8 @@ public final class PDU { | |||||||
| 		//0x03:响应数据(Ack-Data),响应0x01的请求; | 		//0x03:响应数据(Ack-Data),响应0x01的请求; | ||||||
| 		//0x07:自定义数据(Userdata),扩展协议类型 | 		//0x07:自定义数据(Userdata),扩展协议类型 | ||||||
| 		this.mem[this.header + 1] = (byte) type; | 		this.mem[this.header + 1] = (byte) type; | ||||||
|  |  | ||||||
|  |  | ||||||
| 		//dlen = data length ( 报文中存在两个字节 ) | 		//dlen = data length ( 报文中存在两个字节 ) | ||||||
| 		this.dlen = 0; | 		this.dlen = 0; | ||||||
| 		//plen = param length ( 报文中存在两个字节 ) | 		//plen = param length ( 报文中存在两个字节 ) | ||||||
| @@ -608,6 +610,7 @@ public final class PDU { | |||||||
| 		if (this.mem[this.param] != FUNC_WRITE) { | 		if (this.mem[this.param] != FUNC_WRITE) { | ||||||
| 			return Nodave.RESULT_UNEXPECTED_FUNC; | 			return Nodave.RESULT_UNEXPECTED_FUNC; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		if ((this.mem[this.data] == 255)) { | 		if ((this.mem[this.data] == 255)) { | ||||||
| 			res = Nodave.RESULT_OK; | 			res = Nodave.RESULT_OK; | ||||||
| 		} else { | 		} else { | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ server: | |||||||
| spring: | spring: | ||||||
|   rabbitmq: |   rabbitmq: | ||||||
|     # 如果是rabbitmq+haproxy+keepalived集群 ,,那么192.168.0.176是haproxy代理的地址(严格来说是keepalived的vip) |     # 如果是rabbitmq+haproxy+keepalived集群 ,,那么192.168.0.176是haproxy代理的地址(严格来说是keepalived的vip) | ||||||
|     addresses: 192.168.0.176:5672          # 新版rabbitmq 版本还未测试 |     addresses: 192.168.0.170:5672          # 新版rabbitmq 版本还未测试 | ||||||
|     #addresses: 172.16.21.133:5672 |     #addresses: 172.16.21.133:5672 | ||||||
|     username: cigs |     username: cigs | ||||||
|     password: cigs |     password: cigs | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user