activemq学习第一天

最近工作要用到activemq,以前没怎么用过,所以抓紧学习了一下,首先上apache下载比较新版本的activiemq,
这里写图片描述
解压后会发现目录结构是这样的
这里写图片描述
打开你解压的目录在cmd输入activemq.bat
这里写图片描述
ActiveMQ消息持久化有三种方式:AMQ、KahaDB、JDBC。先用jdbc的方式实现一次这里写图片描述
这里添加持久化的适配器,在配置 mysql连接池的配置,这里记得要在lib目录下添加mysql的驱动包做好这些后重启activitemq
这里写图片描述
准备工作完成后可以开始写代码了
发送的代码如下。。。。。

public class Send {
    public static void main(String[] args) {
        try {
            // 创建一个连接工厂
            String url = "tcp://localhost:61616";
            ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
            // 设置用户名和密码,这个用户名和密码在conf目录下的credentials.properties文件中,也可以在activemq.xml中配置
            connectionFactory.setUserName("system");
            connectionFactory.setPassword("manager");
            // 创建连接
            Connection connection = connectionFactory.createConnection();
            connection.start();
            // 创建Session,参数解释:
            // 第一个参数是否使用事务:当消息发送者向消息提供者(即消息代理)发送消息时,消息发送者等待消息代理的确认,没有回应则抛出异常,消息发送程序负责处理这个错误。
            // 第二个参数消息的确认模式:
            // AUTO_ACKNOWLEDGE : 指定消息提供者在每次收到消息时自动发送确认。消息只向目标发送一次,但传输过程中可能因为错误而丢失消息。
            // CLIENT_ACKNOWLEDGE : 由消息接收者确认收到消息,通过调用消息的acknowledge()方法(会通知消息提供者收到了消息)
            // DUPS_OK_ACKNOWLEDGE : 指定消息提供者在消息接收者没有确认发送时重新发送消息(这种确认模式不在乎接收者收到重复的消息)。
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            // 创建目标,就创建主题也可以创建队列
            Destination destination = session.createQueue("test");
            // 创建消息生产者
            MessageProducer producer = session.createProducer(destination);
            // 设置持久化,DeliveryMode.PERSISTENT和DeliveryMode.NON_PERSISTENT
            producer.setDeliveryMode(DeliveryMode.PERSISTENT);
            // 创建消息
            String text = "Hello!";
            TextMessage message = session.createTextMessage(text);
            // 发送消息到ActiveMQ
            producer.send(message);
            System.out.println("Message is sent!");
            // 关闭资源
            session.close();
            connection.close();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }

在浏览器输入http://localhost:8161/admin/queues.jsp
这里写图片描述

这里写图片描述
你在activiemq后台可以看到你刚才发送的消息,为了验证刚才的持久话是不是成功了查看下mysql数据库
这里写图片描述
我们看到我们刚才的消息已经持久化在mysql数据库中了,这时候我们可以写消费者的代码了

public class Get {
 public static void main(String[] args) {
     try{
            String url = "tcp://localhost:61616";
            ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
            // 设置用户名和密码,这个用户名和密码在conf目录下的credentials.properties文件中,也可以在activemq.xml中配置
            connectionFactory.setUserName("system");
            connectionFactory.setPassword("manager");
            // 创建连接
            Connection connection = connectionFactory.createConnection();
            connection.start();
            // 创建Session
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            // 创建目标,就创建主题也可以创建队列
            Destination destination = session.createQueue("test");
            // 创建消息消费者
            MessageConsumer consumer = session.createConsumer(destination);
            // 接收消息,参数:接收消息的超时时间,为0的话则不超时,receive返回下一个消息,但是超时了或者消费者被关闭,返回null
            Message message = consumer.receive(1000);
            if (message instanceof TextMessage) {
                TextMessage textMessage = (TextMessage) message;
                String text = textMessage.getText();
                System.out.println("Received: " + text);
            } else {
                System.out.println("Received: " + message);
            }
            consumer.close();
            session.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
   }
}

运行代码查看控制台
这里写图片描述
这时消费者已经消费了消息,这时查看下控制台,发现原来的消息已经被消费了
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值