ActiveMQ数据传输jar版

Apache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件;由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行。

ActiveMQ有两种模式,分别是PTP模式和P&S模式

下面分别举例说明

1.PTP模式(queue)

消息生产者生产消息发送到 queue 中,然后消息消费者从 queue 中取出并且消费消息。消息被消费以后,queue 中不再有存储。

 

 

生成者代码

 

 

public class Producer {

    /**
     * 发送消息
     * 
     * @param args
     */
    public static void sendTextMessage(String datas) {
        // 连接工程
        ConnectionFactory factory = null;
        // 连接
        Connection connection = null;
        // 目的地
        Destination destination = null;
        // 会话
        Session session = null;
        // 消息发送者
        MessageProducer producer = null;
        // 消息对象
        Message message = null;

        try {
            // 创建连接工厂,连接ActiveMQ服务的连接工厂.
            factory = new ActiveMQConnectionFactory("admin", "admin",
                    "tcp://192.168.21.134:61616");
            // 通过工厂,创建连接对象
            // 创建练级的方法有重构,其中有factory.createConnection(String username,String
            // password);
            // 可以在创建连接工厂时,只传递连接地址,不传递用户信息
            connection = factory.createConnection();
            // 建议启动连接,消息的发送者不是必须启动连接,消息的消费者必须启动连接
            connection.start();

            // 通过连接对象,创建会话对象,必须绑定目的地
            // 创建会话的时候,必须传递两个参数,分别代表是否支持事务和如何确认消息处理、
            // 是否支持事务,数据类型是boolean,true支持,false不支持
            // true --支持事务,第二个参数默认无效
            // false -不支持事务,常用参数,第二参数必须传递
            // 如何确认消息的处理
            // AUTO_ACKNOWLEDGE -自动确认消息,消息的消费者处理消息后,自动确认
            // CLIENT_ACKNOWLEDGE -客户端手工确认,消息的消费者处理后,必须手工确认

            session = connection.createSession(false,
                    Session.CLIENT_ACKNOWLEDGE);
            destination = session.createQueue("first-mq");

            // 通过会话对象,创建消息的发送者producer
            // 创建的消息发送者,发送的消息一定到指定的目的地中。
            producer = session.createProducer(destination);

            // 创建文本消息对象,作为具体数据内容的载体。
            message = session.createTextMessage(datas);

            // 使用producer,发送消息到ActionMQ中的目的地
            producer.send(message);
            System.out.println("消息已发送");

        } catch (JMSException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            // 回收资源
            if (producer != null) {
                try {
                    producer.close();
                } catch (JMSException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            if (session != null) {
                try {
                    session.close();
                } catch (JMSException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            if (connection != null) {
                try {
                    connection.close();
                } catch (JMSException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }

    }

    public static void main(String[] args) {
        sendTextMessage("ActionMQ第一条消息");

    }

}

 

消费者代码

public class ConsumerListener {
    
    /**
     * 处理消息
     * @param args
     */
    
    public static void consumMessage(){
        // 连接工程
                ConnectionFactory factory = null;
                // 连接
                Connection connection = null;
                // 目的地
                Destination destination = null;
                // 会话
                Session session = null;
                // 消息接受者
                MessageConsumer consumer = null;
                // 消息对象
                Message message = null;

                try {
                    // 创建连接工厂,连接ActiveMQ服务的连接工厂.
                    factory = new ActiveMQConnectionFactory("admin", "admin",
                            "tcp://192.168.21.134:61616");
                    // 通过工厂,创建连接对象
                    // 创建练级的方法有重构,其中有factory.createConnection(String username,String
                    // password);
                    // 可以在创建连接工厂时,只传递连接地址,不传递用户信息
                    connection = factory.createConnection();
                    // 建议启动连接,消息的发送者不是必须启动连接,消息的消费者必须启动连接
                    connection.start();

                    // 通过连接对象,创建会话对象,必须绑定目的地
                    // 创建会话的时候,必须传递两个参数,分别代表是否支持事务和如何确认消息处理、
                    // 是否支持事务,数据类型是boolean,true支持,false不支持
                    // true --支持事务,第二个参数默认无效
                    // false -不支持事务,常用参数,第二参数必须传递
                    // 如何确认消息的处理
                    // AUTO_ACKNOWLEDGE -自动确认消息,消息的消费者处理消息后,自动确认 acknowledge();
                    // CLIENT_ACKNOWLEDGE -客户端手工确认,消息的消费者处理后,必须手工确认
                    
                    
                    session = connection.createSession(false,
                            Session.CLIENT_ACKNOWLEDGE);
                    destination = session.createQueue("first-mq");
                    consumer=session.createConsumer(destination);
                    consumer.setMessageListener(new MessageListener() {

                        @Override
                        public void onMessage(Message message) {
                            try {
                                //acknowledge()确认方法
                                message.acknowledge();
                                TextMessage  om=(TextMessage) message;
                                Object data=om.getText();
                                System.out.println(data);
                                
                            } catch (JMSException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                    });
                    
                    while(true){
                    Thread.sleep(300);
                    }
                

                } catch (JMSException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } finally {
                    // 回收资源
                    if (consumer != null) {
                        try {
                            consumer.close();
                        } catch (JMSException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }

                    if (session != null) {
                        try {
                            session.close();
                        } catch (JMSException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }

                    if (connection != null) {
                        try {
                            connection.close();
                        } catch (JMSException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }

                }
    }
    

    public static void main(String[] args) {
        consumMessage();

    }

}

 

pom.xml导入的包

    <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-client</artifactId>
            <version>5.14.3</version>
        </dependency>

 

执行

运行代码中的main方法即可

2.P&S模式(topic)

消息生产者(发布)将消息发布到  topic 中,同时有多个消息消费者(订阅)消费该消息。发布到  topic 的消息会被所有订阅者消费。当生产者发布消息,不管是否有消费者。都不会保存消息.

 

 生成者

public class Producer {

    /**
     * 发送消息
     * 
     * @param args
     */
    public static void sendTextMessage(String datas) {
        // 连接工程
        ConnectionFactory factory = null;
        // 连接
        Connection connection = null;
        // 目的地
        Destination destination = null;
        // 会话
        Session session = null;
        // 消息发送者
        MessageProducer producer = null;
        // 消息对象
        Message message = null;

        try {
            // 创建连接工厂,连接ActiveMQ服务的连接工厂.
            factory = new ActiveMQConnectionFactory("admin", "admin",
                    "tcp://192.168.21.134:61616");
            // 通过工厂,创建连接对象
            // 创建练级的方法有重构,其中有factory.createConnection(String username,String
            // password);
            // 可以在创建连接工厂时,只传递连接地址,不传递用户信息
            connection = factory.createConnection();
            // 建议启动连接,消息的发送者不是必须启动连接,消息的消费者必须启动连接
            connection.start();

            // 通过连接对象,创建会话对象,必须绑定目的地
            // 创建会话的时候,必须传递两个参数,分别代表是否支持事务和如何确认消息处理、
            // 是否支持事务,数据类型是boolean,true支持,false不支持
            // true --支持事务,第二个参数默认无效
            // false -不支持事务,常用参数,第二参数必须传递
            // 如何确认消息的处理
            // AUTO_ACKNOWLEDGE -自动确认消息,消息的消费者处理消息后,自动确认
            // CLIENT_ACKNOWLEDGE -客户端手工确认,消息的消费者处理后,必须手工确认

            session = connection.createSession(false,
                    Session.CLIENT_ACKNOWLEDGE);
            destination = session.createTopic("topic-mq");

            // 通过会话对象,创建消息的发送者producer
            // 创建的消息发送者,发送的消息一定到指定的目的地中。
            producer = session.createProducer(destination);

            // 创建文本消息对象,作为具体数据内容的载体。
            message = session.createTextMessage(datas);

            // 使用producer,发送消息到ActionMQ中的目的地
            producer.send(message);
            System.out.println("消息已发送");

        } catch (JMSException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            // 回收资源
            if (producer != null) {
                try {
                    producer.close();
                } catch (JMSException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            if (session != null) {
                try {
                    session.close();
                } catch (JMSException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            if (connection != null) {
                try {
                    connection.close();
                } catch (JMSException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }

    }

    public static void main(String[] args) {
        for(int i=0;i<10;i++){
        sendTextMessage("topic"+(i+1));
        }

    }

}

消费者

public class ConsumerListener {
    
    /**
     * 处理消息
     * @param args
     */
    
    public static void consumMessage(){
        // 连接工程
                ConnectionFactory factory = null;
                // 连接
                Connection connection = null;
                // 目的地
                Destination destination = null;
                // 会话
                Session session = null;
                // 消息接受者
                MessageConsumer consumer = null;
                // 消息对象
                Message message = null;

                try {
                    // 创建连接工厂,连接ActiveMQ服务的连接工厂.
                    factory = new ActiveMQConnectionFactory("admin", "admin",
                            "tcp://192.168.21.134:61616");
                    // 通过工厂,创建连接对象
                    // 创建练级的方法有重构,其中有factory.createConnection(String username,String
                    // password);
                    // 可以在创建连接工厂时,只传递连接地址,不传递用户信息
                    connection = factory.createConnection();
                    // 建议启动连接,消息的发送者不是必须启动连接,消息的消费者必须启动连接
                    connection.start();

                    // 通过连接对象,创建会话对象,必须绑定目的地
                    // 创建会话的时候,必须传递两个参数,分别代表是否支持事务和如何确认消息处理、
                    // 是否支持事务,数据类型是boolean,true支持,false不支持
                    // true --支持事务,第二个参数默认无效
                    // false -不支持事务,常用参数,第二参数必须传递
                    // 如何确认消息的处理
                    // AUTO_ACKNOWLEDGE -自动确认消息,消息的消费者处理消息后,自动确认 acknowledge();
                    // CLIENT_ACKNOWLEDGE -客户端手工确认,消息的消费者处理后,必须手工确认
                    
                    
                    session = connection.createSession(false,
                            Session.CLIENT_ACKNOWLEDGE);
                    destination = session.createTopic("topic-mq");
                    consumer=session.createConsumer(destination);
                    consumer.setMessageListener(new MessageListener() {

                        @Override
                        public void onMessage(Message message) {
                            try {
                                //acknowledge()确认方法
                                message.acknowledge();
                                TextMessage  om=(TextMessage) message;
                                Object data=om.getText();
                                System.out.println(data);
                                
                            } catch (JMSException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                    });
                    
                    while(true){
                    Thread.sleep(300);
                    }
                

                } catch (JMSException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } finally {
                    // 回收资源
                    if (consumer != null) {
                        try {
                            consumer.close();
                        } catch (JMSException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }

                    if (session != null) {
                        try {
                            session.close();
                        } catch (JMSException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }

                    if (connection != null) {
                        try {
                            connection.close();
                        } catch (JMSException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }

                }
    }
    

    public static void main(String[] args) {
        consumMessage();

    }


}

Pom.xml

    <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-client</artifactId>
            <version>5.14.3</version>
        </dependency>

 

posted @ 2020-02-02 22:01  咔咔kk  阅读(222)  评论(0编辑  收藏  举报