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>