ActiveMQ同步等待接收消息

需要模拟一个同步接收消息的MQ消费者:

场景如下:有2个APP,叫APP1 , APP2和APP3

  1. APP1给APP2发送了一个请求,APP2再去请求APP3,计算由APP3完成,APP2我们没法改变,但可以改变APP3
  2. APP1要同步等待APP2的结果返回,可以HTTP轮询,但太耗资源,所以想到MQ
  3. APP3计算完了发送一个MQ消息
  4. APP1接收到MQ消息
  5. 继续后面的操作

要实现APP1如何同步等待APP3的消息。

环境

ActiveMQ: 5.15.9
JDK: 1.8

实现

    @Test
    public void testMQ() throws Exception {
        log.info("开始...");
        final ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(
                "user", "password", "tcp://host:61616");
        final Connection connection = factory.createConnection();
        connection.start();
        final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        log.info("Session 创建完");
        receiveFromQueue(session, "jimo-q1");

        // 第二个queue
        receiveFromQueue(session, "jimo-q2");

        log.info("结束");
        connection.close();
    }

    private void receiveFromQueue(Session session, String queueName) throws JMSException {
        final Queue queue = session.createQueue(queueName);
        final MessageConsumer consumer = session.createConsumer(queue);
        /*consumer.setMessageListener((m) -> {
            try {
                System.out.println(((TextMessage) m).getText());
            } catch (JMSException e) {
                e.printStackTrace();
            }
        });*/
        // 同步等待一条消息,最多等待10分钟
        final Message msg = consumer.receive(10 * 60 * 1000L);
        System.out.println(queueName + ":" + ((TextMessage) msg).getText());
    }

验证

在activemq的命令行执行生产消息命令:

./activemq producer --user user --password password --destination queue://jimo-q1 --brokerUrl tcp://host:61616 --messageCount 1
./activemq producer --user user --password password --destination queue://jimo-q2 --brokerUrl tcp://host:61616 --messageCount 1

可看到日志输出了

2020 三月 03 09:06:42,731 [main] [INFO] [ServiceTest]: ServiceTest.testMQ( ServiceTest.java:48) - 开始...
2020 三月 03 09:06:43,157 [main] [INFO] [ServiceTest]: ServiceTest.testMQ( ServiceTest.java:54) - Session 创建完
jimo-q1:test message: 0
jimo-q2:test message: 0
2020 三月 03 09:06:55,865 [main] [INFO] [ServiceTest]: ServiceTest.testMQ( ServiceTest.java:60) - 结束
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值