1

我是 JMS 的新手,目前正在开发一个简单的聊天应用程序,在 Oreilly 的“Java 消息服务”中进行了说明。我在 ActiveMQ 中配置了一个 TopicConnectionFactory,它接收来自 TopicPublishers 的聊天消息并将其发送给 TopicSubscribers。

我的问题是“为什么我们需要在任何 JMS 应用程序中创建多个 TopicConnectionFactory”?由于 Connectionfactory 实例不与主题/队列绑定,为什么我们不能使用 ConnectionFactory 的一个实例来创建与应用程序中配置的所有主题(或队列)的连接?

4

2 回答 2

2

从技术上讲,你是对的。您可能只能使用一个 ConnectionFactory。

但是,根据您的要求使用多个 ConnectionFactories 是一个更好的设计,这样流量将均匀分布,并且您不会用完连接。

因此,如果您了解可能有问题的 JMS 客户端应用程序(逻辑不允许正确处理打开/关闭连接),您可以将其隔离以使用其自己的连接工厂。

此外,一些连接工厂允许同时包含 10 个默认活动连接池(这取决于实现/设置),如果您需要更多连接工厂,则可以使用多个连接工厂。

于 2014-03-18T16:29:59.750 回答
1

我在 ActiveMQ 中配置了一个 TopicConnectionFactory,它接收来自 TopicPublishers 的聊天消息并将其发送给 TopicSubscribers。

很模棱两可的说法。TopicConnectionFactory不接收或发送任何消息。它只是用于创建的管理对象之一,该对象Connection又创建了Session该对象,该对象又创建了发布和订阅消息的发布者和订阅者。

为什么我们不能使用 ConnectionFactory 的一个实例来创建与应用程序中配置的所有主题(或队列)的连接?

你绝对可以。没有人阻止你这样做。

根据规格

连接工厂对象封装了一组由管理员定义的连接配置参数。客户端使用它来创建与 JMS 提供者的连接。

因此,除非您有不同的配置要求,否则您可以使用相同的配置ConnectionFactory来创建多个连接。是的,正如 otc 上面提到的,连接数是配置参数之一。

于 2014-03-19T14:40:13.577 回答