【问题标题】:Loading Queue dynamically动态加载队列
【发布时间】:2014-07-18 22:25:37
【问题描述】:

我正在实现一个无状态会话 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 中?

谢谢,

迈克

【问题讨论】:

    标签: configuration jms jboss7.x message-queue


    【解决方案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 的东西)。

    不建议在 Map 中存储 QueueConnectionFactory 或 Queue 实例 - 如果您在需要时获取对这些对象的引用,那么您是安全的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多