Modify restructure
[holmes/common.git] / holmes-actions / src / main / java / org / openo / holmes / common / producer / MQProducer.java
index e9c38b9..d258695 100644 (file)
@@ -15,6 +15,7 @@
  */\r
 package org.openo.holmes.common.producer;\r
 \r
+import java.io.Serializable;\r
 import javax.inject.Inject;\r
 import javax.jms.Connection;\r
 import javax.jms.ConnectionFactory;\r
@@ -23,6 +24,7 @@ import javax.jms.JMSException;
 import javax.jms.MessageProducer;\r
 import javax.jms.ObjectMessage;\r
 import javax.jms.Session;\r
+import lombok.NoArgsConstructor;\r
 import lombok.extern.slf4j.Slf4j;\r
 import org.glassfish.hk2.api.IterableProvider;\r
 import org.jvnet.hk2.annotations.Service;\r
@@ -31,32 +33,57 @@ import org.openo.holmes.common.api.stat.Alarm;
 import org.openo.holmes.common.api.stat.AplusResult;\r
 import org.openo.holmes.common.config.MQConfig;\r
 import org.openo.holmes.common.constant.AlarmConst;\r
+import org.apache.activemq.ActiveMQConnectionFactory;\r
 \r
 @Service\r
 @Slf4j\r
+@NoArgsConstructor\r
 public class MQProducer {\r
 \r
     @Inject\r
     private IterableProvider<MQConfig> mqConfigProvider;\r
     private ConnectionFactory connectionFactory;\r
 \r
+    public void init() {\r
+\r
+        String brokerURL =\r
+            "tcp://" + mqConfigProvider.get().brokerIp + ":" + mqConfigProvider.get().brokerPort;\r
+        connectionFactory = new ActiveMQConnectionFactory(mqConfigProvider.get().brokerUsername,\r
+            mqConfigProvider.get().brokerPassword, brokerURL);\r
+    }\r
+\r
     public void sendAlarmMQTopicMsg(Alarm alarm) {\r
+        sendMQTopicMsg(alarm);\r
+    }\r
 \r
+    public void sendCorrelationMQTopicMsg(String ruleId, long createTimeL, Alarm parentAlarm,\r
+            Alarm childAlarm) {\r
+        CorrelationResult correlationResult = getCorrelationResult(ruleId, createTimeL, parentAlarm, childAlarm);\r
+        sendMQTopicMsg(correlationResult);\r
+    }\r
+\r
+    private <T> void sendMQTopicMsg(T t) {\r
+        Serializable msgEntity = (Serializable) t;\r
         Connection connection = null;\r
         Session session;\r
-        Destination destination;\r
+        Destination destination = null;\r
         MessageProducer messageProducer;\r
+\r
         try {\r
             connection = connectionFactory.createConnection();\r
             connection.start();\r
             session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);\r
-            destination = session.createTopic(AlarmConst.MQ_TOPIC_NAME_ALARM);\r
+            if (t instanceof CorrelationResult) {\r
+                destination = session.createTopic(AlarmConst.MQ_TOPIC_NAME_ALARMS_CORRELATION);\r
+            } else if (t instanceof Alarm) {\r
+                destination = session.createTopic(AlarmConst.MQ_TOPIC_NAME_ALARM);\r
+            }\r
             messageProducer = session.createProducer(destination);\r
-            ObjectMessage message = session.createObjectMessage(alarm);\r
+            ObjectMessage message = session.createObjectMessage(msgEntity);\r
             messageProducer.send(message);\r
             session.commit();\r
         } catch (Exception e) {\r
-            log.error("Failed send alarm." + e.getMessage(), e);\r
+            log.error("Failed send correlation." + e.getMessage(), e);\r
         } finally {\r
             if (connection != null) {\r
                 try {\r
@@ -68,39 +95,13 @@ public class MQProducer {
         }\r
     }\r
 \r
-    public void sendCorrelationMQTopicMsg(String ruleId, long createTimeL, Alarm parentAlarm,\r
+    private CorrelationResult getCorrelationResult(String ruleId, long createTimeL, Alarm parentAlarm,\r
             Alarm childAlarm) {\r
-\r
         CorrelationResult correlationResult = new CorrelationResult();\r
         correlationResult.setRuleId(ruleId);\r
         correlationResult.setCreateTimeL(createTimeL);\r
         correlationResult.setResultType(AplusResult.APLUS_CORRELATION);\r
         correlationResult.setAffectedAlarms(new Alarm[]{parentAlarm, childAlarm});\r
-\r
-        Connection connection = null;\r
-        Session session;\r
-        Destination destination;\r
-        MessageProducer messageProducer;\r
-\r
-        try {\r
-            connection = connectionFactory.createConnection();\r
-            connection.start();\r
-            session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);\r
-            destination = session.createTopic(AlarmConst.MQ_TOPIC_NAME_ALARMS_CORRELATION);\r
-            messageProducer = session.createProducer(destination);\r
-            ObjectMessage message = session.createObjectMessage(correlationResult);\r
-            messageProducer.send(message);\r
-            session.commit();\r
-        } catch (Exception e) {\r
-            log.error("Failed send correlation." + e.getMessage(), e);\r
-        } finally {\r
-            if (connection != null) {\r
-                try {\r
-                    connection.close();\r
-                } catch (JMSException e) {\r
-                    log.error("Failed close connection." + e.getMessage(), e);\r
-                }\r
-            }\r
-        }\r
+        return correlationResult;\r
     }\r
 }\r