多个 JMS ConnectionFactory
Posted
技术标签:
【中文标题】多个 JMS ConnectionFactory【英文标题】:More than one JMS ConnectionFactory 【发布时间】:2014-04-23 13:40:49 【问题描述】:我是 JMS 的新手,目前正在开发一个简单的聊天应用程序,在 Oreilly 的“Java 消息服务”中进行了说明。我在 ActiveMQ 中配置了一个 TopicConnectionFactory,它从 TopicPublishers 接收聊天消息并将其发送给 TopicSubscribers。
我的问题是“为什么我们需要在任何 JMS 应用程序中创建多个 TopicConnectionFactory”?既然 Connectionfactory 实例不与主题/队列绑定,为什么我们不能使用一个 ConnectionFactory 实例来创建与应用程序中配置的所有主题(或队列)的连接?
【问题讨论】:
【参考方案1】:从技术上讲,您是对的。您可能只能使用一个 ConnectionFactory。
但是,根据您的要求使用多个 ConnectionFactories 是一种更好的设计,这样流量会均匀分布,并且不会耗尽连接。
因此,如果您知道可能有问题的 JMS 客户端应用程序(逻辑不允许正确处理打开/关闭连接),您可以将其隔离以使用自己的连接工厂。
此外,一些连接工厂允许同时包含 10 个默认活动连接的池(这取决于实施/设置),如果您需要更多,您可以使用多个连接工厂。
【讨论】:
【参考方案2】:我在 ActiveMQ 中配置了一个 TopicConnectionFactory,它接收来自 TopicPublishers 的聊天消息并将其分派给 TopicSubscribers。
非常模棱两可的说法。 TopicConnectionFactory
不接收或发送任何消息。它只是用于创建Connection
的管理对象之一,而Connection
又创建Session
,而Session
又创建发布和订阅消息的发布者和订阅者。
为什么我们不能使用 ConnectionFactory 的一个实例来创建与应用程序中配置的所有主题(或队列)的连接?
你绝对可以。没有人阻止你这样做。
根据规格
一个连接工厂对象封装了一组连接配置 由管理员定义的参数。客户使用它来 创建与 JMS 提供者的连接。
因此,除非您有不同的配置要求,否则您可以使用相同的ConnectionFactory
创建多个连接。是的,正如 otc 上面提到的,连接数是配置参数之一。
【讨论】:
以上是关于多个 JMS ConnectionFactory的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Java Config 的单个 MessageListenerContainer 中添加多个 JMS MessageListner