基本的Queue消息發送和消費

配置Maven所需的依賴,示例如下

<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-all</artifactId>
    <version>5.2.0</version>
</dependency>

<dependency>
    <groupId>org.apache.xbean</groupId>
    <artifactId>xbean-spring</artifactId>
    <version>3.7</version>
</dependency>

Queue消息發送的示例代碼如下:

public class JmsProducer {

    public static void main(String[] args) {
        try {
            ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://39.96.192.171:61616");
            Connection connection = connectionFactory.createConnection();
            connection.start();
            Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
            Destination destination = session.createQueue("my-queue");
            MessageProducer producer = session.createProducer(destination);
            for (int i = 0; i < 3; i++) {
                TextMessage message = session.createTextMessage("message--" + i);

                Thread.sleep(1000);
                //通過消息生產者發出消息
                producer.send(message);
            }
            session.commit();
            session.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

然後運行這個類

可以看到隊列中我們自定義的my-queue,中有3個還沒有被消費的消息!

接下來我們編寫消費者來消費消息!

public class JmsReceiver {
    public static void main(String[] args) {
        try {
            ConnectionFactory cf = new ActiveMQConnectionFactory("tcp://39.96.192.171:61616");
            Connection connection = cf.createConnection();
            connection.start();
            final Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
            Destination destination = session.createQueue("my-queue");
            MessageConsumer consumer = session.createConsumer(destination);
            int i = 0;
            while (i < 3) {
                i++;
                TextMessage message = (TextMessage) consumer.receive();
                session.commit();
                System.out.println("收到消息:" + message.getText());
            }
            session.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

運行這個類!可以看到控制檯收到3條消息!

再看activemq控制檯

可以看到有3條消息顯示被消費!

這就是簡單的消息生產和消費!消息消費分爲兩種方式,同步消費和異步消費,上面的例子就是同步消費,通過調用消費者的receive方法從目的地中顯式提取消息,receive 方法可以一直阻塞到消息到達。

然後再寫一個異步消費的例子!

public class JmsReceiver2 implements MessageListener {

    public void onMessage(Message message) {
        try {
            TextMessage textMessage = (TextMessage) message;
            if (null != message) {
                System.out.println("收到的消息:" + textMessage.getText());
            }
            // 如果session設置爲Session.CLIENT_ACKNOWLEDGE,要加上這一步
            message.acknowledge();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    }

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章