异步投递 package com.atguigu.activemq.queue; import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.activemq.ActiveMQMessageProducer; import org.apache.activemq.AsyncCallback; import javax.jms.*; import java.util.UUID; public class JmsProduceAsyncSend { public static final String ACTIVEMQ_URL = "tcp://192.168.227.128:61617"; // public static final String ACTIVEMQ_URL = "tcp://localhost:61618"; public static final String QUEUE_NAME = "queue-AsyncSend"; public static void main(String[] args) throws JMSException { //1 创建连接工厂,按照给定的url地址,采用默认用户名和密码 ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL); // 开启异步投递 activeMQConnectionFactory.setUseAsyncSend(true); //2 通过连接工厂,获得连接connection并启动访问 Connection connection = activeMQConnectionFactory.createConnection(); connection.start(); //3 创建会话session // 两个参数,第一个是事务,第二个是签收 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); //4 创建目的地(具体是队列还是主题) Queue queue = session.createQueue(QUEUE_NAME); //5 创建消息的生产者 ActiveMQMessageProducer activeMQMessageProducer = (ActiveMQMessageProducer) session.createProducer(queue); activeMQMessageProducer.setDeliveryMode(DeliveryMode.PERSISTENT); //6 通过使用messageProducer发送给mq for (int i = 1; i <= 3; i++) { //7 创建消息,好比学生按照阳哥的要求写好面试题消息 TextMessage textMessage = session.createTextMessage("msg" + i); // textMessage.setStringProperty("c01","vip"); //8 通过messageProducer发送给mq String msgID = UUID.randomUUID().toString() + "msg"; textMessage.setJMSMessageID(msgID); activeMQMessageProducer.send(textMessage, new AsyncCallback() { @Override public void onSuccess() { System.out.println(msgID + "send ok"); } @Override public void onException(JMSException e) { System.out.println(msgID + "send failed"); } }); // MapMessage mapMessage = session.createMapMessage(); // mapMessage.setString("k1","v1"); // producer.send(mapMessage); } //9 关闭资源 activeMQMessageProducer.close(); session.close(); // try { // // ok // // 当事务选择true时 // session.commit(); // } catch (JMSException e) { // // error // e.printStackTrace(); // session.rollback(); // } finally { // if (null != session) { // session.close(); // } // } connection.close(); System.out.println("***消息发布到MQ完成"); } }
延时+定时投递
首先开启定时投递支持
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="lzymq" dataDirectory="${activemq.data}" schedulerSupport="true">
package com.atguigu.activemq.queue; import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.activemq.ScheduledMessage; import javax.jms.*; public class JmsProduceDelay { public static final String ACTIVEMQ_URL = "tcp://192.168.227.128:61618";// public static final String ACTIVEMQ_URL = "tcp://localhost:61618"; public static final String QUEUE_NAME = "queue-delay"; public static void main(String[] args) throws JMSException { //1 创建连接工厂,按照给定的url地址,采用默认用户名和密码 ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL); //2 通过连接工厂,获得连接connection并启动访问 Connection connection = activeMQConnectionFactory.createConnection(); connection.start(); //3 创建会话session // 两个参数,第一个是事务,第二个是签收 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); //4 创建目的地(具体是队列还是主题) Queue queue = session.createQueue(QUEUE_NAME); //5 创建消息的生产者 MessageProducer producer = session.createProducer(queue); producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); //6 通过使用messageProducer发送给mq for (int i = 1; i <= 3; i++) { //7 创建消息,好比学生按照阳哥的要求写好面试题消息 TextMessage textMessage = session.createTextMessage("msg" + i); // textMessage.setStringProperty("c01","vip"); //8 通过messageProducer发送给mq long delay = 30 * 1000; long period = 4 * 1000; int repeat = 5; textMessage.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, delay); textMessage.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_PERIOD, period); textMessage.setIntProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT, repeat); producer.send(textMessage); // MapMessage mapMessage = session.createMapMessage(); // mapMessage.setString("k1","v1"); // producer.send(mapMessage); } //9 关闭资源 producer.close(); session.close(); // try { // // ok // // 当事务选择true时 // session.commit(); // } catch (JMSException e) { // // error // e.printStackTrace(); // session.rollback(); // } finally { // if (null != session) { // session.close(); // } // } connection.close(); System.out.println("***消息发布到MQ完成"); } }