Java:使用多个线程将消息发送到JMS队列

马特

我试图编写一个Java类来使用多个线程从JMS队列发送和读取消息,以加快处理速度。我有下面的代码。

    System.out.println("Sending messages");
    long startTime = System.nanoTime();

    Thread threads[] = new Thread[NumberOfThreads];
    for (int i = 0; i < threads.length; i ++) {
        threads[i] = new Thread() {
            public void run() {
                try {
                    for (int i = 0; i < NumberOfMessagesPerThread; i ++) {
                        sendMessage("Hello");
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        };
        threads[i].start();
    }

    //Block until all threads are done so we can get total time
    for (Thread thread : threads) {
        thread.join();
    }

    long endTime = System.nanoTime();
    long duration = (endTime - startTime) / 1000000;
    System.out.println("Done in " + duration + " ms");

该代码可以正常工作,并且将许多消息发送到我说的JMS队列(通过NumberOfThreads和NumberOfMessagesPerThread)。但是,我不确信它确实在多线程上工作。例如,如果我将线程设置为10,将消息设置为100(所以总共1000条消息),则与100个线程和10条消息所花费的时间相同。即使下面的这段代码也需要相同的时间。

    for (int i = 0; i < 1000; i ++) {
        sendMessage("Hello");
    }

我做对的线程对吗?我希望多线程代码比普通的for循环要快得多。

克劳迪奥

您是否在所有线程之间共享一个连接(一个生产者)?如果是这样,那么可能是您在那里遇到了一些线程争用,并且您仅限于生产者和代理之间的套接字连接速度。当然,这将很大程度上取决于您正在使用的jms实现(以及是否使用asyncSends)。

我将建议您使用完全独立的生成器来重复测试(尽管在消息排序方面,您将失去“队列”语义,但我认为这是可以预期的)。

另外,我不建议运行具有100个线程之类的数字的性能测试。请记住,您的多线程功能有时会受到计算机所拥有的内核数量的限制(或多或少,此处您还拥有大量IO,因此它可能比内核多一些线程,但100个线程可能会有所帮助)。我认为这不是一个很好的数字)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Java Swing将消息发送到JMS队列

来自分类Dev

使用Spring Boot将消息发送到JMS队列

来自分类Dev

使用Java将XML内容发送到JMS队列

来自分类Dev

无法使用Spring的JmsTemplate将JMS消息发送到activemq队列

来自分类Dev

将Spring Integration JMS消息发送到特定队列(动态)

来自分类Dev

如何将原始消息有效负载发送到JMS错误队列

来自分类Dev

1分钟后,骆驼继续通过JMS将消息发送到队列中

来自分类Dev

如何使用python将多个消息发送到eventhub

来自分类Dev

使用 SQS 队列的 lambda 函数如何将消息发送到死信队列?

来自分类Dev

NATS 发布者能否将一条消息发送到多个队列中?

来自分类Dev

C Linux pthread:使用消息队列将数据从一个线程发送到另一个线程会产生意外结果

来自分类Dev

使用Java将消息发送到WhatsApp

来自分类Dev

使用TCP将消息从Java发送到Logstash

来自分类Dev

将 JMS 消息从 Java EE 应用程序发送到 Java SE 应用程序

来自分类Dev

rabbitmq,无法将消息发送到特定队列

来自分类Dev

是否可以将Azure队列消息发送到端点

来自分类Dev

KafkaProducer无法成功将消息发送到队列中

来自分类Dev

如何使用 JMS 将预定消息发送到 Azure 服务总线

来自分类Dev

RabbitMQ-将消息发送到队列中的特定使用者

来自分类Dev

如何使用Scala将消息正确发送到Amazon SMS队列?

来自分类Dev

使用 amqplib 将消息发送到队列的奇怪低性能?

来自分类Dev

JMS消息生成器不会将消息发送到队列

来自分类Dev

将消息发送到线程是什么意思?

来自分类Dev

将消息从活动A创建的线程发送到活动B

来自分类Dev

Java多线程,如何将消息发送到主类并进行处理?

来自分类Dev

连接停止时,JMS连接传递发送到队列的消息

来自分类Dev

将消息发送到多个服务器pyzmq

来自分类Dev

Apache Kafka如何将消息发送到多个使用者组?

来自分类Dev

使用twilio Passthrough API将消息发送到多个号码

Related 相关文章

  1. 1

    使用Java Swing将消息发送到JMS队列

  2. 2

    使用Spring Boot将消息发送到JMS队列

  3. 3

    使用Java将XML内容发送到JMS队列

  4. 4

    无法使用Spring的JmsTemplate将JMS消息发送到activemq队列

  5. 5

    将Spring Integration JMS消息发送到特定队列(动态)

  6. 6

    如何将原始消息有效负载发送到JMS错误队列

  7. 7

    1分钟后,骆驼继续通过JMS将消息发送到队列中

  8. 8

    如何使用python将多个消息发送到eventhub

  9. 9

    使用 SQS 队列的 lambda 函数如何将消息发送到死信队列?

  10. 10

    NATS 发布者能否将一条消息发送到多个队列中?

  11. 11

    C Linux pthread:使用消息队列将数据从一个线程发送到另一个线程会产生意外结果

  12. 12

    使用Java将消息发送到WhatsApp

  13. 13

    使用TCP将消息从Java发送到Logstash

  14. 14

    将 JMS 消息从 Java EE 应用程序发送到 Java SE 应用程序

  15. 15

    rabbitmq,无法将消息发送到特定队列

  16. 16

    是否可以将Azure队列消息发送到端点

  17. 17

    KafkaProducer无法成功将消息发送到队列中

  18. 18

    如何使用 JMS 将预定消息发送到 Azure 服务总线

  19. 19

    RabbitMQ-将消息发送到队列中的特定使用者

  20. 20

    如何使用Scala将消息正确发送到Amazon SMS队列?

  21. 21

    使用 amqplib 将消息发送到队列的奇怪低性能?

  22. 22

    JMS消息生成器不会将消息发送到队列

  23. 23

    将消息发送到线程是什么意思?

  24. 24

    将消息从活动A创建的线程发送到活动B

  25. 25

    Java多线程,如何将消息发送到主类并进行处理?

  26. 26

    连接停止时,JMS连接传递发送到队列的消息

  27. 27

    将消息发送到多个服务器pyzmq

  28. 28

    Apache Kafka如何将消息发送到多个使用者组?

  29. 29

    使用twilio Passthrough API将消息发送到多个号码

热门标签

归档