0

JBoss5.1.2で実行されているMDBがJMS経由でリモートスタンドアロンHornetQに接続する際に問題が発生します。HornetQに接続し、HermesJMSを介してメッセージを配置/表示できるため、HornetQが正常に稼働していることを知っています。ただし、実際のアプリは正常に接続できないようです。

これが私の@MessageDrivenアノテーションです:

@MessageDriven(
        messageListenerInterface = MessageListener.class,
        activationConfig = { 
            @ActivationConfigProperty( //type of destination we pull messages from
                    propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
            @ActivationConfigProperty( //which destination JNDI suffix we pull message from
                    propertyName = "destination", propertyValue = "queue/inputQueue"),
            @ActivationConfigProperty( //how many times to reattempt on service errors
                    propertyName = "dLQMaxResent", propertyValue = "1"),
            @ActivationConfigProperty( //how many seconds to try a reconnect when failure to connect to jms provider
                    propertyName = "reconnectInterval", propertyValue = "15"),
            @ActivationConfigProperty(
                    propertyName = "providerAdapterJNDI", propertyValue = "java:/RemoteJMSProvider")
         }
    )

jms-ds.xmlファイルの構成は次のとおりです。

   <mbean code="org.jboss.jms.jndi.JMSProviderLoader"
      name="hornetq:service=MSProviderLoader,name=RemoteJMSProvider,server=remotehost">
    <attribute name="ProviderName">RemoteJMSProvider</attribute>
    <attribute name="ProviderAdapterClass">org.jboss.jms.jndi.JNDIProviderAdapter</attribute>
    <!-- The connection factory -->
    <attribute name="FactoryRef">/LocalHornetQConnectionFactory</attribute>
    <!-- The queue connection factory -->
    <attribute name="QueueFactoryRef">/LocalHornetQConnectionFactory</attribute>
    <!-- The topic factory -->
    <attribute name="TopicFactoryRef">/LocalHornetQConnectionFactory</attribute>
    <!-- Connect to JNDI on the host "the-remote-host-name" port 1099-->
    <attribute name="Properties">
       java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
       java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
       java.naming.provider.url=IPADDRESS:1099
    </attribute>   </mbean>

JBossjmx-consoleでRemoteJMSProviderを表示できます。さらに、JNDIViewで、リモートJMSプロバイダーのJNDI名を確認できます。JMXコンソールでjms.queue.inputQueueも表示されますが、メッセージを表示しようとすると、HermesJMSを表示してメッセージが表示されていることがわかっていても、メッセージが表示されないというメッセージが表示されます。

最後に、私のアプリケーションには例外はありません。すべて正常に動作しているように見えますが、メッセージを受信することはありません。HornetQログでさえ、私のIPアドレスが接続されていることを示しているので、キューを読み取れない理由がわかりません。

[RMI TCP Connection(6)-10.3.78.123] 17:02:06,837 FINER [sun.rmi.transport.tcp]  RMI TCP Connection(6)-10.3.78.123: (port 1098) client using 10.3.78.123:0

何か案は?

参考までに、HornetQ(2.2.5)の構成情報を示します。

hornetq-jms.xml:

   <connection-factory name="LocalHornetQConnectionFactory">
      <xa>true</xa>
      <connectors>
         <connector-ref connector-name="netty"/>
      </connectors>
      <entries>
         <entry name="/LocalHornetQConnectionFactory"/>
      </entries>

      <retry-interval>5000</retry-interval>
      <retry-interval-multiplier>1.0</retry-interval-multiplier>
      <reconnect-attempts>-1</reconnect-attempts>
      <failover-on-server-shutdown>true</failover-on-server-shutdown>
      <confirmation-window-size>1048576</confirmation-window-size>
   </connection-factory>


   <queue name="invalidQueue">
    <entry name="/queue/invalidQueue"/>
   </queue>

   <queue name="inputQueue">
      <entry name="/queue/inputQueue"/>
   </queue>
   <queue name="errorQueue">
      <entry name="/queue/errorQueue"/>
   </queue>
   <topic name="SAFEStorageAcknowledgement">
      <entry name="/topic/SAFEStorageAcknowledgement"/>
   </topic>
   <topic name="SAFEEvents">
      <entry name="/topic/SAFEEvents"/>
   </topic>

hornetq-configuration.xml:

   <address-settings>
      <!--default for catch all-->
      <address-setting match="#">
         <dead-letter-address>jms.queue.errorQueue</dead-letter-address>
         <expiry-address>jms.queue.errorQueue</expiry-address>
         <redelivery-delay>15000</redelivery-delay>
         <max-size-bytes>10485760</max-size-bytes>       
         <message-counter-history-day-limit>10</message-counter-history-day-limit>
         <address-full-policy>BLOCK</address-full-policy>
         <redistribution-delay>60000</redistribution-delay>
      </address-setting>
   </address-settings>

   <queues>
        <queue name="jms.queue.inputQueue">
            <address>jms.queue.inputQueue</address>
        </queue>

        <queue name="jms.queue.errorQueue">
            <address>jms.queue.errorQueue</address>
        </queue>

        <queue name="jms.queue.invalidQueue">
            <address>jms.queue.invalidQueue</address>
        </queue>

    </queues>

他のすべてのHornetQ設定はデフォルトです。

ありがとう、アンディ

4

1 に答える 1

0

ra.xmlで、または注釈として2つのアクティベーションプロパティを指定する必要があります。

ConnectorClassName = org.hornetq.core.remoting.impl.netty.NettyConnectorFactory

ConnectionParameters = host = 127.0.0.1; port = 5446

HornetQディストリビューションには、ra.xmlを使用してアクティベーションプロパティを構成するjavaee/jca-remoteという例があります。

于 2012-10-26T13:46:45.523 に答える