JMSProduce.java:
package com.test.active;
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 Administrator
*
*/
public class JMSProduce {
public static final String userName=ActiveMQConnection.DEFAULT_USER;//这里使用默认连接用户名(null)
public static final String password=ActiveMQConnection.DEFAULT_PASSWORD;//这里使用默认连接密码(null)
public static final String brokerURL=ActiveMQConnection.DEFAULT_BROKER_URL;//这里使用默认连接地址(failover://tcp://localhost:61616)
public static final int SENDNUM=10;//发送的消息数量
public static void main(String[] args) throws JMSException {
//定义连接工厂
ConnectionFactory connectionFactory;
//连接
Connection connection;
//会话 接受或发送消息的线程(可以有事务)
Session session;
//消息的目的地
Destination destination;
//消息生产者
MessageProducer messageProducer;
//实例化连接工厂
connectionFactory=new ActiveMQConnectionFactory(userName, password, brokerURL);
//通过连接工厂获取连接
connection=connectionFactory.createConnection();
//启动连接
connection.start();
//创建Session,第一个参数为是否开启事务,第二个参数为消息确认的方式
session=connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
//创建消息队列
destination=session.createQueue("FirstQueue1");
//创建消息生产者
messageProducer=session.createProducer(destination);
//发送消息
sendMessage(session, messageProducer);
//友谊创建Session时,确定加入事务控制,所以这里要commit提交才能生效
session.commit();
if(connection!=null)connection.close();
}
public static void sendMessage(Session session,MessageProducer messageProducer) throws JMSException{
for(int i=0;i<SENDNUM;i++){
TextMessage textMessage=session.createTextMessage("ActiveMQ 发送的消息:"+i);
System.out.println("ActiveMQ 发送的消息:"+i);
messageProducer.send(textMessage);
}
}
}
JMSConsumer.java:
package com.test.active;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class JMSConsumer {
public static final String userName=ActiveMQConnection.DEFAULT_USER;//这里使用默认连接用户名(null)
public static final String password=ActiveMQConnection.DEFAULT_PASSWORD;//这里使用默认连接密码(null)
public static final String brokerURL=ActiveMQConnection.DEFAULT_BROKER_URL;//这里使用默认连接地址(failover://tcp://localhost:61616)
public static final int SENDNUM=10;//发送的消息数量
public static void main(String[] args) throws JMSException {
//定义连接工厂
ConnectionFactory connectionFactory;
//连接
Connection connection;
//会话 接受或发送消息的线程(可以有事务)
Session session;
//消息的目的地
Destination destination;
//消息消费者
MessageConsumer messageConsumer;
//实例化连接工厂
connectionFactory=new ActiveMQConnectionFactory(userName, password, brokerURL);
//通过连接工厂获取连接
connection=connectionFactory.createConnection();
//启动连接
connection.start();
//创建Session,第一个参数为是否开启事务,第二个参数为消息确认的方式
session=connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//创建消息队列
destination=session.createQueue("FirstQueue1");
//创建消息消费者
messageConsumer=session.createConsumer(destination);
//1.第一种方法:弊端:不断地请求,查看是否有消息,不推荐
// while(true){
// //100s接受一次消息
// TextMessage messag=(TextMessage) messageConsumer.receive(100000);
// if(messag!=null){
// System.out.println("收到的消息"+messag.getText());
// }else{
// break;
// }
// }
//2.第二种方法,使用监听器
messageConsumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
// TODO Auto-generated method stub
try {
System.out.println("收到的消息为:"+((TextMessage)message).getText());
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
}