消息发布者代码:
package com.java1234.activemq2;
import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQConnectionFactory;
/** * 消息发布者 * @author ALWZ * */ public class JMSProducer { private static final String USERNAME =ActiveMQConnection.DEFAULT_USER;//使用默认用户名
private static final String PASSWORD =ActiveMQConnection.DEFAULT_PASSWORD;//使用默认密码
private static final String BROKEURL =ActiveMQConnection.DEFAULT_BROKER_URL;//使用默认本地连接
private static final int SENDNUM =10;//发送消息的数量
public static void main(String[] args){ ConnectionFactory connectionFactory;//连接工厂 Connection connection=null;//连接 Session session;//会话 接收或者发送消息的线程 Destination destination;//消息的目的地 MessageProducer messageProducer;//消息生产者 //实例化连接工厂 connectionFactory=new ActiveMQConnectionFactory(JMSProducer.USERNAME,JMSProducer.PASSWORD,JMSProducer.BROKEURL);
try { connection=connectionFactory.createConnection();//通过连接工程获取连接 connection.start();//启动连接 session=connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);//创建session destination=session.createTopic("FirstTopic1");//创建消息会话 messageProducer=session.createProducer(destination);//创建消息生产者 sendMessage(session, messageProducer);//发送消息 session.commit();
} catch (JMSException e) { e.printStackTrace(); }finally{ if (connection!=null) { try { connection.close(); } catch (JMSException e) { e.printStackTrace(); } } }
} /** * 发送消息 * @param session * @param messageProducer * @throws JMSException */ public static void sendMessage(Session session,MessageProducer messageProducer) throws JMSException{ for (int i = 0; i < JMSProducer.SENDNUM; i++) { TextMessage message =session.createTextMessage("ActiveMQ 发送的消息"+i);//创建消息 System.out.println("发布的消息:"+"ActiveMQ 发布的消息"+i); messageProducer.send(message);//发送消息 } }
} |
消息订阅者和监听器:
package com.java1234.activemq;
import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageConsumer; import javax.jms.Session;
import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQConnectionFactory; /** * 消息消费者 * @author ALWZ * */ public class JMSConsumer2 {
private static final String USERNAME =ActiveMQConnection.DEFAULT_USER;//使用默认用户名
private static final String PASSWORD =ActiveMQConnection.DEFAULT_PASSWORD;//使用默认密码
private static final String BROKEURL =ActiveMQConnection.DEFAULT_BROKER_URL;//使用默认本地连接
public static void main(String[] args){ ConnectionFactory connectionFactory;//连接工厂 Connection connection=null;//连接 Session session;//会话 接收或者发送消息的线程 Destination destination;//消息的目的地 MessageConsumer messageConsumer;//消息的消费者
//实例化连接工厂 connectionFactory=new ActiveMQConnectionFactory(JMSConsumer2.USERNAME, JMSConsumer2.PASSWORD,JMSConsumer2.BROKEURL);
try { connection=connectionFactory.createConnection();//通过连接工厂获取连接 connection.start();//启动连接 session=connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE); destination=session.createTopic("FirstTopic1");//创建消息订阅者 messageConsumer=session.createConsumer(destination);//创建消息消费者 //注册消息监听,如果两个订阅者,就会有两个监听者, //这里括号里面的代码就会一个对应一个的写 messageConsumer.setMessageListener(new Listener());
} catch (JMSException e) { e.printStackTrace(); } } } |
package com.java1234.activemq2;
import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; /** * 消息监听--订阅者的监听 * @author ALWZ * */ public class Listener implements MessageListener{
@Override public void onMessage(Message message) { try { System.out.println("订阅者收到的消息:"+((TextMessage)message).getText()); } catch (JMSException e) { e.printStackTrace(); } }
} |
这里启动的时候得注意:必须得先启动订阅者,再启动发布者。只有订阅之后才可以收到消息。
如果有两个订阅者的话:运行显示: