瀏覽代碼

java code

Grega Bremec 3 年之前
父節點
當前提交
2b095a96a0

+ 3 - 0
.gitignore

@@ -3,3 +3,6 @@
 *.vim
 tmp*
 broker
+target
+.vscode
+amq-clients-2.10.4-dotnet-core

+ 40 - 0
java-jms-plain/metrics-collector/pom.xml

@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.redhat.training</groupId>
+        <artifactId>amq-dev-parent</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+    <artifactId>metrics-collector</artifactId>
+    <packaging>jar</packaging>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.qpid</groupId>
+            <artifactId>qpid-jms-client</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+          </dependency>      
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <version>3.0.0</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>exec</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <mainClass>com.redhat.training.collector.CollectMetric</mainClass>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 68 - 0
java-jms-plain/metrics-collector/src/main/java/com/redhat/training/collector/CollectMetric.java

@@ -0,0 +1,68 @@
+package com.redhat.training.collector;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.JMSException;
+import javax.jms.MessageConsumer;
+import javax.jms.Queue;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class CollectMetric {
+    public static void main(String... args) {
+        Logger LOG = LoggerFactory.getLogger(CollectMetric.class);
+
+        // prepare connection objects
+        InitialContext ctx;
+        ConnectionFactory cf;
+        Connection c;
+        Session s;
+        MessageConsumer mc;
+        Queue q;
+        
+        try {
+            ctx = new InitialContext();
+            cf = (ConnectionFactory)ctx.lookup("ConnectionFactory");
+            q = (Queue)ctx.lookup("queue/metrics");
+        } catch (NamingException ne) {
+            ne.printStackTrace();
+            return;
+        }
+
+        try {
+            c = cf.createConnection();
+            c.start();
+
+            s = c.createSession();
+            mc = s.createConsumer(q);
+        } catch (JMSException je) {
+            je.printStackTrace();
+            return;
+        }
+
+        while (true) {
+            try {
+                TextMessage tm = (TextMessage)mc.receive(1000);
+
+                if (tm != null) {
+                    LOG.info("Got: " + tm.getText());
+                }
+
+                continue;
+            } catch (JMSException je) {
+                je.printStackTrace();
+            }
+
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}

+ 4 - 0
java-jms-plain/metrics-collector/src/main/resources/jndi.properties

@@ -0,0 +1,4 @@
+# connection properties
+java.naming.factory.initial=org.apache.qpid.jms.jndi.JmsInitialContextFactory
+connectionFactory.ConnectionFactory=amqp://localhost:61616
+queue.queue/metrics=sampleQueue

+ 9 - 0
java-jms-plain/metrics-collector/src/main/resources/log4j.properties

@@ -0,0 +1,9 @@
+# Set root logger level to INFO and its only appender to CONSOLE.
+log4j.rootLogger=INFO, CONSOLE
+
+# A1 is set to be a ConsoleAppender.
+log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
+
+# A1 uses PatternLayout.
+log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
+log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

+ 40 - 0
java-jms-plain/metrics-sender/pom.xml

@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.redhat.training</groupId>
+        <artifactId>amq-dev-parent</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+    <artifactId>metrics-sender</artifactId>
+    <packaging>jar</packaging>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.qpid</groupId>
+            <artifactId>qpid-jms-client</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+          </dependency>      
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <version>3.0.0</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>exec</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <mainClass>com.redhat.training.sender.SendMetric</mainClass>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 78 - 0
java-jms-plain/metrics-sender/src/main/java/com/redhat/training/sender/SendMetric.java

@@ -0,0 +1,78 @@
+package com.redhat.training.sender;
+
+import java.lang.management.ManagementFactory;
+import java.lang.management.ThreadMXBean;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.JMSException;
+import javax.jms.MessageProducer;
+import javax.jms.Queue;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class SendMetric {
+    public static void main(String... args) {
+        Logger LOG = LoggerFactory.getLogger(SendMetric.class);
+
+        // prepare metrics objects
+        ThreadMXBean thr = ManagementFactory.getThreadMXBean();
+        long processId = ManagementFactory.getRuntimeMXBean().getPid();
+        long threadId = Thread.currentThread().getId();
+        long oldTime = 0;
+
+        // prepare connection objects
+        InitialContext ctx;
+        ConnectionFactory cf;
+        Connection c;
+        Session s;
+        MessageProducer mp;
+        Queue q;
+        
+        try {
+            ctx = new InitialContext();
+            cf = (ConnectionFactory)ctx.lookup("ConnectionFactory");
+            q = (Queue)ctx.lookup("queue/metrics");
+        } catch (NamingException ne) {
+            ne.printStackTrace();
+            return;
+        }
+
+        try {
+            c = cf.createConnection();
+            c.start();
+
+            s = c.createSession();
+            mp = s.createProducer(q);
+        } catch (JMSException je) {
+            je.printStackTrace();
+            return;
+        }
+
+        while (true) {
+            long newTime = thr.getThreadCpuTime(threadId);
+            String report = processId + "[" + threadId + "]: Current CPU time: " + (newTime - oldTime);
+
+            LOG.info(report);
+
+            try {
+                TextMessage tm = s.createTextMessage(report);
+                mp.send(tm);
+            } catch (JMSException je) {
+                je.printStackTrace();
+            }
+
+            oldTime = newTime;
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}

+ 4 - 0
java-jms-plain/metrics-sender/src/main/resources/jndi.properties

@@ -0,0 +1,4 @@
+# connection properties
+java.naming.factory.initial=org.apache.qpid.jms.jndi.JmsInitialContextFactory
+connectionFactory.ConnectionFactory=amqp://localhost:61616
+queue.queue/metrics=sampleQueue

+ 9 - 0
java-jms-plain/metrics-sender/src/main/resources/log4j.properties

@@ -0,0 +1,9 @@
+# Set root logger level to INFO and its only appender to CONSOLE.
+log4j.rootLogger=INFO, CONSOLE
+
+# A1 is set to be a ConsoleAppender.
+log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
+
+# A1 uses PatternLayout.
+log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
+log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

+ 39 - 0
java-jms-plain/pom.xml

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>com.redhat.training</groupId>
+    <artifactId>amq-dev-parent</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+    <packaging>pom</packaging>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+        <maven.compiler.release>11</maven.compiler.release>
+        <qpid.client.version>1.0.0.redhat-00004</qpid.client.version>
+        <slf4j.version>1.7.30.redhat-00003</slf4j.version>
+    </properties>
+
+    <modules>
+        <module>metrics-sender</module>
+        <module>metrics-collector</module>
+        <module>stock-updater</module>
+        <module>stock-subscriber</module>
+    </modules>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.apache.qpid</groupId>
+                <artifactId>qpid-jms-client</artifactId>
+                <version>${qpid.client.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.slf4j</groupId>
+                <artifactId>slf4j-log4j12</artifactId>
+                <version>${slf4j.version}</version>
+              </dependency>          
+        </dependencies>
+    </dependencyManagement>
+</project>

+ 40 - 0
java-jms-plain/stock-subscriber/pom.xml

@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.redhat.training</groupId>
+        <artifactId>amq-dev-parent</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+    <artifactId>stock-subscriber</artifactId>
+    <packaging>jar</packaging>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.qpid</groupId>
+            <artifactId>qpid-jms-client</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+          </dependency>      
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <version>3.0.0</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>exec</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <mainClass>com.redhat.training.stock.receive.Subscribe</mainClass>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 80 - 0
java-jms-plain/stock-subscriber/src/main/java/com/redhat/training/stock/receive/Subscribe.java

@@ -0,0 +1,80 @@
+package com.redhat.training.stock.receive;
+
+import java.util.UUID;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.JMSException;
+import javax.jms.Topic;
+import javax.jms.TopicSubscriber;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class Subscribe {
+    public static void main(String... args) {
+        Logger LOG = LoggerFactory.getLogger(Subscribe.class);
+
+        // prepare connection objects
+        InitialContext ctx;
+        ConnectionFactory cf;
+        Connection c;
+        Session s;
+        TopicSubscriber ts;
+        Topic t;
+        
+        try {
+            ctx = new InitialContext();
+            cf = (ConnectionFactory)ctx.lookup("ConnectionFactory");
+            t = (Topic)ctx.lookup("topic/stocks");
+        } catch (NamingException ne) {
+            ne.printStackTrace();
+            return;
+        }
+
+        String cid;
+        if (args.length == 0 || args[0] == "") {
+            cid = UUID.randomUUID().toString();
+        } else {
+            cid = args[0];
+        }
+        String sid = "stockticks";
+        try {
+            c = cf.createConnection();
+            c.setClientID(cid);
+            c.start();
+
+            s = c.createSession();
+            ts = s.createDurableSubscriber(t, sid);
+
+            LOG.info("Created a durable subscriber (ID " + cid + " for topic " + t.getTopicName() + " (SID " + sid + ")");
+        } catch (JMSException je) {
+            je.printStackTrace();
+            return;
+        }
+
+        while (true) {
+            try {
+                TextMessage tm = (TextMessage)ts.receive(1000);
+
+                if (tm != null) {
+                    LOG.info("Got: " + tm.getText());
+                }
+
+                continue;
+            } catch (JMSException je) {
+                je.printStackTrace();
+            }
+
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}

+ 4 - 0
java-jms-plain/stock-subscriber/src/main/resources/jndi.properties

@@ -0,0 +1,4 @@
+# connection properties
+java.naming.factory.initial=org.apache.qpid.jms.jndi.JmsInitialContextFactory
+connectionFactory.ConnectionFactory=amqp://localhost:61616
+topic.topic/stocks=sampleTopic

+ 9 - 0
java-jms-plain/stock-subscriber/src/main/resources/log4j.properties

@@ -0,0 +1,9 @@
+# Set root logger level to INFO and its only appender to CONSOLE.
+log4j.rootLogger=INFO, CONSOLE
+
+# A1 is set to be a ConsoleAppender.
+log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
+
+# A1 uses PatternLayout.
+log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
+log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

+ 40 - 0
java-jms-plain/stock-updater/pom.xml

@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.redhat.training</groupId>
+        <artifactId>amq-dev-parent</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+    <artifactId>stock-updater</artifactId>
+    <packaging>jar</packaging>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.qpid</groupId>
+            <artifactId>qpid-jms-client</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+          </dependency>      
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <version>3.0.0</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>exec</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <mainClass>com.redhat.training.stock.send.Update</mainClass>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 77 - 0
java-jms-plain/stock-updater/src/main/java/com/redhat/training/stock/send/Update.java

@@ -0,0 +1,77 @@
+package com.redhat.training.stock.send;
+
+import java.util.Random;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.JMSException;
+import javax.jms.MessageProducer;
+import javax.jms.Topic;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class Update {
+    public static void main(String... args) {
+        Logger LOG = LoggerFactory.getLogger(Update.class);
+
+        String[] stocks = {
+            "RHT",
+            "DOW",
+            "IBM",
+            "VMW"
+        };
+
+        // prepare connection objects
+        InitialContext ctx;
+        ConnectionFactory cf;
+        Connection c;
+        Session s;
+        MessageProducer mp;
+        Topic t;
+        
+        try {
+            ctx = new InitialContext();
+            cf = (ConnectionFactory)ctx.lookup("ConnectionFactory");
+            t = (Topic)ctx.lookup("topic/stocks");
+        } catch (NamingException ne) {
+            ne.printStackTrace();
+            return;
+        }
+
+        try {
+            c = cf.createConnection();
+            c.start();
+
+            s = c.createSession();
+            mp = s.createProducer(t);
+
+        } catch (JMSException je) {
+            je.printStackTrace();
+            return;
+        }
+
+        Random r = new Random();
+        while (true) {
+            String report = stocks[r.nextInt(stocks.length)] + ": " + r.nextInt(999);
+            LOG.info(report);
+
+            try {
+                TextMessage tm = s.createTextMessage(report);
+                mp.send(tm);
+            } catch (JMSException je) {
+                je.printStackTrace();
+            }
+
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}

+ 4 - 0
java-jms-plain/stock-updater/src/main/resources/jndi.properties

@@ -0,0 +1,4 @@
+# connection properties
+java.naming.factory.initial=org.apache.qpid.jms.jndi.JmsInitialContextFactory
+connectionFactory.ConnectionFactory=amqp://localhost:61616
+topic.topic/stocks=sampleTopic

+ 9 - 0
java-jms-plain/stock-updater/src/main/resources/log4j.properties

@@ -0,0 +1,9 @@
+# Set root logger level to INFO and its only appender to CONSOLE.
+log4j.rootLogger=INFO, CONSOLE
+
+# A1 is set to be a ConsoleAppender.
+log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
+
+# A1 uses PatternLayout.
+log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
+log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n