java - 如何在Java上正确编写RabbitMQ Publisher?

标签 java queue rabbitmq client producer-consumer

我们需要为每个线程创建单独的 channel 还是为所有线程使用相同的 channel ?关于连接也有同样的问题。我们需要为每个线程使用不同的连接还是单个连接?
当我们在所有线程中使用一个 channel 和为每个线程使用单独的 channel 时,有什么区别?

最佳答案

连接:

根据java文档(https://www.rabbitmq.com/releases/rabbitmq-java-client/v3.6.5/rabbitmq-java-client-javadoc-3.6.5/):

当前的实现对于客户端 API 级别的代码来说是线程安全的,实际上除了 RPC 调用中的代码之外,内部也是线程安全的。

channel :

根据文档(https://www.rabbitmq.com/api-guide.html):

channel 实例不得在线程之间共享。应用程序应该更喜欢每个线程使用一个 Channel,而不是在多个线程之间共享相同的 Channel。虽然 channel 上的某些操作可以安全地并发调用,但有些操作则不然,并且会导致线路上出现不正确的帧交错。在线程之间共享 channel 也会干扰*发布者确认。

关于java - 如何在Java上正确编写RabbitMQ Publisher?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39853736/

相关文章:

python - 发布者等待消费消息,同时它应该做这两件事(发布和订阅来自订阅者的回复)。)

java - RabbitMq 队列已满

java - 如何在 Android 中隐藏特定列

java - 使用 Java 从 Excel 电子表格中收集列名称

java - 通过 Java 连接到 Amazon EC2 上的 PostgreSQL

java - 在 Gravity.CENTER 相对布局中向左对齐膨胀 View

c++ - 如何打印队列?

javascript - 并行 jQuery 效果

java - java中的随机唯一数

node.js - 如何在nodejs中运行长时间运行的同步操作