Java JMS连接、会话和生产者/消费者之间的关系
我想向同一队列发送一批20k JMS消息。我使用10个线程将任务拆分,因此每个线程将处理2k条消息。我不需要交易 我想知道是否建议使用一个连接、一个会话和10个制作人 如果我有一个制作人被所有线程共享呢?我的消息是否已损坏,或者是否已同步发送(不会带来性能提升) 如果我总是连接到同一队列,那么决定是否创建新连接或会话的一般原则是什么 谢谢你,很抱歉一下子问了很多问题Java JMS连接、会话和生产者/消费者之间的关系,java,jms,Java,Jms,我想向同一队列发送一批20k JMS消息。我使用10个线程将任务拆分,因此每个线程将处理2k条消息。我不需要交易 我想知道是否建议使用一个连接、一个会话和10个制作人 如果我有一个制作人被所有线程共享呢?我的消息是否已损坏,或者是否已同步发送(不会带来性能提升) 如果我总是连接到同一队列,那么决定是否创建新连接或会话的一般原则是什么 谢谢你,很抱歉一下子问了很多问题 (这里有一个类似的问题,但它并没有完全回答我所寻找的问题。)理论上,连接是线程安全的,但所有其他连接都不是,因此您应该为每个线程创
(这里有一个类似的问题,但它并没有完全回答我所寻找的问题。)理论上,连接是线程安全的,但所有其他连接都不是,因此您应该为每个线程创建一个会话
实际上,这取决于您使用的JMS实现。在大多数情况下,使用一个连接和多个会话就足够了,每个线程使用一个会话。在某些环境中,您可以通过使用多个连接获得额外的性能: 一些消息传递系统支持群集模式,在这种模式下,连接可以与不同的节点进行负载平衡。对于多个连接,您可以在此场景中使用多个节点的性能。(当然,只有当瓶颈位于MessageBroker一侧时,这才有帮助)
最好的解决方案是为我们提供一个连接池,并为管理员提供一些选项来配置特定区域中的行为。如果某些消息重复或丢失,可以吗?当JMS客户机通过网络连接到JMS代理时,任何API调用都有三个阶段
I was wondering if having one connection, one session, and 10 producers
is the recommended way to go or not?
当然,但这里需要注意的是,您只使用单线程,即在创建会话对象时创建的线程。所有10个生产者都绑定到此会话对象,从而绑定到同一线程
How about if I had one producer shared by all the threads? Would my messages
be corrupt or would it be sent out synchronized (giving no performance gain)?
我会说这是个糟糕的主意。JMS规范明确规定会话不应由多个线程共享。它不是线程安全的
What's the general guideline of deciding whether to create a new connection
or session if I'm always connecting to the same queue?
如果系统支持多线程,则可以从单个连接创建多个会话(每个会话对应于单个线程)。每个会话可以有多个生产者/消费者,但所有这些都不能在线程之间共享。根据我对本主题的研究,一个会话意味着一个线程。这是基于JMS规范的。如果需要多线程(多个生产者/消费者),则需要创建多个会话,一个连接即可