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

How to properly write RabbitMQ Publisher on Java?

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

连接:

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

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

频道

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

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