2017-01-05 10 views
0

Что я ищу является точной конфигурацией активации имени свойства для того, чтобы настроить сообщение Driven Bean, чтобы принимать сообщения из JMS Темы в режиме общей подпискиНастройка MDB (на Glassfish), чтобы прослушать общую тему подписку

@MessageDriven(activationConfig = { 
    @ActivationConfigProperty(propertyName = "destinationLookup",propertyValue = "java:app/jms/testT1"), 
    @ActivationConfigProperty(propertyName = "destinationType",propertyValue = "javax.jms.Topic"), 
    //the below property is not working in GlassFish (4.1) - just to convey the idea 
    @ActivationConfigProperty(propertyName = "sharedSubscription",propertyValue = "TRUE") 
}) 

// отредактирован

Пожалуйста, обратите внимание: намерение состоит в том, чтобы иметь возможность использовать МБР (в отношении общей темы для целей балансировки нагрузки) в приложении JavaEE, которые могут масштабироваться из horizonatally. Этот вопрос не связан с кластеризованной установкой, поэтому использование useSharedSubscriptionInClusteredContainer (в открытом MQ) не применимо

ответ

0

Если я правильно вас понимаю, вам не нужно это делать. Смысл наличия нескольких потребителей допускается по одной подписке было обойти ограничения Java SE, который не является проблемой в Java EE:

http://www.oracle.com/technetwork/articles/java/jms2messaging-1954190.html

В Java EE, вам просто нужно создать MDB для подписаться на тему, а затем настроить пул боба иметь несколько МБР:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE glassfish-ejb-jar PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 EJB 3.1//EN" "http://glassfish.org/dtds/glassfish-ejb-jar_3_1-1.dtd"> 
<glassfish-ejb-jar> 
    <enterprise-beans> 
    <ejb> 
     <ejb-name>MyPooledMDB</ejb-name> 
     <bean-pool> 
      <max-pool-size>5</max-pool-size> 
      <resize-quantity>1</resize-quantity> 
      <steady-pool-size>1</steady-pool-size> 
     </bean-pool> 
    </ejb> 
    </enterprise-beans> 
</glassfish-ejb-jar> 

для получения дополнительной информации, см Oracle GlassFish документы: https://docs.oracle.com/cd/E18930_01/html/821-2418/beait.html

(Обратите внимание, что steady-pool-size === «Начальный и минимальный размер бассейна»)

+0

Спасибо за ваши материалы Майк. вы правы. Я немного не согласен с этим требованием (я его отредактировал). Цель состоит не в том, чтобы зависеть от кластеризации, специфичной для сервера приложений. Скорее, обработайте каждый контейнерный процесс JavaEE как безгражданный (и горизонтально) масштабируемый объект. В случае увеличения моего груза, вы должны иметь возможность запускать дополнительные экземпляры и иметь общий доступ к MDB, например. если в эту тему отправлено 2 сообщения, а у меня один и тот же MDB на 2 узла, каждый из них должен получать по 1 сообщение каждый (общий). Идея очень похожа на группы потребителей в Kafka. – Abhishek

+0

Этого можно добиться с помощью контейнера Java SE, создав общий потребительский объект и обработав часть параллелизма с помощью пользовательского кода (что-то, что MDB предоставляют бесплатно). Но опять же, я хотел бы использовать MDB для достижения этого – Abhishek

+0

Я думаю, что ключевое различие между подписчиками и потребителями. Совместная подписка позволяет вам иметь несколько потребителей по одной подписке, но у вас все равно может быть несколько подписчиков по теме. Пул MDB на одном сервере или на нескольких серверах будет (я думаю) реализован как разные подписчики, что даст вам эффект, который вы хотите в любом случае. (несколько MDB, каждый из которых получает сообщения из одной темы). – Mike