Сгенерировать идентификатор клиента при развертывании

У меня есть кластер WildFly, который должен передавать все сообщения темы на разные узлы и сохранять их, если один узел отключен.
В этом случае мне нужен постоянный подписчик.

@MessageDriven(
    activationConfig = {
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
        @ActivationConfigProperty(propertyName = "destination", propertyValue = "jms/Topic"),
        @ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable"),
        @ActivationConfigProperty(propertyName = "subscriptionName", propertyValue = "anam123e"),
        @ActivationConfigProperty(propertyName = "clientID", propertyValue = "abcd"),
    }
)

Я заметил, что если я использую тот же идентификатор клиента, с которым система выполняет балансировку нагрузки. Если я изменю clientID или subscriptionName на уникальное значение, это сработает.

Итак, когда использовать уникальный clientID, а когда subscriptionName?
Я ответил: уникальный clientID для узла и subscriptionName для потока на узле.

Кроме того, я хочу сгенерировать clientID на основе имени узла wildfly, подобного следующему:

@ActivationConfigProperty(propertyName = "clientID", propertyValue = "abcd-" + WildFly.getInstance().getNodeName()),

Есть ли способ этого добиться?


person CSchulz    schedule 14.07.2015    source источник


Ответы (1)


Доступно очень простое решение: Замена собственности

Вам необходимо включить его в standalone.xml:

<subsystem xmlns="urn:jboss:domain:ee:2.0">
    <annotation-property-replacement>true</annotation-property-replacement>
    ...
</subsystem>

И новая аннотация может выглядеть так:

@MessageDriven(
    activationConfig = {
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
        @ActivationConfigProperty(propertyName = "destination", propertyValue = "jms/Topic"),
        @ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable"),
        @ActivationConfigProperty(propertyName = "subscriptionName", propertyValue = "aname"),
        @ActivationConfigProperty(propertyName = "clientID", propertyValue = "abcd-${jboss.node.name}"),
    }
)
person CSchulz    schedule 24.07.2015