java - 具有多线程的 RabbitMQ RPC 生产者

标签 java rabbitmq

如何在多线程环境下实现RPC调用? 在此处的基本教程中:https://www.rabbitmq.com/tutorials/tutorial-six-java.html ,在多线程环境中,我看到两个问题:

-如果所有内容都在不同的线程中(包括构造函数),我们为每个线程创建一个回复队列,我不认为这是一个好主意(不是?)

-如果只有 fibonacciRpc.call("4") 在不同的线程中,则回复队列的消费者可以消费错误的回复,而该回复的原始消费者将无限期地等待。

我暂时没有找到任何解决方案,但也许我不明白一些事情。

最佳答案

就我而言: channel.basicConsume(replyQueueName, true, new DefaultConsumer(channel) {} 导致内存中出现大量堆大小,只要我不删除 channel ,它就不会被清除。

根据互联网,您应该创建一个连接。 每个线程创建 channel 并为每个 channel 创建单独的队列,并在读取响应后删除队列,如果不这样做,它将在同一 channel 中不断创建新队列。

但是新的 DefaultConsumer 正在创建大量堆内存。

看来要摆脱这个我必须删除 channel 。

关于java - 具有多线程的 RabbitMQ RPC 生产者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42698744/

相关文章:

rabbitmq - 如何获取有关rabbitmq连接操作的详细日志/信息?

django - Amazon-SQS + Django-Celery 创建数千个队列(每条消息一个队列)

javascript - Cloud9 AMQP : Node JS - Channel not being created

java - 如何在 p :selectOneMenu using PrimeFaces? 中选择特定值后自动显示文本字段

java - 有效比较2个json

java - Junit - 测试对 obj.wait() 的调用

java - 计算一个数的幂;重复的话

Java:调用存储过程时出现 mysql 错误

java - 值未分配给字节

Django Celery 无法连接到 EC2 上的远程 RabbitMQ