当前位置: 首页 > 知识库问答 >
问题:

ActiveMQ

吕高雅
2023-03-14

我有一台服务器,在这台服务器上,我有一个将消息发送到单个队列的发布服务器。从这个队列中,我有5个消费者,每个消费者都有自己的JVM。其理念是,无论哪位消费者是免费的,出版商的信息都应该尽快被他们使用。有时所有5个都是空闲的,然后ActiveMQ可能会选择一个来接收/退出消息(?)。

所有消息都是非持久的。我使用ActiveMQ几乎开箱即用,只有一个队列和零修补任何配置文件。我也没有使用交易。

发布者在返回时间后立即以毫秒为单位记录时间:

public void sendMessage(String text) {
    TextMessage message = null;
    try {
        message = session.createTextMessage(text);
        producer.send(message);
        System.out.println("JUST FINISHED SENDING MESSAGE " + System.currentTimeMillis());
    } catch (JMSException e) {
        e.printStackTrace();
    }
}

每个消费者(运行自己的JVM)都在监听队列,每次监听时间为2分钟:

        Message message = consumer.receive(120000);
        if (message instanceof TextMessage) {
            TextMessage textMessage = (TextMessage) message;
            text = textMessage.getText();
            System.out.println("MESSAGE RECEIVED " + System.currentTimeMillis());
        }

通常情况下,消费者会在与“刚刚发送完的消息”完全相同的时间(以毫秒为单位)记录“收到的消息”,这很完美。但有时,发布和消费之间会有15毫秒左右的莫名其妙的延迟,即使所有消费者都闲着。考虑到所有进程都在同一台服务器上,而且延迟是绝对关键的,我对有时会出现这种延迟感到沮丧。

  1. 当从一个队列中运行多个使用者时,这是预期的结果,还是与此无关
  2. 我能做些什么来减轻延误吗

提前感谢您提供的有用建议。

共有1个答案

郭永安
2023-03-14

在与网络消费者和中央代理打交道时,出现这种短暂延迟的原因有很多。代理或消费者的CPU调度以及管理网络接口的工作可能会导致小问题。当消费者或代理上的JVM清理时,您可能还会看到GC暂停,这可能会延迟分派或消费。当然,线程间信号有时可能会有短暂的延迟,这取决于并行运行的各种事情,所以这些短暂的暂停确实是我要投入大量时间的事情,除非你到了最后一个问题,你需要解决的所有其他可能的事情,你还没有处理。

 类似资料:
  • 问题内容: 我是新来的消息,想知道的区别,,和 任何人都知道这些产品的不同之处吗? 提前致谢 ! 编辑: 还想知道学习这些东西的任何好地方/资源。 问题答案: ActiveMQ是一个消息代理,它实现JMS API并支持许多跨语言客户端和网络协议。它使您可以实现队列或主题,并编写侦听器或订阅者以响应队列事件。 Mule和ServiceMix是开源ESB(企业服务总线)。ESB具有JMS以外的功能:排

  • 问题内容: 在我的JMS应用程序上,我们在生产者上使用临时队列,以便能够接收来自消费者应用程序的回复。 我在这个线程上遇到了与我完全相同的问题:http : //activemq.2283324.n4.nabble.com/jira- Created-AMQ-3336-Temporary-Destination-errors-on-HA-failover-in -broker- network-w

  • 问题内容: 我正在尝试使用JNDI创建与ActiveMQ的简单连接。 我有 队列名为“ example.A”。 根据接触JNDI的ActiveMQ文档,如果我想通过JNDI使用ConectionFactories和Queues(主题),则必须将jndi.properties文件放在我的类路径中。据我了解,默认情况下,activeMQ类路径是%activemq%/ conf目录。我没有改变。所以我的

  • 问题内容: 如果要在Apache ActiveMQ上实现JAAS授权,是否必须使用activemq.xml配置文件中的插件? 这种方式确实不好,因为如果要更改授权,则必须更改activemq.xml文件并 重新启动 服务器才能正常工作。 是否可以通过更改其他属性文件而不是activemq.xml文件来使用类似JAAS身份验证的方法?还是可以自定义我自己的授权插件? 谢谢。 问题答案: 每当我设置A

  • 问题内容: 我有一个使用SSL传输的activeMQ代理。我大约有10位使用代理的消费者。我正在使用骆驼配置路线。 即使我重新启动使用者,它总是挂断并且不会使用新消息,即使队列中有待处理的消息也是如此。 我开始尝试一次遍历我的消费者,试图找出问题所在,以找出问题的根源。我终于找到了一个消费者,我可以重新解决这个问题。一段时间后它将挂起,但是,如果我进入活动的MQ管理控制台并尝试查看队列中的消息,它

  • 问题内容: 我已经阅读了一些有关Spring Boot中对jms支持的示例。 通常,发送者,接收者和active-mq(实际上可以是任何其他与jms兼容的消息代理)都位于同一应用程序中。 我知道我可以使用独立的主动mq并使用属性 s: 但是我想要2个应用程序: 1-发送器(从嵌入式接收器连接到jms并在其中发送消息) 2-接收器(up应用程序和嵌入式activemq) 可行吗? 问题答案: 只需在

  • 问题内容: 对于这两个消息传递系统中的哪个是我,我将不胜感激。 更容易管理 需要了解和避免的陷阱或魔术少 具有较少的总体依赖 很简单。 问题答案: 更容易管理 hornetQ具有清晰的管理API,并且非常易于使用。 需要了解和避免的陷阱或魔术少 hornetQ专为嵌入式案例设计。将其集成到代码中非常非常容易。实际上,您可以用少于10行的代码来完成此操作。 具有较少的整体依赖性 HornetQ上的所

  • 问题内容: 我正在尝试使用AMQP 1.0连接到ActiveMQ代理,但是我想在我的应用程序代码中使用JMS。我对使用JMS感兴趣,主要是因为我希望开发人员能够使用他们已经熟悉的API。 我有在本地主机上运行的ActiveMQ 5.14.0和以下代码: 代码总是以相同的方式失败,并且在stacktrace中具有以下根本原因: 这发生在方法调用上。 如果我对ActiveMQ tcp端点运行相同的代码