2015-05-18 2 views
1

У меня есть один экземпляр Jboss EAP 6.3 с размещенной там темой HornetQ (jndi - «java: jboss/exported/jms/topic/TestTopic», поэтому он должен быть удаленно удален) и у меня есть еще один экземпляр (скажем, клиент), развернутый в той же версии Jboss. Я должен выслушать TestTopic от клиента, используя подход @MessageDriven. Я много googled, но я до сих пор не знаю, как указать соединение с удаленным хостом, чтобы прослушать эту тему. Я нашел пример использования @ActivationConfigProperty (propertyName = "connectionParameters", propertyValue = "host = SOME_HOST; port = SOME_PORT"), но это свойство не указано в спецификации и, похоже, не имеет влияния.Jboss EAP 6.3 - прослушивание удаленной темы JMS (HornetQ)

дел до сих пор: часть standalone.xml:

<subsystem xmlns="urn:jboss:domain:messaging:1.4"> 
     <hornetq-server> 
      <persistence-enabled>true</persistence-enabled> 
      <journal-type>NIO</journal-type> 
      <journal-min-files>2</journal-min-files> 

      <connectors> 
       <netty-connector name="netty" socket-binding="messaging"/> 
       <netty-connector name="netty-throughput" socket-binding="messaging-throughput"> 
        <param key="batch-delay" value="50"/> 
       </netty-connector> 
       <in-vm-connector name="in-vm" server-id="0"/> 
      </connectors> 

      <acceptors> 
       <netty-acceptor name="netty" socket-binding="messaging"/> 
       <netty-acceptor name="netty-throughput" socket-binding="messaging-throughput"> 
        <param key="batch-delay" value="50"/> 
        <param key="direct-deliver" value="false"/> 
       </netty-acceptor> 
       <in-vm-acceptor name="in-vm" server-id="0"/> 
      </acceptors> 

      <security-settings> 
       <security-setting match="#"> 
        <permission type="send" roles="guest"/> 
        <permission type="consume" roles="guest"/> 
        <permission type="createNonDurableQueue" roles="guest"/> 
        <permission type="deleteNonDurableQueue" roles="guest"/> 
       </security-setting> 
      </security-settings> 

      <address-settings> 
       <address-setting match="#"> 
        <dead-letter-address>jms.queue.DLQ</dead-letter-address> 
        <expiry-address>jms.queue.ExpiryQueue</expiry-address> 
        <redelivery-delay>0</redelivery-delay> 
        <max-size-bytes>10485760</max-size-bytes> 
        <page-size-bytes>2097152</page-size-bytes> 
        <address-full-policy>PAGE</address-full-policy> 
        <message-counter-history-day-limit>10</message-counter-history-day-limit> 
       </address-setting> 
      </address-settings> 

      <jms-connection-factories> 
       <connection-factory name="InVmConnectionFactory"> 
        <connectors> 
         <connector-ref connector-name="in-vm"/> 
        </connectors> 
        <entries> 
         <entry name="java:/ConnectionFactory"/> 
        </entries> 
       </connection-factory> 
       <connection-factory name="RemoteConnectionFactory"> 
        <connectors> 
         <connector-ref connector-name="netty"/> 
        </connectors> 
        <entries> 
         <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/> 
        </entries> 
       </connection-factory> 
       <pooled-connection-factory name="hornetq-ra"> 
        <transaction mode="xa"/> 
        <connectors> 
         <connector-ref connector-name="in-vm"/> 
        </connectors> 
        <entries> 
         <entry name="java:/JmsXA"/> 
        </entries> 
       </pooled-connection-factory> 
      </jms-connection-factories> 

      <jms-destinations> 
       <jms-queue name="ExpiryQueue"> 
        <entry name="java:/jms/queue/ExpiryQueue"/> 
       </jms-queue> 
       <jms-queue name="DLQ"> 
        <entry name="java:/jms/queue/DLQ"/> 
       </jms-queue> 
       <jms-topic name="TestTopic"> 
        <entry name="java:/jms/topic/TestTopic"/> 
        <entry name="java:jboss/exported/jms/topic/TestTopic"/> 
       </jms-topic> 
      </jms-destinations> 
     </hornetq-server> 
    </subsystem> 

и мой боб настройки

@MessageDriven(mappedName = "TestTopicRemote", activationConfig = { 
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"), 
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"), 
    @ActivationConfigProperty(propertyName = "destination", propertyValue = "java:jboss/exported/jms/topic/TestTopic"), 
    @ActivationConfigProperty(propertyName = "connectionFactoryLookup", propertyValue = "jms/RemoteConnectionFactory"), 
    @ActivationConfigProperty(propertyName = "clientId", propertyValue = "guest"), 
    @ActivationConfigProperty(propertyName = "connectionParameters", propertyValue = "host=MY_HOST;port=5445")}) 

ответ

0

Проверьте, если вы должны предоставить @ResourceAdapter (значение = «ActiveMQ-ЭОР -5.6.0.rar ") на вашем MDB. Я смотрю на мое, я вижу, что все MDB аннотируются с этим тегом, кроме того, он @MessageDriven.

Также standalone.xml должны иметь информацию о соединении с сервером и портом Мой standalone.xml имеет ActiveMQ сервера URL

+0

Какую версию jboss вы используете? Я видел такие вещи, как «activemq-rar-5.6.0.rar», который использовался только в более старых версиях. –

+0

Также вы могли бы предоставить отрезанный из вашего standalone.xml, где вы указали сервер и порт? –

1

В конце концов я решил эту проблему. Может быть, будет полезно кому-то: на самом деле никаких дополнительных изменений в standalone.xml не требуется. MDB просто должны выглядеть следующим образом:

@MessageDriven(mappedName = "TestTopicRemote", activationConfig = { 
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"), 
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"), 
    @ActivationConfigProperty(propertyName = "destination", propertyValue = "TestTopic"), 
    @ActivationConfigProperty(propertyName = "connectorClassName", propertyValue = "${jms.topic.connectorClassName}"), 
    @ActivationConfigProperty(propertyName = "user", propertyValue = "${jms.topic.user}"), 
    @ActivationConfigProperty(propertyName = "password", propertyValue = "${jms.topic.password}"), 
    @ActivationConfigProperty(propertyName = "connectionParameters", propertyValue = "${jms.topic.connectionParameters}")}) 

и здесь ${SOMETHING} это системное свойство, определенное в standalone.xml (чтобы сделать эту работу флаг «аннотацию-свойство-замена» в standalone.xml должно быть правдой):

<system-properties> 
    <property name="jms.topic.connectorClassName" value="org.hornetq.core.remoting.impl.netty.NettyConnectorFactory"/> 
    <property name="jms.o.user" value="USERNAME"/> 
    <property name="jms.o.password" value="PASSWORD"/> 
    <property name="jms.o.connectionParameters" value="host=YOUR_HOST;port=5445"/> 
</system-properties> 

Обратите внимание, что пользователь USERNAME должен существовать на принимающем сервере. Если говорят о Jboss он должен быть удобным для пользователя приложения добавляется в гостевую группу (эта роль имеет разрешение по умолчанию для отправки и получения сообщений)

Конечно же, установка свойств не является обязательным, я сделал это только, чтобы избежать жесткого кодирования

+0

las Не будет подключен HornetQ с использованием jnp: // localhost/1099, NamingContextFactory, свойств для получения соединения Factory? – fatherazrael

0

Этих сбой в кластерной среде с JBoss EAP 6.4. Например, Foo.war развертывается дважды в кластере, тогда второй MDB не сможет зарегистрироваться из-за дублирования идентификатора клиента. Если вы сделаете идентификатор клиента уникальным, то оба экземпляра MDB получат сообщение.

На данный момент у меня нет работы.

Смежные вопросы