ActiveMQ實戰(二)-程式碼範例

來源:互聯網
上載者:User

在ActiveMQ 解壓縮後的目錄如下:


各個目錄說明如下: bin:ActiveMQ的啟動指令碼 conf:ActiveMQ的所有設定檔 data:記錄檔及持久性訊息資料 docs:ActiveMQ官方文檔 examples:ActiveMQ官方提供的demo lib:ActiveMQ運行所需的library webapps:ActiveMQ的Web控制台 webapps-demo:ActiveMQ webapps相關的demo activemq-all-5.13.2.jar:ActiveMQ CLI jar包,用於使用者系統調用

其中,examples是ActiveMQ官方提供的samples,初學者可以通過研究這些samples熟悉ActiveMQ的使用。

本文將通過ActiveMQ 實現一個簡單的Publish-Subscribe 例子。

1、Producer

package com.ricky.codelab.activemq.amqp;import java.io.IOException;import java.util.Properties;import javax.jms.Connection;import javax.jms.DeliveryMode;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.MessageProducer;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.qpid.jms.JmsConnectionFactory;import com.ricky.codelab.activemq.util.PropertyUtils;public class ProducerDemo {    private int messages = 10000;    public static void main(String[] args) {        try {            new ProducerDemo().publish();        } catch (JMSException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }    public void publish() throws JMSException, IOException{        Properties props = PropertyUtils.load("activemq.properties");        String type = props.getProperty("activemq.type", "topic:event");        String user = props.getProperty("activemq.username", "admin");        String password = props.getProperty("activemq.password", "password");        String server = props.getProperty("activemq.server", "localhost:5672");        String connectionURI = "amqp://" + server;        JmsConnectionFactory factory = new JmsConnectionFactory(connectionURI);        Connection connection = factory.createConnection(user, password);        connection.start();        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);        String[] arr = type.split(":");        Destination destination = null;        if (arr[0].equals("topic")) {            destination = session.createTopic(type.split(":")[1]);        } else {            destination = session.createQueue(type.split(":")[1]);        }        MessageProducer producer = session.createProducer(destination);        producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);        for (int i = 1; i <= messages; i++) {            TextMessage msg = session.createTextMessage("#:" + i);            msg.setIntProperty("id", i);            producer.send(msg);            if ((i % 1000) == 0) {                System.out.println(String.format("Sent %d messages", i));            }        }        producer.send(session.createTextMessage("SHUTDOWN"));        try {            Thread.sleep(1000 * 3);        } catch (InterruptedException e) {            e.printStackTrace();        }        connection.close();    }}

2、Consumer

package com.ricky.codelab.activemq.amqp;import java.io.IOException;import java.util.Properties;import javax.jms.Connection;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.MessageConsumer;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.qpid.jms.JmsConnectionFactory;import com.ricky.codelab.activemq.util.PropertyUtils;public class ConsumerDemo {    public static void main(String[] args) {        try {            new ConsumerDemo().subscribe();        } catch (IOException e) {            e.printStackTrace();        } catch (JMSException e) {            e.printStackTrace();        }    }    public void subscribe() throws IOException, JMSException{        Properties props = PropertyUtils.load("activemq.properties");        String type = props.getProperty("activemq.type", "topic:event");        String user = props.getProperty("activemq.username", "admin");        String password = props.getProperty("activemq.password", "password");        String server = props.getProperty("activemq.server", "localhost:5672");        String connectionURI = "amqp://" + server;        JmsConnectionFactory factory = new JmsConnectionFactory(connectionURI);        Connection connection = factory.createConnection(user, password);        connection.start();        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);        String[] arr = type.split(":");        Destination destination = null;        if (arr[0].equals("topic")) {            destination = session.createTopic(arr[1]);        } else {            destination = session.createQueue(arr[1]);        }        MessageConsumer consumer = session.createConsumer(destination);        long start = System.currentTimeMillis();        long count = 1;        System.out.println("Waiting for messages...");        while (true) {            Message msg = consumer.receive();            if (msg instanceof TextMessage) {                String body = ((TextMessage) msg).getText();                if ("SHUTDOWN".equals(body)) {                    long diff = System.currentTimeMillis() - start;                    System.out.println(String.format("Received %d in %.2f seconds", count, (1.0 * diff / 1000.0)));                    connection.close();                    try {                        Thread.sleep(10);                    } catch (Exception e) {}                    System.exit(1);                } else {                    try {                        if (count != msg.getIntProperty("id")) {                            System.out.println("mismatch: " + count + "!=" + msg.getIntProperty("id"));                        }                    } catch (NumberFormatException ignore) {                    }                    if (count == 1) {                        start = System.currentTimeMillis();                    } else if (count % 1000 == 0) {                        System.out.println(String.format("Received %d messages.", count));                    }                    count++;                }            } else {                System.out.println("Unexpected message type: " + msg.getClass());            }        }    }}

點此下載完成代碼。


參考資料:
https://activemq.apache.org/initial-configuration.html
http://activemq.apache.org/examples.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.