activemq消息队列

1.下载http://activemq.apache.org/activemq-5157-release.html包,解压后直接双击C:\Users\Mac\Desktop\apache-activemq-5.15.7-bin\apache-activemq-5.15.7\bin\win64下的activemq.bat即可运行activemq服务,浏览器运行http://localhost:8161/admin/topics.jsp即可查看消息队列信息。(包括消息生产者,消息消费者,消息队列queue、订阅topic)

2.默认是用户密码和用户账号是:system、manager,在config文件下的

3.可手动修改配置:

 <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}"  useJmx="true">  /**   useJmx="true"
    <managementContext createConnector="true"/>   // createConnector="true"

 

4.queue普通队列代码,一个消息生产者和一个消息消费者,

 生产者: 

/**
 * 消息生产者
 * @author Mac
 *
 */
public class QueueProducer {

    public static void main(String[] args) {
        //连接信息设置
        String username="system";
        String password="manager";
        String brokerUrl="failover://tcp://localhost:61616";
        //连接工厂
        ConnectionFactory cf=null;
        //连接
        Connection c=null;
        //会话 接受或发送消息消息的线程
        Session session=null;
        //消息目的地,消息队列
        Destination des=null;
        //消息生产者
        MessageProducer mp=null;
        //发送消息
        TextMessage tm=null; 
        //实例化连接工厂
        cf=new ActiveMQConnectionFactory(username,password,brokerUrl);
        try {
            c=cf.createConnection();//创建连接
            c.start();
            session=c.createSession(true,Session.AUTO_ACKNOWLEDGE);//创建会话,auto_acknowledge自动应答
            des=session.createQueue("QueueTest");//创建名为queueTest名称的消息队列
            mp=session.createProducer(des);//消息生产者 
            tm=session.createTextMessage("queue测试新消息666888");//创建消息
            mp.send(tm);
            session.commit();
        } catch (Exception e) {
             e.printStackTrace();
        }finally{
            if(c!=null){
                try {
                    c.close();
                } catch (Exception
                        e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        
    }
}
 

消费者: 

/**
 * 消息消费者
 * @author Mac
 *
 */
public class QueueConsumer {
 
    public static void main(String[] args) {
        String username="system";
        String password="manager";
        String url="failover://tcp://localhost:61616";
        
        ConnectionFactory cf=null;//连接工厂
        Connection c=null;//连接实例
        Session session=null;//会话
        Destination des=null;//消息队列
        MessageConsumer mc=null;//消息消费者
        
        cf=new ActiveMQConnectionFactory(username,password,url);
        
        try {
            c=cf.createConnection();
            c.start();
            session=c.createSession(true, Session.AUTO_ACKNOWLEDGE);
            des=session.createQueue("QueueTest");//连接到名为QueueTest的消息队列
            mc=session.createConsumer(des);//创建消息消费者
            
            while(true){
                TextMessage tm=(TextMessage) mc.receive(100000);
                if(tm!=null){
                    String text=tm.getText();
                    System.out.println("成功消费到消息队列中的消息:"+text);
                }else{
                    break;
                }
            }
        } catch (JMSException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                c.close();
            } catch (JMSException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
    }

5.topic订阅模式代码:

生产者: 

/**
 * 主题生产者
 * @author Mac
 *
 */
public class TopicProducer {

    public static void main(String[] args) {
        
        String username="system";
        String password="manager";
        String url="failover://tcp://localhost:61616";
        
        ConnectionFactory cf=null;
        Connection c=null;
        Session s=null; 
        TextMessage tm=null;
        Topic top=null;
        MessageProducer mp=null; 
        try {
            cf=new ActiveMQConnectionFactory(username,password,url);//创建连接 
            c=cf.createConnection();
            c.start();//开始连接
            s=c.createSession(true, Session.AUTO_ACKNOWLEDGE);//创建会话
            top=s.createTopic("TopicTest");//创建topic订阅队列
            
            mp=s.createProducer(top);//创建订阅消息生产者
            mp.setDeliveryMode(DeliveryMode.NON_PERSISTENT);//数据不持久化
             
              for (int i=0; i<10; i++) {
                    //创建要发送的文本信息
                  tm = s.createTextMessage("Topic主题测试" +(i+1));
                    //通过主题生产者发出消息 
                    mp.send(tm);
                    System.out.println("发送成功:" + tm.getText());
                } 
            
            s.commit(); 
        } catch (Exception e) {
             e.printStackTrace();
        }finally{
            if(null!=c){
                try {
                     //c.close();
                } catch (Exception e) { 
                    e.printStackTrace();
                }
            }
        }
        
    }
}
 

消费者: 

/*
 * 主题消费者
 */
public class TopicConsumer {

    public static void main(String[] args) {
        
        String username="system";
        String password="manager";
        String url="failover://tcp://localhost:61616";
        
        ConnectionFactory connectionFactory=null;
        Connection connection=null;
        Session session=null;  
        Topic topic=null;
        MessageConsumer messageConsumer=null; 
        
        connectionFactory=new ActiveMQConnectionFactory(username,password,url);
        try {
            connection=connectionFactory.createConnection();
            connection.start();
            session=connection.createSession(true,Session.AUTO_ACKNOWLEDGE);
            topic=session.createTopic("TopicTest"); 
            messageConsumer=session.createConsumer(topic);
            System.out.println("1");
            messageConsumer.setMessageListener(new myMessageListener()); 
            System.out.println("2");
        } catch (JMSException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            if(null!=connection){
                try {
                     //connection.close();
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                
                    e.printStackTrace();
                }
            }
        }
    }
}

class myMessageListener implements MessageListener{

    @Override
    public void onMessage(Message mes) {
        System.out.println("xx");
         TextMessage tm=(TextMessage) mes;
         try {
            System.out.println("消息:"+tm.getText());
        } catch (JMSException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
}
 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值