ActiveMq-Publisher/Subscribe入门例子

           启动ActiveMq、添加依赖与之前完全相同,此处省略

1.发布端

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageProducer;
import javax.jms.Session;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Publisher 
{
	private static Logger logger = LoggerFactory.getLogger(Publisher.class);
	
	public static void main(String[] args) 
	{
        ConnectionFactory connectionFactory;
        Connection connection = null;
        Session session;
        MessageProducer producer;
        connectionFactory = new ActiveMQConnectionFactory(
                ActiveMQConnection.DEFAULT_USER,
                ActiveMQConnection.DEFAULT_PASSWORD,
                "tcp://localhost:61616");
        try 
        {
            connection = connectionFactory.createConnection();
            connection.start();
            
            session = connection.createSession(Boolean.TRUE,
                    Session.AUTO_ACKNOWLEDGE);

            //注意这里与ptp例子的区别,使用null作为destination
            producer = session.createProducer(null);
            
            producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
            
            sendMessage(session, producer);
            
            session.commit();
        } 
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally 
        {
            try 
            {
                if (null != connection)
                    connection.close();
            }
            catch (Throwable ignore) 
            {
            }
        }
    
	}

	private static void sendMessage(Session session, MessageProducer producer) throws JMSException 
	{
		Destination destination = session.createTopic("pub/sub");
		Message message = session.createMapMessage();
		message.setStringProperty("company", "alibaba");
		message.setStringProperty("department", "b2b");
		logger.info("destination is {};message is ready to send", destination);
		
		producer.send(destination, message);
	}
}

2.接收端

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageConsumer;
import javax.jms.Session;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;


public class Subscribe 
{
	public static void main(String[] args) 
	{
        ConnectionFactory connectionFactory;
        Connection connection = null;
        Session session;
        Destination destination;
        MessageConsumer consumer;
        
        connectionFactory = new ActiveMQConnectionFactory(
                ActiveMQConnection.DEFAULT_USER,
                ActiveMQConnection.DEFAULT_PASSWORD,
                "tcp://localhost:61616");
        try 
        {
            connection = connectionFactory.createConnection();
            connection.start();
            session = connection.createSession(Boolean.FALSE,
                    Session.AUTO_ACKNOWLEDGE);
            
            destination = session.createTopic("pub/sub");
            consumer = session.createConsumer(destination);
            
            //设置指定的监听器
            consumer.setMessageListener(new MyListener());
            
            Thread.sleep(100*1000);
        } 
        catch (Exception e) 
        {
            e.printStackTrace();
        }
        finally 
        {
            try 
            {
                if (null != connection)
                    connection.close();
            }
            catch (Throwable ignore) 
            {
            }
        }
    
	}
}

3.监听器

import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageListener;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyListener implements MessageListener 
{
	private static Logger logger = LoggerFactory.getLogger(MyListener.class);
	
	public void onMessage(Message message) 
	{
		MapMessage mapMessage = (MapMessage) message;
		try 
		{
			String company = mapMessage.getStringProperty("company");
			String department = mapMessage.getStringProperty("department");
			
			logger.info("company is {} ; department is {}", company,department); 
		} catch (JMSException e) 
		{
			e.printStackTrace();
		}
	}

}


4.测试

       先启动接收端,再启动发布端,结果为:

[main] INFO com.mycompany.app.pub.sub.Publisher - destination is topic://pub/sub;message is ready to send

[ActiveMQ Session Task-1] INFO com.mycompany.app.pub.sub.MyListener - company is alibaba ; department is b2b


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值