发送/接收消息的例子

1、消息发送程序

public class UMProducer {
	private MessageProducer producer = null;
	private Connection connection = null;
	private Session session = null;
	
	public void start(){
		try{
			//自动重连
			ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(  
	                ActiveMQConnection.DEFAULT_USER,  
	                ActiveMQConnection.DEFAULT_PASSWORD,  
	                "failover://(tcp://127.0.0.1:61616?tcpNoDelay=true)"); 

			connection = connectionFactory.createConnection();  
			((ActiveMQConnection)connection).setUseAsyncSend(true);  //异步发送消息
			connection.start(); 
			
			session = connection.createSession(Boolean.TRUE, Session.CLIENT_ACKNOWLEDGE); //使用事务时,将忽略ACK
			Destination destination = session.createQueue("queue_msg");
			
			producer = session.createProducer(destination);
			producer.setDeliveryMode(DeliveryMode.PERSISTENT); //消息持久化
			producer.setTimeToLive(1000 * 60 * 60 * 24); //消息过期时间,单位为 毫秒
			
			int i = 0;
			while(true){
				++i;
				
				MessageEntity entity = new MessageEntity();
				entity.setMessage("activeMQ mseeage " + i);
				
				ObjectMessage message = session.createObjectMessage(entity);
		        producer.send(message); 
		        
				//在事务性会话中,只有commit之后,消息才会真正到达目的地
		        //commit动作比较耗时,采取批量commit的策略以提高性能
		        if(i % 1000 == 0){
		        	session.commit(); 
		        }
		        
				System.out.println("waiting...   " + i);
			}
			
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}
	
	public void stop(){
		try{
			if(session != null) {
				session.close();  
			}
			
			if(connection != null) {
				connection.close();
			}
			
			if(producer != null){
				producer.close();
			}
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		UMProducer producer = new UMProducer();
		producer.start();
	}
}

  

2、消息接收程序

public class UMConsumer {
	private String name;
	private MessageConsumer consumer = null;
	private Connection connection = null;
	private Session session = null;
	
	public UMConsumer(String name){
		this.name = name;
	}
	
	public void start(){
		try{
			//自动重连
			ConnectionFactory connectionFactory =  
	            new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD,  
	                "failover://(tcp://127.0.0.1:61616?tcpNoDelay=true)");  
	          
	        connection = connectionFactory.createConnection();  
	        connection.start();  
	        
	        session = connection.createSession(Boolean.FALSE, Session.CLIENT_ACKNOWLEDGE);  
	        
	        Destination destination = session.createQueue("queue_msg"); 
	        consumer = session.createConsumer(destination);  
	        
	        //异步接收消息
	        consumer.setMessageListener(new MessageListener() {
				@Override
				public void onMessage(Message message) {
					try{
						if(message instanceof ObjectMessage){
							ObjectMessage omsg = (ObjectMessage)message;
							MessageEntity entity = (MessageEntity)omsg.getObject();
							System.out.println(name + " 收到消息:" + entity.getMessage()); 
							
							//确认消息
							message.acknowledge();
						}
					}catch(Exception ex){
						ex.printStackTrace();
					}
				}
			});
	        
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}
	
	public void stop(){
		try{
			if(session != null) {
				session.close();  
			}
			
			if(connection != null) {
				connection.close();
			}
			
			if(consumer != null){
				consumer.close();
			}
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		UMConsumer consumer = new UMConsumer("UMConsumer Name");
		consumer.start();
	}
	
}

 

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值