多个JMS ConnectionFactory

时间:2014-03-18 03:29:22

标签: jms activemq message-queue jms-topic

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

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

2 个答案:

答案 0 :(得分:2)

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

然而,根据您的要求使用多个ConnectionFactories是一个更好的设计,因此流量将均匀分布,并且您不会耗尽连接。

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

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

答案 1 :(得分:1)

  

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

非常暧昧的陈述。 TopicConnectionFactory不会收到或发送任何消息。它只是用于创建Connection的管理对象之一,后者又创建了Session,后者又创建了发布和订阅消息的发布者和订阅者。

  

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

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

根据规格

  

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

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