动态加载队列

时间:2014-07-18 14:03:15

标签: configuration jms jboss7.x message-queue

我实现了一个无状态会话Bean,它将消息发送到不同的消息队列。目前有两个不同的队列,但数量可能会增长。

目前队列是硬编码的:

@Stateless
public class SendNotificationBean implements SendNotification {
    private static final Logger logger = LoggerFactory.getLogger(SendNotificationBean.class);

  @Resource(lookup = "java:jboss/MQ.CONNECTIONFACTORY.JMS.A")
  private ConnectionFactory connectionFactoryA;

  @Resource(lookup = "java:jboss/MQ.CONNECTIONFACTORY.JMS.B")
  private ConnectionFactory connectionFactoryB;

  @Resource(lookup = "java:jboss/MQ.A")
  private Queue queueA;

  @Resource(lookup = "java:jboss/MQ.B")
  private Queue queueB;

  private Connection connectionA;
  private Connection connectionB;

  private MessageProducer producerA;
  private MessageProducer producerB;

  private Session sessionA;
  private Session sessionB;

  //...

}

是否可以动态加载队列?类似的东西:

Queue queue = getQueueDependingOfConfiguration(QueueType.A);

我认为这是可能的,但这也有意义吗?我还需要考虑什么?那么我是否必须将ConnectionFactory和/或Session存储在Map中?

谢谢,

麦克

1 个答案:

答案 0 :(得分:1)

您始终可以使用旧的JNDI InitialContext查找:

public Queue getQueueByName(String name) {
    Context ctx = new InitialContext();
    return ctx.lookup("java:jboss/MQ." + name);
}

QueueConnectionFactory也可以这样做。 但是,这种方法有其自身的缺点,因为处理JNDI对象的正确方法是将其添加到组件JNDI环境中(java:comp / env stuff)。

不建议在Map中存储QueueConnectionFactory或Queue实例 - 如果您在需要时获得对这些对象的引用,则可以安全地使用它。