有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java I向activemq代理发送一条定时消息,但在web控制台中显示两条消息

我编写了一个简单的ActiveMQ客户端程序,用于生成如下消息:

public static void main(String[] args) throws Throwable
{
    final ActiveMQConnectionFactory conFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
    final QueueConnection connection = conFactory.createQueueConnection();
    final Session session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
    final Destination destination = new ActiveMQQueue("MJ_SAF");
    final MessageProducer producer = session.createProducer(destination);

    Message message = session.createTextMessage("test");
    message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, 20);
    message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_PERIOD, 1);
    message.setIntProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT, 1);
    producer.send(message);
}

执行此程序时,我希望在ActiveMQ的计划部分存储一条消息,并在20秒后发送MJ_SAF队列,但当我连接到web控制台时,看到以下结果:

enter image description here

MJ_SAF存储了两条消息,这是不正确的,但当我正常发送消息时(没有调度),我在web控制台中看到一条消息

public static void main(String[] args) throws Throwable
{
    final ActiveMQConnectionFactory conFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
    final QueueConnection connection = conFactory.createQueueConnection();
    final Session session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
    final Destination destination = new ActiveMQQueue("MJ_SAF");
    final MessageProducer producer = session.createProducer(destination);

    Message message = session.createTextMessage("test");
    producer.send(message);
}

通过以上代码,一切都很好:

enter image description here

我不理解这种行为。有人知道原因吗


共 (1) 个答案

  1. # 1 楼答案

    您将属性ScheduledMessage.AMQ_SCHEDULED_REPEAT设置为1,因此它将重复1次,总共提供2条消息

    有关属性的描述,请参见here。据我所知,您当前的设置将等待20毫秒,发布1条消息,等待1毫秒,然后发布第二条消息,然后结束