ActiveMQ的作用分析

ActiveMQ的作用分析

  • 是Apache出品,最流行的,能力强劲的开源消息总线,完全支持JSM1.1和J2EE规范实现
  • 防止拥堵,解决大批量并发访问问题
  • 工作原理
    这里写图片描述
  • 使用场景
    1.用户注册,重点用户信息数据库保存,发短信、发邮件,增加业务处理复杂度,这时候使用MQ,将发短信、发邮件,通知MQ,由另外服务平台完成
    2.搜索平台、缓存平台
    查询数据,建立缓存、索引,不从数据库查询,从缓存或者索引库查询
    当增删改数据时,发送消息给MQ,缓存平台、索引平台从MQ获取到这个消息,更新缓存或者索引

ActiveMQ使用的是标准的生产者和消费者模型

  • 有两种数据结构Queue、Topic
    1.Queue队列:生产者生产了一个消息,只能有一个消费者消费(一对一)
    2.Topic话题:生产者生产了一个消息,可以被多个消费者消费(一对多)

使用Java程序操作ActiveMQ

  • 注意:在Java程序员的实际开发中,不需要默写出ActiveMQ代码
  • 步骤1.在STS软件中创建一个Maven项目(点击Ctrl+n)
    这里写图片描述
    这里写图片描述
    这里写图片描述
  • 步骤2.导入相关jar包,使用Maven坐标
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
  • 步骤3.编写生产者代码
// 消息生产者
@Test
public void testProduce() throws JMSException {
    // 连接工厂
    // new ActiveMQConnectionFactory(userName, password, brokerURL)使用默认用户名,密码,路径 
    // 路径:tcp://host:61616
    ConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
    // 获得一个链接
    Connection connection = connectionFactory.createConnection();
    // 建立会话
    Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
    // 创建队列或者话题对象
    Queue queue = session.createQueue("HelloWorld");

    // 创建生产者或者消费者
    MessageProducer messageProducer = session.createProducer(queue);
    // 发送消息
    for (int i = 0; i < 10; i++) {
        messageProducer.send(session.createTextMessage("你好,activeMQ:" + i));
    }
    // 提交操作
    session.commit();
}

执行之后结果:
这里写图片描述

  • 编写消费者代码
// 创建直接消费的消费者对象
@Test
public void testConsumerMQ() throws JMSException {
    // 连接工厂
    // new ActiveMQConnectionFactory(userName, password,
    // brokerURL)使用默认用户名,密码,路径
    // 路径:tcp://host:61616
    ConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
    // 获得一个链接
    Connection connection = connectionFactory.createConnection();
    // 开启一个链接
    connection.start();
    // 建立会话,第一个参数:是否使用事务,操作消息队列后,必须使用session.commit();
    Session session = connection.createSession(false,
            Session.AUTO_ACKNOWLEDGE);
    // 创建队列或者话题对象
    Queue queue = session.createQueue("HelloWorld");

    // 创建消费者
    MessageConsumer consumer = session.createConsumer(queue);

    while(true) {
        // 参数表示几秒
        TextMessage message = (TextMessage) consumer.receive(1000);
        if (message != null) {
            System.out.println(message);
        } else {
            break;
        }
    }
}


// 创建使用监听器的消费者代码
@Test
public void testConsumerMQ2() throws JMSException {
    // 连接工厂
    // new ActiveMQConnectionFactory(userName, password,
    // brokerURL)使用默认用户名,密码,路径
    // 路径:tcp://host:61616
    ConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
    // 获得一个链接
    Connection connection = connectionFactory.createConnection();
    // 开启一个链接
    connection.start();
    // 建立会话,第一个参数:是否使用事务,操作消息队列后,必须使用session.commit();
    Session session = connection.createSession(false,
            Session.AUTO_ACKNOWLEDGE);
    // 创建队列或者话题对象
    Queue queue = session.createQueue("HelloWorld");

    // 创建消费者
    MessageConsumer consumer = session.createConsumer(queue);

    consumer.setMessageListener(new MessageListener() {
        // 每次接收消息,自动调用onMessage
        public void onMessage(Message message) {
            TextMessage textMessage = (TextMessage) message;
            System.out.println(textMessage);
        }
    });
}

执行之后下过如下
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值